حذر
إذا كنت تستخدم هذا للحصول على حالة استخدام الإنتاج ، فيجب عليك أن تتفوق على هذا المشروع وإنشاء الصورة بنفسك
يتيح لك هذا المشروع رمز المقطع العرضي على Linux الذي سيتم تنفيذه على MacOS. يمكن أن يكون هذا مفيدًا جدًا لبيئات CI حيث تريد إنشاء MacOS ، لكنك لا تريد أن تمر بالمشكلة (والتكلفة) لإعداد بيئة MacOS.
يدعم:
قد يعمل دعم الهدف C والهدف C ++ خارج الصندوق ، ولكن لم يتم اختبار هذا.
ملحوظة
يركز هذا المشروع على دعم الإصدارات الأحدث من MacOS و C و C ++ و Fortran و Rust. لا يتم اختبار الإصدارات الأقدم من MacOS 13 (Ventura) بشكل جيد ، على الرغم من أنها يجب أن تعمل بشكل جيد.
يتم توفير مكتبات ورؤوس نظام 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يوضح الجدول أدناه اسم القابل للتنفيذ لكل زوج بنية/مترجم.
ملحوظة
نسخة kernel الهدف هي darwin24 . ستحتاج إلى إنشاء صورة Docker جديدة إذا كنت ترغب في دعم إصدار kernel مختلف.
| AARCH64 | |
|---|---|
| كلانج | Aarch64-apple-darwin24-clang |
| Clang ++ | AARCH64-APPLE-DARWIN24-CLANG ++ |
| مجلس التعاون الخليجي | 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 ، و Load ld ، والمجمع as .
ربما لا تحتاج إلى تشغيل هذه البرامج مباشرة ، ولكن إذا قمت بذلك ، فهي موجودة على /cctools/bin ، وهي أيضًا على PATH .
قائمة الأدوات الكاملة:
يجب أن يكون توقيع الكود (ولكن ليس التوثيق) ممكنًا مع هذا المشروع ، لكنه لم يتم اختباره. يجب أن يكون بناء الثنائيات العالمية ممكنة أيضًا ، ولكن مرة أخرى ، لم يتم اختبار هذا.
تم التوصية بـ RCODESign كوسيلة للتوقيع وتوثيق الثنائيات لـ MACOS.
يمكن لهذا المشروع بناء MacOS على كل من Archtictures X86_64 و AARCH64 ، بغض النظر عن بنية المضيف.
| Linux X86_64 | Linux ARM64 | |
|---|---|---|
| MacOS X86_64 | ✅ | ✅ |
| ماكوس AARCH64 | ✅ | ✅ |
ملحوظة
AARCH64 هو اسم Apple الداخلي لـ ARM64. يتم استخدامها بشكل متقطع ، لكن AARCH64 أكثر صحة عند الإشارة إلى MACOS على ARM64.
يدعم هذا المشروع اللغات التالية:
يدعم هذا المشروع الإصدارات التالية من MacOS:
لم يتم اختبار دعم MacOS 15 Seqouia على نطاق واسع. تستخدم صورة Docker 15.0 SDK افتراضيًا.
مهم
يتم اختبار هذا المشروع على Verisons الحديثة من MacOS و Clang و GCC. لم يتم اختباره مع الإصدارات القديمة من هذه البرامج. إذا كنت بحاجة إلى Compatabiltiy مع الإصدارات القديمة ، تحقق من مشروع OSXCROSS.
تقوم صورة Docker هذه بتجميع Xcode SDK من Joseluisq/MacOSX-SDKs. يرجى التعرف على شروط خدمة SDK.
هذا المستودع هو في الأساس غلاف حول المشاريع التالية:
كانت هذه الموارد مفيدة عند العمل في هذا المشروع:
تم إبلاغ هذه الموارد بأن جزء التعرج والرضى:
تم تصميم صور Docker لهذا المستودع مع الأرض.
نصيحة
بناء مجلس التعاون الخليجي هو حساب وذاكرة مكثفة. يمكنك ضبط عدد المهام المتوازية عن طريق تمرير --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.