forked from qt-creator/qt-creator
Add support for MSVC2022 (Preview)
2022 should be binary compatibility with previous versions (see https://docs.microsoft.com/en-us/cpp/porting/binary-compat-2015-2017?view=msvc-160). Change-Id: I4200f0c7d78adb0d1f352cd527c0f6041a1f5283 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -381,6 +381,7 @@ static ToolChain *msvcToolChain(Id language)
|
|||||||
{
|
{
|
||||||
ToolChain *toolChain = ToolChainManager::toolChain([language](const ToolChain *t) {
|
ToolChain *toolChain = ToolChainManager::toolChain([language](const ToolChain *t) {
|
||||||
const Abi abi = t->targetAbi();
|
const Abi abi = t->targetAbi();
|
||||||
|
// TODO: Should Abi::WindowsMsvc2022Flavor be added too?
|
||||||
return (abi.osFlavor() == Abi::WindowsMsvc2017Flavor || abi.osFlavor() == Abi::WindowsMsvc2019Flavor)
|
return (abi.osFlavor() == Abi::WindowsMsvc2017Flavor || abi.osFlavor() == Abi::WindowsMsvc2019Flavor)
|
||||||
&& abi.architecture() == Abi::X86Architecture
|
&& abi.architecture() == Abi::X86Architecture
|
||||||
&& abi.wordWidth() == 64
|
&& abi.wordWidth() == 64
|
||||||
|
@@ -111,6 +111,7 @@ static void setupPreregisteredOsFlavors() {
|
|||||||
registerOsFlavor(Abi::WindowsMsvc2015Flavor, "msvc2015", {Abi::OS::WindowsOS});
|
registerOsFlavor(Abi::WindowsMsvc2015Flavor, "msvc2015", {Abi::OS::WindowsOS});
|
||||||
registerOsFlavor(Abi::WindowsMsvc2017Flavor, "msvc2017", {Abi::OS::WindowsOS});
|
registerOsFlavor(Abi::WindowsMsvc2017Flavor, "msvc2017", {Abi::OS::WindowsOS});
|
||||||
registerOsFlavor(Abi::WindowsMsvc2019Flavor, "msvc2019", {Abi::OS::WindowsOS});
|
registerOsFlavor(Abi::WindowsMsvc2019Flavor, "msvc2019", {Abi::OS::WindowsOS});
|
||||||
|
registerOsFlavor(Abi::WindowsMsvc2022Flavor, "msvc2022", {Abi::OS::WindowsOS});
|
||||||
registerOsFlavor(Abi::WindowsMSysFlavor, "msys", {Abi::OS::WindowsOS});
|
registerOsFlavor(Abi::WindowsMSysFlavor, "msys", {Abi::OS::WindowsOS});
|
||||||
registerOsFlavor(Abi::WindowsCEFlavor, "ce", {Abi::OS::WindowsOS});
|
registerOsFlavor(Abi::WindowsCEFlavor, "ce", {Abi::OS::WindowsOS});
|
||||||
registerOsFlavor(Abi::VxWorksFlavor, "vxworks", {Abi::OS::VxWorks});
|
registerOsFlavor(Abi::VxWorksFlavor, "vxworks", {Abi::OS::VxWorks});
|
||||||
@@ -285,7 +286,9 @@ static Abis parseCoffHeader(const QByteArray &data)
|
|||||||
flavor = Abi::WindowsMsvc2013Flavor;
|
flavor = Abi::WindowsMsvc2013Flavor;
|
||||||
break;
|
break;
|
||||||
case 14:
|
case 14:
|
||||||
if (minorLinker >= quint8(20))
|
if (minorLinker >= quint8(30))
|
||||||
|
flavor = Abi::WindowsMsvc2022Flavor;
|
||||||
|
else if (minorLinker >= quint8(20))
|
||||||
flavor = Abi::WindowsMsvc2019Flavor;
|
flavor = Abi::WindowsMsvc2019Flavor;
|
||||||
else if (minorLinker >= quint8(10))
|
else if (minorLinker >= quint8(10))
|
||||||
flavor = Abi::WindowsMsvc2017Flavor;
|
flavor = Abi::WindowsMsvc2017Flavor;
|
||||||
@@ -295,6 +298,9 @@ static Abis parseCoffHeader(const QByteArray &data)
|
|||||||
case 15:
|
case 15:
|
||||||
flavor = Abi::WindowsMsvc2019Flavor;
|
flavor = Abi::WindowsMsvc2019Flavor;
|
||||||
break;
|
break;
|
||||||
|
case 16:
|
||||||
|
flavor = Abi::WindowsMsvc2022Flavor;
|
||||||
|
break;
|
||||||
default: // Keep unknown flavor
|
default: // Keep unknown flavor
|
||||||
if (minorLinker != 0)
|
if (minorLinker != 0)
|
||||||
flavor = Abi::WindowsMSysFlavor; // MSVC seems to avoid using minor numbers
|
flavor = Abi::WindowsMSysFlavor; // MSVC seems to avoid using minor numbers
|
||||||
@@ -690,9 +696,9 @@ bool Abi::operator == (const Abi &other) const
|
|||||||
|
|
||||||
static bool compatibleMSVCFlavors(const Abi::OSFlavor &left, const Abi ::OSFlavor &right)
|
static bool compatibleMSVCFlavors(const Abi::OSFlavor &left, const Abi ::OSFlavor &right)
|
||||||
{
|
{
|
||||||
// MSVC 2019, 2017 and 2015 are compatible
|
// MSVC 2022, 2019, 2017 and 2015 are compatible
|
||||||
return left >= Abi::WindowsMsvc2015Flavor && left <= Abi::WindowsMsvc2019Flavor
|
return left >= Abi::WindowsMsvc2015Flavor && left <= Abi::WindowsMsvc2022Flavor
|
||||||
&& right >= Abi::WindowsMsvc2015Flavor && right <= Abi::WindowsMsvc2019Flavor;
|
&& right >= Abi::WindowsMsvc2015Flavor && right <= Abi::WindowsMsvc2022Flavor;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Abi::isCompatibleWith(const Abi &other) const
|
bool Abi::isCompatibleWith(const Abi &other) const
|
||||||
@@ -1089,6 +1095,8 @@ bool Abi::osSupportsFlavor(const Abi::OS &os, const Abi::OSFlavor &flavor)
|
|||||||
|
|
||||||
Abi::OSFlavor Abi::flavorForMsvcVersion(int version)
|
Abi::OSFlavor Abi::flavorForMsvcVersion(int version)
|
||||||
{
|
{
|
||||||
|
if (version >= 1930)
|
||||||
|
return WindowsMsvc2022Flavor;
|
||||||
if (version >= 1920)
|
if (version >= 1920)
|
||||||
return WindowsMsvc2019Flavor;
|
return WindowsMsvc2019Flavor;
|
||||||
if (version >= 1910)
|
if (version >= 1910)
|
||||||
|
@@ -112,7 +112,8 @@ public:
|
|||||||
WindowsMsvc2015Flavor,
|
WindowsMsvc2015Flavor,
|
||||||
WindowsMsvc2017Flavor,
|
WindowsMsvc2017Flavor,
|
||||||
WindowsMsvc2019Flavor,
|
WindowsMsvc2019Flavor,
|
||||||
WindowsLastMsvcFlavor = WindowsMsvc2019Flavor,
|
WindowsMsvc2022Flavor,
|
||||||
|
WindowsLastMsvcFlavor = WindowsMsvc2022Flavor,
|
||||||
WindowsMSysFlavor,
|
WindowsMSysFlavor,
|
||||||
WindowsCEFlavor,
|
WindowsCEFlavor,
|
||||||
|
|
||||||
|
@@ -429,7 +429,9 @@ static Abi findAbiOfMsvc(MsvcToolChain::Type type,
|
|||||||
else if (version == QLatin1String("v7.0A") || version == QLatin1String("v7.1"))
|
else if (version == QLatin1String("v7.0A") || version == QLatin1String("v7.1"))
|
||||||
msvcVersionString = QLatin1String("10.0");
|
msvcVersionString = QLatin1String("10.0");
|
||||||
}
|
}
|
||||||
if (msvcVersionString.startsWith(QLatin1String("16.")))
|
if (msvcVersionString.startsWith(QLatin1String("17.")))
|
||||||
|
flavor = Abi::WindowsMsvc2022Flavor;
|
||||||
|
else if (msvcVersionString.startsWith(QLatin1String("16.")))
|
||||||
flavor = Abi::WindowsMsvc2019Flavor;
|
flavor = Abi::WindowsMsvc2019Flavor;
|
||||||
else if (msvcVersionString.startsWith(QLatin1String("15.")))
|
else if (msvcVersionString.startsWith(QLatin1String("15.")))
|
||||||
flavor = Abi::WindowsMsvc2017Flavor;
|
flavor = Abi::WindowsMsvc2017Flavor;
|
||||||
@@ -926,6 +928,10 @@ QStringList MsvcToolChain::suggestedMkspecList() const
|
|||||||
"winrt-arm-msvc2019",
|
"winrt-arm-msvc2019",
|
||||||
"winrt-x86-msvc2019",
|
"winrt-x86-msvc2019",
|
||||||
"winrt-x64-msvc2019"};
|
"winrt-x64-msvc2019"};
|
||||||
|
case Abi::WindowsMsvc2022Flavor:
|
||||||
|
return {"win32-msvc",
|
||||||
|
"win32-msvc2022",
|
||||||
|
"win32-arm64-msvc"};
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -937,6 +943,14 @@ Abis MsvcToolChain::supportedAbis() const
|
|||||||
Abi abi = targetAbi();
|
Abi abi = targetAbi();
|
||||||
Abis abis = {abi};
|
Abis abis = {abi};
|
||||||
switch (abi.osFlavor()) {
|
switch (abi.osFlavor()) {
|
||||||
|
case Abi::WindowsMsvc2022Flavor:
|
||||||
|
abis << Abi(abi.architecture(),
|
||||||
|
abi.os(),
|
||||||
|
Abi::WindowsMsvc2019Flavor,
|
||||||
|
abi.binaryFormat(),
|
||||||
|
abi.wordWidth(),
|
||||||
|
abi.param());
|
||||||
|
Q_FALLTHROUGH();
|
||||||
case Abi::WindowsMsvc2019Flavor:
|
case Abi::WindowsMsvc2019Flavor:
|
||||||
abis << Abi(abi.architecture(),
|
abis << Abi(abi.architecture(),
|
||||||
abi.os(),
|
abi.os(),
|
||||||
|
@@ -2274,6 +2274,8 @@ static Abi refineAbiFromBuildString(const QByteArray &buildString, const Abi &pr
|
|||||||
flavor = Abi::WindowsMsvc2017Flavor;
|
flavor = Abi::WindowsMsvc2017Flavor;
|
||||||
} else if (compiler.startsWith("MSVC 2019") && os == Abi::WindowsOS) {
|
} else if (compiler.startsWith("MSVC 2019") && os == Abi::WindowsOS) {
|
||||||
flavor = Abi::WindowsMsvc2019Flavor;
|
flavor = Abi::WindowsMsvc2019Flavor;
|
||||||
|
} else if (compiler.startsWith("MSVC 2022") && os == Abi::WindowsOS) {
|
||||||
|
flavor = Abi::WindowsMsvc2022Flavor;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Abi(arch, os, flavor, format, wordWidth);
|
return Abi(arch, os, flavor, format, wordWidth);
|
||||||
|
Reference in New Issue
Block a user