From f458204a52d3592e6c1d7916b7838d259978aa3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 2 Sep 2023 03:16:53 +0200 Subject: [PATCH] NOISSUE add some arch probing code --- libraries/systeminfo/include/sys.h | 14 ++++++++++++++ libraries/systeminfo/src/sys_apple.cpp | 18 ++++++++++++++++++ libraries/systeminfo/src/sys_unix.cpp | 16 ++++++++++++++++ libraries/systeminfo/src/sys_win32.cpp | 19 +++++++++++++++++++ 4 files changed, 67 insertions(+) diff --git a/libraries/systeminfo/include/sys.h b/libraries/systeminfo/include/sys.h index c1d4ecf8..3cab76ea 100644 --- a/libraries/systeminfo/include/sys.h +++ b/libraries/systeminfo/include/sys.h @@ -12,6 +12,18 @@ enum class KernelType { Linux }; +enum class ArchitectureType { + Undetermined, + I386, + AMD64, + ARM64 +}; + +struct Architecture { + ArchitectureType type; + QString raw; +}; + struct KernelInfo { QString kernelName; @@ -57,6 +69,8 @@ DistributionInfo getDistributionInfo(); uint64_t getSystemRam(); +Architecture systemArchitecture(); + bool isSystem64bit(); bool isCPU64bit(); diff --git a/libraries/systeminfo/src/sys_apple.cpp b/libraries/systeminfo/src/sys_apple.cpp index b1ec6760..6d6a193d 100644 --- a/libraries/systeminfo/src/sys_apple.cpp +++ b/libraries/systeminfo/src/sys_apple.cpp @@ -77,3 +77,21 @@ bool Sys::lookupSystemStatusCode(uint64_t code, std::string &name, std::string & { return false; } + +Sys::Architecture Sys::systemArchitecture() { + struct utsname buf; + uname(&buf); + QString arch = buf.machine; + if (arch == "x86_64") { + return { ArchitectureType::AMD64, arch }; + } + else if (arch == "i386") { + return { ArchitectureType::I386, arch }; + } + else if (arch == "arm64") { + return { ArchitectureType::ARM64, arch }; + } + else { + return { ArchitectureType::Undetermined, arch }; + } +} diff --git a/libraries/systeminfo/src/sys_unix.cpp b/libraries/systeminfo/src/sys_unix.cpp index 66928ae3..08f6206f 100644 --- a/libraries/systeminfo/src/sys_unix.cpp +++ b/libraries/systeminfo/src/sys_unix.cpp @@ -117,6 +117,22 @@ Sys::DistributionInfo Sys::getDistributionInfo() return result; } +Sys::Architecture Sys::systemArchitecture() { + QString qtArch = QSysInfo::currentCpuArchitecture(); + if (qtArch == "x86_64") { + return { ArchitectureType::AMD64, qtArch }; + } + else if (qtArch == "i386") { + return { ArchitectureType::I386, qtArch }; + } + else if (qtArch == "arm64") { + return { ArchitectureType::ARM64, qtArch }; + } + else { + return { ArchitectureType::Undetermined, qtArch }; + } +} + bool Sys::lookupSystemStatusCode(uint64_t code, std::string &name, std::string &description) { return false; diff --git a/libraries/systeminfo/src/sys_win32.cpp b/libraries/systeminfo/src/sys_win32.cpp index 752bbe0c..9a16fbd4 100644 --- a/libraries/systeminfo/src/sys_win32.cpp +++ b/libraries/systeminfo/src/sys_win32.cpp @@ -94,3 +94,22 @@ bool Sys::lookupSystemStatusCode(uint64_t code, std::string &name, std::string & return hasCodeName || hasDescription; } + +Sys::Architecture Sys::systemArchitecture() { + SYSTEM_INFO info; + ZeroMemory(&info, sizeof(SYSTEM_INFO)); + GetNativeSystemInfo(&info); + auto arch = info.wProcessorArchitecture; + + QString qtArch = QSysInfo::currentCpuArchitecture(); + switch (arch) { + case PROCESSOR_ARCHITECTURE_AMD64: + return { ArchitectureType::AMD64, "x86_64" }; + case PROCESSOR_ARCHITECTURE_ARM64: + return { ArchitectureType::ARM64, "arm64" }; + case PROCESSOR_ARCHITECTURE_INTEL: + return { ArchitectureType::I386, "i386" }; + default: + return { ArchitectureType::Undetermined, qtArch }; + } +}