From e3af694ad9a4e5dfe7f2f445ca4e4d75d1cb4c3d Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Mon, 23 May 2022 18:55:37 +0200 Subject: [PATCH] ProjectExplorer: Fix Windows Arm64 MSVC compilers detection Microsoft offers cross-compilers for the Arm64 architecture. Windows 11 Arm64 can emulate the x86 and x64 architecture so the binaries that can be run should be taken into consideration. Change-Id: I330c15a2c543eada9f7c939887ce13a1dd7559fd Reviewed-by: Reviewed-by: David Schulz --- src/libs/utils/hostosinfo.cpp | 1 + src/plugins/projectexplorer/msvctoolchain.cpp | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/libs/utils/hostosinfo.cpp b/src/libs/utils/hostosinfo.cpp index 78ed7f22867..48518f8fc1a 100644 --- a/src/libs/utils/hostosinfo.cpp +++ b/src/libs/utils/hostosinfo.cpp @@ -65,6 +65,7 @@ HostOsInfo::HostArchitecture HostOsInfo::hostArchitecture() case PROCESSOR_ARCHITECTURE_IA64: return HostOsInfo::HostArchitectureItanium; case PROCESSOR_ARCHITECTURE_ARM: + case PROCESSOR_ARCHITECTURE_ARM64: return HostOsInfo::HostArchitectureArm; default: return HostOsInfo::HostArchitectureUnknown; diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index c4eae8b7903..bfafaa83f65 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -158,12 +158,23 @@ static bool hostSupportsPlatform(MsvcToolChain::Platform platform) { if (hostPrefersPlatform(platform)) return true; + + switch (HostOsInfo::hostArchitecture()) { // The x86 host toolchains are not the preferred toolchains on amd64 but they are still // supported by that host - return HostOsInfo::hostArchitecture() == HostOsInfo::HostArchitectureAMD64 - && (platform == MsvcToolChain::x86 || platform == MsvcToolChain::x86_amd64 + case HostOsInfo::HostArchitectureAMD64: + return platform == MsvcToolChain::x86 || platform == MsvcToolChain::x86_amd64 || platform == MsvcToolChain::x86_ia64 || platform == MsvcToolChain::x86_arm - || platform == MsvcToolChain::x86_arm64); + || platform == MsvcToolChain::x86_arm64; + // The Arm64 host can run the cross-compilers via emulation of x86 and amd64 + case HostOsInfo::HostArchitectureArm: + return platform == MsvcToolChain::x86_arm || platform == MsvcToolChain::x86_arm64 + || platform == MsvcToolChain::amd64_arm || platform == MsvcToolChain::amd64_arm64 + || platform == MsvcToolChain::x86 || platform == MsvcToolChain::x86_amd64 + || platform == MsvcToolChain::amd64 || platform == MsvcToolChain::amd64_x86; + default: + return false; + } } static QString fixRegistryPath(const QString &path)