Skip to content

syncom/rust-cross-build-nix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Reproducible, Statically Linked Rust Cross Builds in Nix

cross-rs builds rusto-overlay builds

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

nix-cross-rs

  • 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

nix-rust-overlay

  • This approach is "pure", in that it uses Nix to manage dependencies entirely.
  • It demonstrates how to statically link to openssl for the unix target family.
  • It demonstrates cross builds on a windows target (without openssl static linking, for simplicity).

How to Build Using Both Approaches

In the directory root of the repository

make

Or for either approach

# Approach 1
make cross-rs
# Approach 2
make rust-overlay

Clean up with command

make clean

Or for either approach

# Approach 1
make cr-clean
# Approach 2
make ro-clean