Peringatan
Jika Anda menggunakan ini untuk kasus penggunaan produksi, Anda harus membayar proyek ini dan membangun gambar sendiri
Proyek ini memungkinkan Anda untuk mengkompilasi kode silang di Linux yang akan dieksekusi pada macOS. Ini bisa sangat berguna untuk lingkungan CI di mana Anda ingin membangun untuk macOS, tetapi Anda tidak ingin mengalami masalah (dan biaya) untuk menyiapkan lingkungan macOS.
Itu mendukung:
Dukungan untuk objektif C dan objektif C ++ dapat bekerja di luar kotak, tetapi ini tidak diuji.
Catatan
Proyek ini difokuskan pada mendukung versi MacOS dan C, C ++, Fortran, dan Rust yang lebih baru. Versi yang lebih tua dari MacOS 13 (Ventura) tidak diuji dengan baik, meskipun mereka harus bekerja dengan baik.
Perpustakaan dan header sistem macOS dilengkapi dengan gambar Docker. Ini harus cocok untuk menyusun program macOS mandiri dan mungkin aplikasi macOS asli.
Kompiler silang tersedia sebagai gambar Docker. Ini adalah cara termudah untuk mendistribusikan proyek karena ada begitu banyak dependensi host. Jika Anda tertarik menggunakan ini tanpa Docker, Anda harus melihat Osxcross yang membentuk dasar proyek ini.
Gambar Docker tersedia di ghcr.io/shepherdjerred/macos-cross-compiler.
Pasang persyaratan di bawah ini, lalu ikuti instruksi di bagian penggunaan.
Penting
Gambar Docker cukup besar. Ini termasuk beberapa kompiler dan 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-darwinDukungan untuk karat membutuhkan sedikit konfigurasi proyek.
# .cargo/config.toml
[ build ]
[ target . aarch64-apple-darwin ]
linker = " zig-cc-aarch64-macos "
[ target . x86_64-apple-darwin ]
linker = " zig-cc-x86_64-macos " Setelah dikonfigurasi, Anda dapat menjalankan cargo setelah mengatur variabel 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-darwinTabel di bawah ini menunjukkan nama yang dapat dieksekusi untuk setiap pasangan arsitektur/kompiler.
Catatan
Versi kernel target adalah darwin24 . Anda harus membangun gambar Docker baru jika Anda ingin mendukung versi kernel yang berbeda.
| aarch64 | |
|---|---|
| dentang | aarch64-apple-darwin24-clang |
| dentang ++ | Aarch64-Apple-Darwin24-CLANG ++ |
| GCC | Aarch64-apple-darwin24-gcc |
| G ++ | Aarch64-Apple-Darwin24-G ++ |
| gfortran | Aarch64-Apple-darwin24-Gfortran |
Kompiler yang relevan terletak di /osxcross/bin dan /gcc/bin . Kedua direktori ini sudah berada di PATH di wadah Docker.
Proyek ini mengkompilasi CCTOOLS, yang merupakan Binutils versi Apple. Program-program ini adalah utilitas tingkat rendah yang digunakan oleh kompiler, seperti AR ar , Loader ld , dan assembler as .
Anda mungkin tidak perlu menjalankan program -program ini secara langsung, tetapi jika Anda melakukannya di /cctools/bin , dan mereka juga berada di PATH .
Daftar Alat Lengkap:
Penandatanganan kode (tetapi tidak notaris) harus dimungkinkan dengan proyek ini, tetapi belum teruji. Membangun binari universal juga harus dimungkinkan, tetapi sekali lagi, ini tidak diuji.
Rcodesign telah direkomendasikan sebagai cara untuk menandatangani dan membuat notaris binari untuk macOS.
Proyek ini dapat dibangun untuk macOS di arktiktur X86_64 dan AARCH64, terlepas dari arsitektur tuan rumah.
| Linux x86_64 | Linux ARM64 | |
|---|---|---|
| MacOS x86_64 | ✅ | ✅ |
| MacOS Aarch64 | ✅ | ✅ |
Catatan
Aarch64 adalah nama internal Apple untuk ARM64. Mereka digunakan secara dipertukarkan, tetapi Aarch64 lebih benar ketika merujuk pada macOS di ARM64.
Proyek ini mendukung bahasa berikut:
Proyek ini mendukung versi macOS berikut:
Dukungan untuk MacOS 15 Seqouia belum diuji secara luas. Gambar Docker menggunakan 15.0 SDK secara default.
Penting
Proyek ini diuji pada verison modern MacOS, Clang, dan GCC. Ini belum diuji dengan versi yang lebih lama dari perangkat lunak ini. Jika Anda membutuhkan compatabiltiy dengan versi yang lebih lama, lihat proyek OsxCross.
Gambar Docker ini mengikat XCODE SDK dari Joseluisq/Macosx-SDKS. Harap biasakan diri Anda dengan persyaratan layanan SDK.
Repositori ini pada dasarnya adalah pembungkus di sekitar proyek -proyek berikut:
Sumber daya ini sangat membantu saat mengerjakan proyek ini:
Bagian zig dan karat diinformasikan oleh sumber daya ini:
Gambar Docker untuk repositori ini dibangun dengan duniawi.
Tip
Membangun GCC adalah komputasi dan memori intens. Anda dapat menyesuaikan jumlah tugas paralel dengan meneruskan argumen --cores=<number> ke perintah apa pun, misalnya earthly +image --cores=4 . Dalam pengalaman saya, Anda akan membutuhkan banyak memori jika Anda ingin menggunakan semua inti Anda. Saya telah sukses dengan menetapkan nilai ini menjadi sekitar setengah lebih banyak core dengan CPU saya. Anda harus menurunkan nilainya jika mesin Anda berhenti.
# 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 +validateProyek ini tidak akan mungkin terjadi tanpa proyek OsxCross.