Сборка armv8 на mac os

Я хотел бы собрать Aarch64 armv8 Assembly на своем Mac и в конечном итоге запустить его с помощью qemu и, возможно, на реальном устройстве, таком как Raspberry Pi 2 или 4, позже. Я не знаю, как собрать код, который я собираюсь написать, gcc, llvm-gcc и clang, похоже, не поддерживают флаг -arch=armv8 или что-то подобное. Итак, я не могу создать целевую архитектуру, как я могу этого добиться?

У меня мак ос 10.14.5. Я был бы не против найти решение, которое работает на последней версии Ubuntu, так как у меня есть виртуальная машина для разработки Linux.


person L.B.    schedule 28.07.2019    source источник
comment
Вы не должны предполагать, что каждый, кто может дать вам ответ, владеет Mac. Что за сообщение об ошибке?   -  person Jake 'Alquimista' LEE    schedule 28.07.2019
comment
Clang разделяет большинство флагов компиляции с GCC, но в конце концов это не GCC. используйте параметр -target вместо -arch. clang.llvm.org/docs/CrossCompilation.html   -  person Jake 'Alquimista' LEE    schedule 28.07.2019
comment
--target=arm64v8a это именно то, что вам нужно.   -  person Jake 'Alquimista' LEE    schedule 28.07.2019
comment
Если у вас есть виртуальная машина AArch64 Ubuntu, вы можете просто использовать внутри нее GCC.   -  person Peter Cordes    schedule 29.07.2019
comment
Спасибо, я на самом деле не пробовал - арч arm64, кажется, работает. Просто раздражает, что для флага -target или -arch нет команды справки, в которой перечислены поддерживаемые параметры, или, по крайней мере, я не смог найти что-то подобное.   -  person L.B.    schedule 29.07.2019


Ответы (1)


Версия clang, поставляемая с Xcode, поддерживает -arch arm64. (Или armv7 для 32-битной версии.)
Обратите внимание, что если вы хотите использовать какие-либо библиотеки, они также должны быть arm64. Если вы хотите, вы можете вызвать цепочку инструментов iOS с помощью xcrun -sdk iphoneos clang -arch arm64 [...], но тогда вам также придется вытащить нужные библиотеки из какого-нибудь IPSW и запихнуть их в qemu.

Также обратите внимание, что приведенное выше даст вам двоичный файл Mach-O. Для вашего Raspberry Pi вам, вероятно, понадобится ELF, и вам, вероятно, понадобится gcc, а не clang. Вы должны быть в состоянии собрать как gcc, так и GNU binutils из исходного кода с --target как aarch64-linux-gnu или aarch64-none-elf, в зависимости от ваших целей. Еще одно замечание: поскольку macOS автоматически применяет псевдонимы gcc к clang, и многие инструменты зависят от этого, вы, вероятно, также захотите создать эту цепочку инструментов с чем-то вроде --program-prefix=aarch64-.

person Siguza    schedule 28.07.2019
comment
Спасибо за подробный ответ, очень полезно :) - person L.B.; 29.07.2019