mac: Log CPU and OS version (#1879)

This commit is contained in:
Emma 2026-04-18 17:53:21 +00:00 committed by GitHub
parent 5ee74b5a6a
commit 5ac87ba7f3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 39 additions and 2 deletions

View File

@ -539,7 +539,23 @@ namespace CafeSystem
else
platform = "Linux";
#elif BOOST_OS_MACOS
platform = "MacOS";
char productVersion[256]{};
size_t productVersionSize = sizeof(productVersion);
const int productVersionResult = sysctlbyname("kern.osproductversion", productVersion, &productVersionSize, nullptr, 0);
char buildVersion[256]{};
size_t buildVersionSize = sizeof(buildVersion);
const int buildVersionResult = sysctlbyname("kern.osversion", buildVersion, &buildVersionSize, nullptr, 0);
if (productVersionResult == 0 && buildVersionResult == 0)
buffer = fmt::format("macOS {} ({})", productVersion, buildVersion);
else if (productVersionResult == 0)
buffer = fmt::format("macOS {}", productVersion);
else
buffer = "macOS";
platform = buffer.c_str();
#elif BOOST_OS_BSD
#if defined(__FreeBSD__)
platform = "FreeBSD";

View File

@ -1,5 +1,10 @@
#include "cpu_features.h"
#if BOOST_OS_MACOS
#include <sys/types.h>
#include <sys/sysctl.h>
#endif
// wrappers with uniform prototype for implementation-specific x86 CPU id
#if defined(ARCH_X86_64)
#ifdef __GNUC__
@ -30,7 +35,23 @@ inline void cpuidex(int cpuInfo[4], int functionId, int subFunctionId) {
CPUFeaturesImpl::CPUFeaturesImpl()
{
#if defined(ARCH_X86_64)
#if BOOST_OS_MACOS
std::string cpuName;
size_t size = 0;
if (sysctlbyname("machdep.cpu.brand_string", nullptr, &size, nullptr, 0) == 0 && size > 0)
{
std::vector<char> buffer(size);
if (sysctlbyname("machdep.cpu.brand_string", buffer.data(), &size, nullptr, 0) == 0 && size > 0)
{
cpuName.assign(buffer.data());
}
}
strncpy(m_cpuBrandName, cpuName.c_str(), sizeof(m_cpuBrandName) - 1);
m_cpuBrandName[sizeof(m_cpuBrandName) - 1] = '\0';
#elif defined(ARCH_X86_64)
int cpuInfo[4];
cpuid(cpuInfo, 0x80000001);
x86.lzcnt = ((cpuInfo[2] >> 5) & 1) != 0;