Page 1 of 1
Forum

Welcome to the Tweaking4All community forums!
When participating, please keep the Forum Rules in mind!

Topics for particular software or systems: Start your topic link with the name of the application or system.
For example “MacOS X – Your question“, or “MS Word – Your Tip or Trick“.

Please note that switching to another language when reading a post will not bring you to the same post, in Dutch, as there is no translation for that post!



Share:
Notifications
Clear all

[Solved] macOS - Lazarus Pascal - Determine Processor Brand and Model, and Architecture

1 Posts
1 Users
0 Reactions
1,182 Views
 Hans
(@hans)
Famed Member Admin
Joined: 11 years ago
Posts: 2724
Topic starter  

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);

 


   
ReplyQuote
Share: