diff options
| author | Laytan Laats <laytanlaats@hotmail.com> | 2024-04-29 23:44:48 +0200 |
|---|---|---|
| committer | Laytan Laats <laytanlaats@hotmail.com> | 2024-04-30 00:24:09 +0200 |
| commit | d40c207fdee3d975f708a146d9b06d3715445c67 (patch) | |
| tree | dd7c1bd430890d0a3205f0f9f740d0d7a93a0bf1 /core/sys | |
| parent | 8660718ebe1b53af6c6ef13f1dae5689234454ed (diff) | |
sys/info: retrieve better CPU description on Darwin
Previously either `ARM` or `ARM64`, now you get something like `Apple
M1`
Diffstat (limited to 'core/sys')
| -rw-r--r-- | core/sys/info/cpu_arm.odin | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/core/sys/info/cpu_arm.odin b/core/sys/info/cpu_arm.odin index 10c37ceef..aa4bb368a 100644 --- a/core/sys/info/cpu_arm.odin +++ b/core/sys/info/cpu_arm.odin @@ -1,6 +1,10 @@ //+build arm32, arm64 package sysinfo +import "core:sys/unix" + +_ :: unix + CPU_Feature :: enum u64 { // Advanced SIMD & floating-point capabilities: asimd, // General support for Advanced SIMD instructions/neon. @@ -45,11 +49,22 @@ cpu_name_buf: [128]byte @(init, private) init_cpu_name :: proc "contextless" () { - when ODIN_ARCH == .arm64 { - copy(cpu_name_buf[:], "ARM64") - cpu_name = string(cpu_name_buf[:len("ARM64")]) - } else { - copy(cpu_name_buf[:], "ARM") - cpu_name = string(cpu_name_buf[:len("ARM")]) + generic := true + + when ODIN_OS == .Darwin { + if unix.sysctlbyname("machdep.cpu.brand_string", &cpu_name_buf) { + cpu_name = string(cstring(rawptr(&cpu_name_buf))) + generic = false + } + } + + if generic { + when ODIN_ARCH == .arm64 { + copy(cpu_name_buf[:], "ARM64") + cpu_name = string(cpu_name_buf[:len("ARM64")]) + } else { + copy(cpu_name_buf[:], "ARM") + cpu_name = string(cpu_name_buf[:len("ARM")]) + } } } |