Now that Apple switched to AARCH64 (aka ARM64, Apple Silicon, M1/M2/etc), we sometimes need to determine the processor name and architecture (x86_64, arm64).
Took me some effort to get that, so maybe these 2 functions can be useful for others as well:
uses
... , Unix, sysctl ...;
...
function GetCPUBrandAndModel: AnsiString;
var
CharLen : size_t;
cpuChar : PChar;
begin
Result :='Unknown CPU';
if fpSysCtlByName('machdep.cpu.brand_string', Nil, @CharLen, Nil, 0)<>0 then exit;
cpuChar := GetMem(CharLen);
try
if fpSysCtlByName('machdep.cpu.brand_string', cpuChar, @CharLen, Nil, 0)=0 then
Result := cpuChar;
finally
FreeMem(cpuChar);
end;
end;
function GetCPUArchitecture: AnsiString;
var
mib : array[0..1] of Integer;
CharLen : size_t;
cpuArch : PChar;
begin
mib[0] := CTL_HW;
mib[1] := HW_MACHINE;
if fpSysCtl(PCInt(@mib), Length(mib), Nil, @CharLen, Nil, 0)<>0 then exit;
cpuArch := GetMem(CharLen);
try
if fpSysCtl(PCInt(@mib), Length(mib), cpuArch, @CharLen, Nil, 0)=0 then
Result := cpuArch;
finally
FreeMem(cpuArch);
end;
end;
...
// Example call:
ShowMessage('CPU Brand and Model: ' + GetCPUBrandAndModel + LineEnding + LineEnding + 'CPU Architecture: ' + GetCPUArchitecture);