diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 6ac2e30fd13..75f829b5308 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -381,6 +381,7 @@ static ToolChain *msvcToolChain(Id language) { ToolChain *toolChain = ToolChainManager::toolChain([language](const ToolChain *t) { const Abi abi = t->targetAbi(); + // TODO: Should Abi::WindowsMsvc2022Flavor be added too? return (abi.osFlavor() == Abi::WindowsMsvc2017Flavor || abi.osFlavor() == Abi::WindowsMsvc2019Flavor) && abi.architecture() == Abi::X86Architecture && abi.wordWidth() == 64 diff --git a/src/plugins/projectexplorer/abi.cpp b/src/plugins/projectexplorer/abi.cpp index 10134096d9c..62fd00b7457 100644 --- a/src/plugins/projectexplorer/abi.cpp +++ b/src/plugins/projectexplorer/abi.cpp @@ -111,6 +111,7 @@ static void setupPreregisteredOsFlavors() { registerOsFlavor(Abi::WindowsMsvc2015Flavor, "msvc2015", {Abi::OS::WindowsOS}); registerOsFlavor(Abi::WindowsMsvc2017Flavor, "msvc2017", {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::WindowsCEFlavor, "ce", {Abi::OS::WindowsOS}); registerOsFlavor(Abi::VxWorksFlavor, "vxworks", {Abi::OS::VxWorks}); @@ -285,7 +286,9 @@ static Abis parseCoffHeader(const QByteArray &data) flavor = Abi::WindowsMsvc2013Flavor; break; case 14: - if (minorLinker >= quint8(20)) + if (minorLinker >= quint8(30)) + flavor = Abi::WindowsMsvc2022Flavor; + else if (minorLinker >= quint8(20)) flavor = Abi::WindowsMsvc2019Flavor; else if (minorLinker >= quint8(10)) flavor = Abi::WindowsMsvc2017Flavor; @@ -295,6 +298,9 @@ static Abis parseCoffHeader(const QByteArray &data) case 15: flavor = Abi::WindowsMsvc2019Flavor; break; + case 16: + flavor = Abi::WindowsMsvc2022Flavor; + break; default: // Keep unknown flavor if (minorLinker != 0) 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) { - // MSVC 2019, 2017 and 2015 are compatible - return left >= Abi::WindowsMsvc2015Flavor && left <= Abi::WindowsMsvc2019Flavor - && right >= Abi::WindowsMsvc2015Flavor && right <= Abi::WindowsMsvc2019Flavor; + // MSVC 2022, 2019, 2017 and 2015 are compatible + return left >= Abi::WindowsMsvc2015Flavor && left <= Abi::WindowsMsvc2022Flavor + && right >= Abi::WindowsMsvc2015Flavor && right <= Abi::WindowsMsvc2022Flavor; } 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) { + if (version >= 1930) + return WindowsMsvc2022Flavor; if (version >= 1920) return WindowsMsvc2019Flavor; if (version >= 1910) diff --git a/src/plugins/projectexplorer/abi.h b/src/plugins/projectexplorer/abi.h index 2ddfdfa8817..56272baced3 100644 --- a/src/plugins/projectexplorer/abi.h +++ b/src/plugins/projectexplorer/abi.h @@ -112,7 +112,8 @@ public: WindowsMsvc2015Flavor, WindowsMsvc2017Flavor, WindowsMsvc2019Flavor, - WindowsLastMsvcFlavor = WindowsMsvc2019Flavor, + WindowsMsvc2022Flavor, + WindowsLastMsvcFlavor = WindowsMsvc2022Flavor, WindowsMSysFlavor, WindowsCEFlavor, diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 80b7ae637db..56b7431073c 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -429,7 +429,9 @@ static Abi findAbiOfMsvc(MsvcToolChain::Type type, else if (version == QLatin1String("v7.0A") || version == QLatin1String("v7.1")) 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; else if (msvcVersionString.startsWith(QLatin1String("15."))) flavor = Abi::WindowsMsvc2017Flavor; @@ -926,6 +928,10 @@ QStringList MsvcToolChain::suggestedMkspecList() const "winrt-arm-msvc2019", "winrt-x86-msvc2019", "winrt-x64-msvc2019"}; + case Abi::WindowsMsvc2022Flavor: + return {"win32-msvc", + "win32-msvc2022", + "win32-arm64-msvc"}; default: break; } @@ -937,6 +943,14 @@ Abis MsvcToolChain::supportedAbis() const Abi abi = targetAbi(); Abis abis = {abi}; 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: abis << Abi(abi.architecture(), abi.os(), diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 4275f4e3412..61e943824ae 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -2274,6 +2274,8 @@ static Abi refineAbiFromBuildString(const QByteArray &buildString, const Abi &pr flavor = Abi::WindowsMsvc2017Flavor; } else if (compiler.startsWith("MSVC 2019") && os == Abi::WindowsOS) { flavor = Abi::WindowsMsvc2019Flavor; + } else if (compiler.startsWith("MSVC 2022") && os == Abi::WindowsOS) { + flavor = Abi::WindowsMsvc2022Flavor; } return Abi(arch, os, flavor, format, wordWidth);