diff --git a/src/libs/utils/hostosinfo.cpp b/src/libs/utils/hostosinfo.cpp index d8361266f08..e1ea49dfa0f 100644 --- a/src/libs/utils/hostosinfo.cpp +++ b/src/libs/utils/hostosinfo.cpp @@ -29,36 +29,26 @@ namespace Utils { Qt::CaseSensitivity HostOsInfo::m_overrideFileNameCaseSensitivity = Qt::CaseSensitive; bool HostOsInfo::m_useOverrideFileNameCaseSensitivity = false; -#ifdef Q_OS_WIN -static WORD hostProcessorArchitecture() +static OsArch parseArchitecture() { - SYSTEM_INFO info; - GetNativeSystemInfo(&info); - return info.wProcessorArchitecture; + QString currentArchitecture = QSysInfo::currentCpuArchitecture(); + if (currentArchitecture == QLatin1String("x86_64")) + return OsArchAMD64; + if (currentArchitecture == QLatin1String("x86")) + return OsArchX86; + if (currentArchitecture == QLatin1String("ia64")) + return OsArchItanium; + if (currentArchitecture == QLatin1String("arm")) + return OsArchArm; + if (currentArchitecture == QLatin1String("arm64")) + return OsArchArm64; + return OsArchUnknown; } -#endif -HostOsInfo::HostArchitecture HostOsInfo::hostArchitecture() +OsArch HostOsInfo::hostArchitecture() { -#ifdef Q_OS_WIN - static const WORD processorArchitecture = hostProcessorArchitecture(); - switch (processorArchitecture) { - case PROCESSOR_ARCHITECTURE_AMD64: - return HostOsInfo::HostArchitectureAMD64; - case PROCESSOR_ARCHITECTURE_INTEL: - return HostOsInfo::HostArchitectureX86; - case PROCESSOR_ARCHITECTURE_IA64: - return HostOsInfo::HostArchitectureItanium; - case PROCESSOR_ARCHITECTURE_ARM: - return HostOsInfo::HostArchitectureArm; - case PROCESSOR_ARCHITECTURE_ARM64: - return HostOsInfo::HostArchitectureArm64; - default: - return HostOsInfo::HostArchitectureUnknown; - } -#else - return HostOsInfo::HostArchitectureUnknown; -#endif + static const OsArch arch = parseArchitecture(); + return arch; } bool HostOsInfo::isRunningUnderRosetta() diff --git a/src/libs/utils/hostosinfo.h b/src/libs/utils/hostosinfo.h index 44880f7885c..fa153f24d54 100644 --- a/src/libs/utils/hostosinfo.h +++ b/src/libs/utils/hostosinfo.h @@ -41,9 +41,7 @@ public: #endif } - enum HostArchitecture { HostArchitectureX86, HostArchitectureAMD64, HostArchitectureItanium, - HostArchitectureArm, HostArchitectureArm64, HostArchitectureUnknown }; - static HostArchitecture hostArchitecture(); + static OsArch hostArchitecture(); static constexpr bool isWindowsHost() { return hostOs() == OsTypeWindows; } static constexpr bool isLinuxHost() { return hostOs() == OsTypeLinux; } diff --git a/src/libs/utils/osspecificaspects.h b/src/libs/utils/osspecificaspects.h index c735f313abc..d2a588688be 100644 --- a/src/libs/utils/osspecificaspects.h +++ b/src/libs/utils/osspecificaspects.h @@ -14,6 +14,8 @@ namespace Utils { // Add more as needed. enum OsType { OsTypeWindows, OsTypeLinux, OsTypeMac, OsTypeOtherUnix, OsTypeOther }; +enum OsArch { OsArchUnknown, OsArchX86, OsArchAMD64, OsArchItanium, OsArchArm, OsArchArm64 }; + inline QString osTypeToString(OsType osType) { switch (osType) { diff --git a/src/plugins/debugger/debuggeritemmanager.cpp b/src/plugins/debugger/debuggeritemmanager.cpp index 2644e3fa125..87b62472985 100644 --- a/src/plugins/debugger/debuggeritemmanager.cpp +++ b/src/plugins/debugger/debuggeritemmanager.cpp @@ -549,7 +549,7 @@ void DebuggerItemModel::autoDetectCdbDebuggers() for (const QFileInfo &kitFolderFi : kitFolders) { const QString path = kitFolderFi.absoluteFilePath(); QStringList abis = {"x86", "x64"}; - if (HostOsInfo::hostArchitecture() == HostOsInfo::HostArchitectureArm64) + if (HostOsInfo::hostArchitecture() == Utils::OsArchArm64) abis << "arm64"; for (const QString &abi: abis) { const QFileInfo cdbBinary(path + "/Debuggers/" + abi + "/cdb.exe"); diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 5c1ded6a84b..f5d66994696 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -124,19 +124,19 @@ static QString platformName(MsvcToolchain::Platform t) static bool hostPrefersPlatform(MsvcToolchain::Platform platform) { switch (HostOsInfo::hostArchitecture()) { - case HostOsInfo::HostArchitectureAMD64: + case Utils::OsArchAMD64: return platform == MsvcToolchain::amd64 || platform == MsvcToolchain::amd64_arm || platform == MsvcToolchain::amd64_x86 || platform == MsvcToolchain::amd64_arm64; - case HostOsInfo::HostArchitectureX86: + case Utils::OsArchX86: return platform == MsvcToolchain::x86 || platform == MsvcToolchain::x86_amd64 || platform == MsvcToolchain::x86_ia64 || platform == MsvcToolchain::x86_arm || platform == MsvcToolchain::x86_arm64; - case HostOsInfo::HostArchitectureArm: + case Utils::OsArchArm: return platform == MsvcToolchain::arm; - case HostOsInfo::HostArchitectureArm64: + case Utils::OsArchArm64: return platform == MsvcToolchain::arm64 || platform == MsvcToolchain::arm64_x86 || platform == MsvcToolchain::arm64_amd64; - case HostOsInfo::HostArchitectureItanium: + case Utils::OsArchItanium: return platform == MsvcToolchain::ia64; default: return false; @@ -151,12 +151,12 @@ static bool hostSupportsPlatform(MsvcToolchain::Platform platform) switch (HostOsInfo::hostArchitecture()) { // The x86 host toolchains are not the preferred toolchains on amd64 but they are still // supported by that host - case HostOsInfo::HostArchitectureAMD64: + case Utils::OsArchAMD64: return platform == MsvcToolchain::x86 || platform == MsvcToolchain::x86_amd64 || platform == MsvcToolchain::x86_ia64 || platform == MsvcToolchain::x86_arm || platform == MsvcToolchain::x86_arm64; // The Arm64 host can run the cross-compilers via emulation of x86 and amd64 - case HostOsInfo::HostArchitectureArm64: + case Utils::OsArchArm64: return platform == MsvcToolchain::x86_arm || platform == MsvcToolchain::x86_arm64 || platform == MsvcToolchain::amd64_arm || platform == MsvcToolchain::amd64_arm64 || platform == MsvcToolchain::x86 || platform == MsvcToolchain::x86_amd64 @@ -1228,8 +1228,7 @@ MsvcToolchain::Platform MsvcToolchain::platform() const QStringList args = m_varsBatArg.split(' '); if (const MsvcPlatform *entry = platformEntryFromName(args.value(0))) return entry->platform; - return Utils::HostOsInfo::hostArchitecture() == Utils::HostOsInfo::HostArchitectureAMD64 ? amd64 - : x86; + return Utils::HostOsInfo::hostArchitecture() == Utils::OsArchAMD64 ? amd64 : x86; } // -------------------------------------------------------------------------- @@ -1308,8 +1307,7 @@ public: m_varsBatPathCombo->addItem(nativeVcVars); } } - const bool isAmd64 - = Utils::HostOsInfo::hostArchitecture() == Utils::HostOsInfo::HostArchitectureAMD64; + const bool isAmd64 = Utils::HostOsInfo::hostArchitecture() == Utils::OsArchAMD64; // TODO: Add missing values to MsvcToolChain::Platform m_varsBatArchCombo->addItem(Tr::tr(""), isAmd64 ? MsvcToolchain::amd64 : MsvcToolchain::x86); m_varsBatArchCombo->addItem("x86", MsvcToolchain::x86);