Осторожность
Если вы используете это для производственного варианта использования, вы должны разыграть этот проект и создать изображение самостоятельно
Этот проект позволяет вам перекрестно компилировать код на Linux, который будет выполняться на macOS. Это может быть очень полезно для среда CI, где вы хотите создать для MacOS, но вы не хотите проходить проблемы (и затраты) от настройки среды MacOS.
Он поддерживает:
Поддержка объективного C и объективного C ++ может работать без коробки, но это не проверено.
Примечание
Этот проект сосредоточен на поддержке новых версий MacOS и C, C ++, Fortran и Rust. Версии, старше macOS 13 (Вентура), не очень хорошо протестированы, хотя они должны работать нормально.
Библиотеки и заголовки MacOS предоставляются с изображением Docker. Это должно быть подходящим для составления автономных программ macOS и, возможно, местных приложений macOS.
Кросс-компиляторы доступны в виде изображения Docker. Это самый простой способ распространения проекта, поскольку существует так много зависимостей хоста. Если вы заинтересованы в использовании этого без Docker, вам следует взглянуть на OSXCross, которая образует основание этого проекта.
Изображение Docker доступно по адресу ghcr.io/shepherdjerred/macos-cross-compiler.
Установите приведенные ниже требования, затем следуйте инструкциям в разделе использования.
Важный
Изображение Docker довольно большое. Он включает в себя несколько компиляторов и MacOS SDK.
# Start a Docker container using the Docker image.
# Replace `$PWD/samples` with the path to the source you want to compile.
$ docker run --platform=linux/amd64
-v $PWD /samples:/workspace
--rm
-it
ghcr.io/shepherdjerred/macos-cross-compiler:latest
/bin/bash
# Now that you're inside of the Docker container, you can run the compilers.
# Compile using gcc
# # targeting darwin arm64
$ aarch64-apple-darwin24-gcc hello.c -o hello
$ aarch64-apple-darwin24-g++ hello.cpp -o hello
# # targeting darwin x86_64
$ x86_64-apple-darwin24-gcc hello.c -o hello
$ x86_64-apple-darwin24-g++ hello.cpp -o hello
# Compile using clang
# # for darwin arm64
$ aarch64-apple-darwin24-clang --target=aarch64-apple-darwin24 hello.c -o hello
$ aarch64-apple-darwin24-clang++ --target=aarch64-apple-darwin24 hello.cpp -o hello
# # for darwin x86_64
$ x86_64-apple-darwin24-clang --target=x86_64-apple-darwin24 hello.c -o hello
$ x86_64-apple-darwin24-clang++ --target=x86_64-apple-darwin24 hello.cpp -o hello
# Compile using gfortran
# # for darwin arm64
$ aarch64-apple-darwin24-gfortran hello.f90 -o hello
# # for darwin x86_64
$ x86_64-apple-darwin24-gfortran hello.f90 -o hello
# Compile using Zig
# # C targeting darwin arm64 (change aarch64 -> x86_64 to target amd64)
$ zig cc
-target aarch64-macos
--sysroot=/sdk
-I/sdk/usr/include
-L/sdk/usr/lib
-F/sdk/System/Library/Frameworks
-framework CoreFoundation
-o hello hello.c
# # Rust targeting darwin arm64 (change aarch64 -> x86_64 to target amd64)
$ export CC=zig-cc-aarch64-macos
$ cd rust && cargo build --target aarch64-apple-darwinПоддержка ржавчины требует небольшой конфигурации проекта.
# .cargo/config.toml
[ build ]
[ target . aarch64-apple-darwin ]
linker = " zig-cc-aarch64-macos "
[ target . x86_64-apple-darwin ]
linker = " zig-cc-x86_64-macos " После настройки вы можете запустить cargo после установки переменной CC :
export CC= " zig-cc-x86_64-macos "
cargo build --target x86_64-apple-darwin
export CC= " zig-cc-aarch64-macos "
cargo build --target aarch64-apple-darwinВ таблице ниже показано имя исполняемого файла для каждой пары архитектуры/компилятора.
Примечание
Версия Target ядра darwin24 . Вам нужно будет создать новое изображение Docker, если вы хотите поддерживать другую версию ядра.
| Aarch64 | |
|---|---|
| герметичный | Aarch64-Apple-Darwin24-Clang |
| Clang ++ | Aarch64-Apple-Darwin24-Clang ++ |
| GCC | Aarch64-Apple-Darwin24-GCC |
| G ++ | Aarch64-Apple-Darwin24-G ++ |
| GFORTRAN | AARCH64-APPLE-DARWIN24-GFORTRAN |
Соответствующие компиляторы расположены по адресу /osxcross/bin и /gcc/bin . Оба эти каталоги уже находятся на PATH в контейнере Docker.
Этот проект компилизируется CCTools, которая является версией Apple Binutils. Эти программы представляют собой утилиты низкого уровня, которые используются компиляторами, такими как Archiver ar , Loder ld и ассемблер as .
Вам, вероятно, не нужно запускать эти программы напрямую, но если вы это сделаете, они расположены в /cctools/bin , и они также находятся на PATH .
Полный список инструментов:
Подписание кода (но не нотаринг) должно быть возможным с этим проектом, но он не проверен. Строительство универсальных двоичных файлов также должно быть возможно, но опять же, это не проверено.
Rcodesign был рекомендован как способ подписать и нотаризовать двоичные файлы для macOS.
Этот проект может построить для MacOS как на x86_64, так и на архитектурах Aarch64, независимо от архитектуры хоста.
| Linux x86_64 | Linux Arm64 | |
|---|---|---|
| macOS x86_64 | ✅ | ✅ |
| macos Aarch64 | ✅ | ✅ |
Примечание
Aarch64 - внутреннее имя Apple для ARM64. Они используются взаимозаменяемыми, но Aarch64 более правильный при ссылке на MacOS на ARM64.
Этот проект поддерживает следующие языки:
Этот проект поддерживает следующие версии macOS:
Поддержка MacOS 15 Seqouia не была тщательно протестирована. Изображение Docker использует 15.0 SDK по умолчанию.
Важный
Этот проект проверяется на современных Verisons of MacOS, Clang и GCC. Он не был протестирован с более старыми версиями этих программ. Если вам нужна Copatabiltiy с более старыми версиями, ознакомьтесь с проектом OSXCross.
Это изображение Docker объединяет Xcode SDK от Joseluisq/macosx-SDK. Пожалуйста, ознакомьтесь с условиями обслуживания SDK.
Этот репозиторий по сути является оберткой вокруг следующих проектов:
Эти ресурсы были полезны при работе над этим проектом:
Порция зиг и ржавчина была проинформирована этими ресурсами:
Изображения Docker для этого репозитория построены с земным.
Кончик
Строительство GCC является вычислительным и интенсивным памятью. Вы можете настроить количество параллельных задач, передавая аргумент --cores=<number> любой команде, например earthly +image --cores=4 . По моему опыту, вам понадобится много памяти, если вы хотите использовать все свои ядра. У меня был успех, установив это значение примерно вдвое меньше ядер, чем мой процессор. Вы должны снизить значение, если ваша машина задерживает.
# Create a Docker image tagged as `shepherdjerred/macos-cross-compiler`
# The first run will take ~20 minutes on an M1 MacBook.
# Subsequent runs are faster.
earthly +image
# Verify that the compilers work correctly
earthly +test
# If you're on macOS, try actually running the binaries
earthly +validateЭтот проект был бы невозможным без проекта OSXCross.