คำเตือน
หากคุณใช้สิ่งนี้สำหรับการใช้กรณีการใช้งานคุณควรแยกโครงการนี้และสร้างภาพด้วยตัวเอง
โครงการนี้ช่วยให้คุณสามารถใช้รหัสข้ามได้บน Linux ที่จะดำเนินการบน MacOS สิ่งนี้มีประโยชน์มากสำหรับสภาพแวดล้อม CI ที่คุณต้องการสร้างสำหรับ MacOS แต่คุณไม่ต้องการผ่านปัญหา (และค่าใช้จ่าย) ของการตั้งค่าสภาพแวดล้อม MacOS
รองรับ:
การสนับสนุนสำหรับวัตถุประสงค์ C และ Objective C ++ อาจทำงานนอกกรอบ แต่ไม่ได้ทดสอบ
บันทึก
โครงการนี้มุ่งเน้นไปที่การสนับสนุน MacOS และ C, C ++, Fortran และ Rust เวอร์ชันใหม่กว่า รุ่นที่เก่ากว่า MacOS 13 (Ventura) ไม่ได้รับการทดสอบอย่างดีแม้ว่าพวกเขา ควร ทำงานได้ดี
ไลบรารีและส่วนหัวของระบบ MacOS นั้นมาพร้อมกับอิมเมจนักเทียบท่า สิ่งนี้ควรเหมาะสำหรับการรวบรวมโปรแกรม MacOS แบบสแตนด์อโลนและแอปพลิเคชัน MacOS ดั้งเดิม
cross-compilers มีให้เป็นภาพนักเทียบท่า นี่เป็นวิธีที่ง่ายที่สุดในการแจกจ่ายโครงการเนื่องจากมีการพึ่งพาโฮสต์มากมาย หากคุณสนใจที่จะใช้สิ่งนี้โดยไม่มี Docker คุณควรดู Osxcross ซึ่งเป็นฐานของโครงการนี้
อิมเมจนักเทียบท่ามีอยู่ที่ ghcr.io/shepherdjerred/macos-cross-compiler
ติดตั้งข้อกำหนดด้านล่างจากนั้นทำตามคำแนะนำในส่วนการใช้งาน
สำคัญ
ภาพนักเทียบท่าค่อนข้างใหญ่ มันมีคอมไพเลอร์หลายตัวและ 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ตารางด้านล่างแสดงชื่อของการปฏิบัติการสำหรับคู่สถาปัตยกรรม/คอมไพเลอร์แต่ละคู่
บันทึก
รุ่นเคอร์เนลเป้าหมายคือ darwin24 คุณจะต้องสร้างอิมเมจนักเทียบท่าใหม่หากคุณต้องการสนับสนุนเวอร์ชันเคอร์เนลอื่น
| Aarch64 | |
|---|---|
| เสียงดัง | Aarch64-Apple-Darwin24-clang |
| เสียงดัง ++ | Aarch64-Apple-Darwin24-Clang ++ |
| GCC | Aarch64-Apple-Darwin24-GCC |
| G ++ | AARCH64-APPLE-DARWIN24-G ++ |
| ผู้เล่น | Aarch64-Apple-Darwin24-Gfortran |
คอมไพเลอร์ที่เกี่ยวข้องอยู่ที่ /osxcross/bin และ /gcc/bin ไดเรกทอรีทั้งสองนี้อยู่บน PATH ในคอนเทนเนอร์ Docker แล้ว
โครงการนี้รวบรวม Cctools ซึ่งเป็น Binutils เวอร์ชันของ Apple โปรแกรมเหล่านี้เป็นยูทิลิตี้ระดับต่ำที่ใช้โดยคอมไพเลอร์เช่น Archiver ar , Loader ld และ Assembler as
คุณอาจไม่จำเป็นต้องเรียกใช้โปรแกรมเหล่านี้โดยตรง แต่ถ้าคุณอยู่ที่ /cctools/bin และพวกเขาก็อยู่บน PATH
รายการเครื่องมือที่สมบูรณ์:
การลงนามในรหัส (แต่ ไม่ได้เป็น ที่น่าเชื่อถือ) ควรเป็นไปได้กับโครงการนี้ แต่ยังไม่ผ่านการทดสอบ การสร้างไบนารีสากลควรเป็นไปได้เช่นกัน แต่อีกครั้งสิ่งนี้ไม่ได้ทดสอบ
RCODESIGN ได้รับการแนะนำให้เป็นวิธีการลงนามและรับรองไบนารีสำหรับ MACOS
โครงการนี้สามารถสร้างสำหรับ macOS ทั้งสอง x86_64 และ Aarch64 archtictures โดยไม่คำนึงถึงสถาปัตยกรรมโฮสต์
| Linux x86_64 | Linux arm64 | |
|---|---|---|
| macos x86_64 | ||
| macos aarch64 |
บันทึก
Aarch64 เป็นชื่อภายในของ Apple สำหรับ ARM64 พวกเขาใช้แทนกัน แต่ Aarch64 นั้นถูกต้องมากขึ้นเมื่ออ้างถึง MacOS บน ARM64
โครงการนี้รองรับภาษาต่อไปนี้:
โครงการนี้รองรับ MacOS เวอร์ชันต่อไปนี้:
การสนับสนุนสำหรับ MacOS 15 Seqouia ยังไม่ได้รับการทดสอบอย่างกว้างขวาง อิมเมจนักเทียบท่าใช้ 15.0 SDK โดยค่าเริ่มต้น
สำคัญ
โครงการนี้ได้รับการทดสอบเกี่ยวกับ Verisons สมัยใหม่ของ MacOS, Clang และ GCC มันยังไม่ได้รับการทดสอบกับซอฟต์แวร์รุ่นเก่าเหล่านี้ หากคุณต้องการ compatabiltiy กับรุ่นเก่าให้ตรวจสอบโครงการ OSXCROSS
ภาพนักเทียบท่านี้รวม Xcode SDK จาก Joseluisq/MacOSX-SDKS โปรดทำความคุ้นเคยกับข้อกำหนดในการให้บริการของ SDK
พื้นที่เก็บข้อมูลนี้เป็นส่วนสำคัญในโครงการต่อไปนี้:
ทรัพยากรเหล่านี้มีประโยชน์เมื่อทำงานในโครงการนี้:
ส่วน Zig และ Rust ได้รับแจ้งจากทรัพยากรเหล่านี้:
ภาพนักเทียบท่าสำหรับที่เก็บนี้ถูกสร้างขึ้นด้วยโลก
เคล็ดลับ
การสร้าง 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