注意
これを生産の使用ケースに使用している場合は、このプロジェクトをフォークして自分で画像を構築する必要があります
このプロジェクトを使用すると、MacOSで実行されるLinuxでコードをクロスコンパイルすることができます。これは、MacOSのために構築したいCI環境に非常に役立ちますが、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-darwinRustのサポートには、プロジェクトの構成が少し必要です。
# .cargo/config.toml
[ build ]
[ target . aarch64-apple-darwin ]
linker = " zig-cc-aarch64-macos "
[ target . x86_64-apple-darwin ]
linker = " zig-cc-x86_64-macos "構成されたら、 CC変数を設定した後、 cargoを実行できます。
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です。別のカーネルバージョンをサポートする場合は、新しい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にあります。これらのディレクトリは両方とも、すでにDockerコンテナのPATHにあります。
このプロジェクトは、AppleのBinutilsのバージョンであるCctoolsを編集します。これらのプログラムは、Archiver ar 、Loader ld 、アセンブラーasのコンパイラが使用する低レベルのユーティリティです。
おそらくこれらのプログラムを直接実行する必要はありませんが、そうすれば/cctools/binに配置されており、 PATHにもあります。
完全なツールリスト:
このプロジェクトでは、コード署名(公証されていない)が可能ですが、テストされていません。普遍的なバイナリの構築も可能ですが、繰り返しますが、これはテストされていません。
rcodesignは、macosのバイナリを署名し、公証する方法として推奨されています。
このプロジェクトは、ホストアーキテクチャに関係なく、X86_64とAARCH64の両方のアーチティクチャにMACOを構築できます。
| Linux X86_64 | Linux ARM64 | |
|---|---|---|
| macOS x86_64 | ✅ | ✅ |
| MacOS AARCH64 | ✅ | ✅ |
注記
AARCH64は、ARM64のAppleの内部名です。それらは交換可能に使用されますが、ARM64のMacOを参照する場合、Aarch64はより正確です。
このプロジェクトは、次の言語をサポートしています。
このプロジェクトは、次のバージョンのmacOSをサポートしています。
MacOS 15 Seqouiaのサポートは広範囲にテストされていません。 Docker画像は、デフォルトで15.0 SDKを使用します。
重要
このプロジェクトは、Macos、Clang、およびGCCの最新のVerisonsでテストされています。これらのソフトウェアの古いバージョンではテストされていません。古いバージョンとcompatabiltiyが必要な場合は、OSXCrossプロジェクトをご覧ください。
このDockerイメージは、joseluisq/macosx-sdksからxcode sdkをバンドルします。 SDKの利用規約に精通してください。
このリポジトリは、基本的に次のプロジェクトに関するラッパーです。
これらのリソースは、このプロジェクトに取り組む際に役立ちました。
ジグと錆の部分は、これらのリソースによって通知されました。
このリポジトリのDocker画像は、地上で構築されています。
ヒント
GCCの構築は、計算とメモリが強烈です。 --cores=<number>引数を任意のコマンドに渡すことにより、並列タスクの数earthly +image --cores=4調整できます。私の経験では、すべてのコアを使用したい場合は、多くのメモリが必要です。この値をCPUの約半分のコアに設定することで成功しました。マシンが失速する場合は、値を下げる必要があります。
# 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プロジェクトなしでは不可能でした。