Reproducible, Statically Linked Rust Cross Builds in Nix
This repository demonstrates "one-click" ways of cross building Rust
code, deterministically. We use Nix to do the builds, and the artifacts
are bit-for-bit reproducible. The examples also statically link against
musl libc, because static linking is trickier to do, and because we
can.
You need Docker for building the examples.
Approach 1
- This approach uses cross-rs/cross,
managed by Nix, for the cross builds. It requires running a container engine
(
podman) inside a Docker container, and privileged access permissions. Compared to the second approach, this one is less "pure" and conceptually more complex. Hence this approach is less preferred.
Approach 2
- This approach is "pure", in that it uses Nix to manage dependencies entirely.
It demonstrates how to statically link toopensslfor theunixtarget family.opensslstatic linking is a pain - we dropped the support.- It demonstrates cross builds on a
windowstarget
How to Build Using Both Approaches
In the directory root of the repository
Or for either approach
# Approach 1 make cross-rs # Approach 2 make rust-overlay
Clean up with command
Or for either approach
# Approach 1 make cr-clean # Approach 2 make ro-clean