주의
생산 사용에 대해 이것을 사용하는 경우이 프로젝트를 포크하고 이미지를 직접 구축해야합니다.
이 프로젝트를 사용하면 MacOS에서 실행될 Linux에서 코드를 교차 컴파일 할 수 있습니다. 이것은 MacOS를 위해 구축하려는 CI 환경에 매우 유용 할 수 있지만 MacOS 환경을 설정하는 문제 (및 비용)를 겪고 싶지는 않습니다.
지원합니다 :
목표 C 및 객관적인 C ++에 대한 지원은 상자 밖으로 작동 할 수 있지만 테스트되지는 않습니다.
메모
이 프로젝트는 최신 버전의 MacOS 및 C, C ++, Fortran 및 Rust를 지원하는 데 중점을 둡니다. MACOS 13 (벤츄라)보다 오래된 버전은 잘 테스트되지 않지만 잘 작동 해야합니다 .
MacOS 시스템 라이브러리 및 헤더에는 Docker 이미지가 제공됩니다. 이는 독립형 MACOS 프로그램 및 기본 MACOS 응용 프로그램을 컴파일하는 데 적합해야합니다.
크로스 컴파일러는 Docker 이미지로 제공됩니다. 호스트 종속성이 너무 많기 때문에 프로젝트를 배포하는 가장 쉬운 방법입니다. Docker없이 이것을 사용하는 데 관심이 있다면이 프로젝트의 기본을 형성하는 Osxcross를 살펴 봐야합니다.
Docker 이미지는 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-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를 컴파일합니다. 이 프로그램은 아카이버 ar , 로더 ld 및 어셈블러 as 같은 컴파일러가 사용하는 저수준 유틸리티입니다.
이 프로그램을 직접 실행할 필요는 없지만, 그렇다면 /cctools/bin 에 위치하고 있으며 PATH 에 있습니다.
완전한 도구 목록 :
이 프로젝트에서는 코드 서명 (공증 되지 않음 )이 가능하지만 테스트되지 않았습니다. 보편적 인 바이너리를 구축하는 것도 가능해야하지만 다시, 이것은 테스트되지 않았습니다.
RCodesign은 MACOS에 이진을 공증하고 공증하는 방법으로 권장되었습니다.
이 프로젝트는 호스트 아키텍처에 관계없이 X86_64 및 AARCH64 Archtictures의 MACOS 용으로 구축 할 수 있습니다.
| 리눅스 x86_64 | Linux ARM64 | |
|---|---|---|
| MacOS X86_64 | ✅ | ✅ |
| MACOS AARCH64 | ✅ | ✅ |
메모
AARCH64는 AMB64의 Apple의 내부 이름입니다. 그들은 상호 교환 할 수 있지만 ARACH64는 ARM64에서 MACOS를 참조 할 때 더 정확합니다.
이 프로젝트는 다음 언어를 지원합니다.
이 프로젝트는 다음 버전의 MacOS를 지원합니다.
MACOS 15 SEQOUIA에 대한 지원은 광범위하게 테스트되지 않았습니다. Docker Image는 기본적으로 15.0 SDK를 사용합니다.
중요한
이 프로젝트는 MacOS, Clang 및 GCC의 현대적인 Verisons에서 테스트되었습니다. 이 소프트웨어의 이전 버전으로 테스트되지 않았습니다. 이전 버전의 Compatabiltiy가 필요한 경우 OsxCross 프로젝트를 확인하십시오.
이 Docker 이미지는 Joseluisq/MacOSX-SDK에서 Xcode SDK를 번들로 제공합니다. SDK의 서비스 약관에 익숙해 지십시오.
이 저장소는 본질적으로 다음 프로젝트를 중심으로 래퍼입니다.
이 자료는이 프로젝트를 수행 할 때 도움이되었습니다.
Zig 및 Rust 부분은 이러한 자원에 의해 알려졌습니다.
이 저장소의 도커 이미지는 지구적으로 제작되었습니다.
팁
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 프로젝트 없이는 불가능했을 것입니다.