I had a really hard time Googling for answers to questions about cross
compilation from an M1 mac, because historically there have been so many
questions about compiling from
arm; mostly in the
embedded systems space.
I hope that I've thrown in enough keywords to bring people with the same problem as myself here:
I just want to compile my app on my mac and ship it to a Linux box running an
x86_64architecture and I am struggling.
rustcplatform support docs
The first resource, in particular, was most helpful to me, so I reduced it into a bash snippet.
This will setup tooling and cross-compile an
x86_64 executable from your M1
# musl is a version of the C standard library that can be statically linked rustup target add x86_64-unknown-linux-musl # see https://github.com/messense/homebrew-macos-cross-toolchains brew tap messense/macos-cross-toolchains brew install x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu echo "export CC_x86_64_unknown_linux_gnu=x86_64-unknown-linux-gnu-gcc export CXX_x86_64_unknown_linux_gnu=x86_64-unknown-linux-gnu-g++ export AR_x86_64_unknown_linux_gnu=x86_64-unknown-linux-gnu-ar export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=x86_64-unknown-linux-gnu-gcc" \ >> ~/.bashrc source ~/.bashrc echo "[target.x86_64-unknown-linux-musl] linker = \"x86_64-unknown-linux-gnu-gcc\"" >> ~/.cargo/config # --- # tooling setup is done cargo build --release --target x86_64-unknown-linux-musl
You now have a working cross-compiled executable in
target/x86_64-unknown-linux-musl send it off to live its best x86_64 life!