Информация об изменениях

Сообщение Re: Mac версия программы: x86_64 или ARM? от 14.02.2023 19:15

Изменено 14.02.2023 21:42 Aleksid1

Re: Mac версия программы: x86_64 или ARM?
Здравствуйте, Khimik, Вы писали:

K>Я пытаюсь портировать свою программу под Mac (Lazarus), и мне сказали, что нужно выбирать между двумя архитектурами — x86_64 или ARM. Я тут пока ничего не знаю, создалось ощущение что ARM это что-то более современное и продвинутое (в том числе по статье на хабре), но один пользователь написал выбирать x86_64. Можете что-то подсказать?


Нужно скомпилировать 2 версии исполняемого файла проекта (для ARM и Intel) а затем склеить их в один файл. Получится Universal Binary для старых и новых Mac. Компилировать можно на любом Мак, главное чтобы была версия macOS 11 Big Sur или новее.

Вот куски кода для Терминала (можно упаковать в скрипт):

lazbuild --cpu=aarch64 --build-all --recursive MyProject.lpi
strip MyProject
// Затем переименуйте в MyProject_intel

lazbuild --cpu=x86_64 --build-all --recursive MyProject.lpi
strip MyProject
// Затем переименуйте в MyProject_arm64

lipo -create -output MyProject MyProject_intel MyProject_arm64
// Команда lipo склеивает обе версии в единый файл.

Команда strip убирает лишнюю отладочную информацию из исполняемого файла и сильно уменьшит размер исполняемого файла

Когда пользователь на Intel Mac запустит приложение, то macOS автоматически выберет Intel код, а на ARM автоматически выберет arm код.
Re: Mac версия программы: x86_64 или ARM?
Здравствуйте, Khimik, Вы писали:

K>Я пытаюсь портировать свою программу под Mac (Lazarus), и мне сказали, что нужно выбирать между двумя архитектурами — x86_64 или ARM. Я тут пока ничего не знаю, создалось ощущение что ARM это что-то более современное и продвинутое (в том числе по статье на хабре), но один пользователь написал выбирать x86_64. Можете что-то подсказать?


Нужно скомпилировать 2 версии исполняемого файла проекта (для ARM и Intel) а затем склеить их в один файл. Получится Universal Binary для старых и новых Mac. Компилировать можно на любом Мак, главное чтобы была версия macOS 11 Big Sur или новее.

Вот куски кода для Терминала (можно упаковать в скрипт):

lazbuild --cpu=aarch64 --build-all --recursive MyProject.lpi
strip MyProject
// Затем переименуйте в MyProject_arm64

lazbuild --cpu=x86_64 --build-all --recursive MyProject.lpi
strip MyProject
// Затем переименуйте в MyProject_intel

lipo -create -output MyProject MyProject_intel MyProject_arm64
// Команда lipo склеивает обе версии в единый файл.

Команда strip убирает лишнюю отладочную информацию из исполняемого файла и сильно уменьшит размер исполняемого файла

Когда пользователь на Intel Mac запустит приложение, то macOS автоматически выберет Intel код, а на ARM автоматически выберет arm код.