From 467dfa14dd96f04e862d6d0b9f3aa70b9efa6c70 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Mon, 19 Feb 2024 16:19:41 +0100 Subject: [PATCH] Utils: Rename HostArchitecture enum Since its not only good for the Host and to bring it in line with the OsType we rename HostArchitecture to OsArch. To make it work on all Platforms we change hostArchitecture to use QSysInfo instead of using Os specific calls. Change-Id: I1a9a4c8f9faa2a504694d8288110c9ee5c483440 Reviewed-by: hjk Reviewed-by: David Schulz Reviewed-by: --- src/libs/utils/hostosinfo.cpp | 42 +++++++------------ src/libs/utils/hostosinfo.h | 4 +- src/libs/utils/osspecificaspects.h | 2 + src/plugins/debugger/debuggeritemmanager.cpp | 2 +- src/plugins/projectexplorer/msvctoolchain.cpp | 20 ++++----- 5 files changed, 29 insertions(+), 41 deletions(-) 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);