crit: Rust cross-compiler
.__ __
___________|__|/ |_
_/ ___\_ __ \ \ __\
\ \___| | \/ || |
\___ >__| |__||__|
\/
CAUTION
Work in progress.
EXAMPLE
$ cd example
$ crit
$ ls .crit
aarch64-apple-darwin
aarch64-linux-android
aarch64-unknown-linux-gnu
...
By default, crit builds in release mode (-- -r).
See crit -h for more options.
CRATE
DOWNLOAD
https://github.com/mcandre/crit/releases
INSTALL FROM SOURCE
$ cargo install --path .
LICENSE
FreeBSD
RUNTIME REQUIREMENTS
Recommended
- Docker First Aid Kit
- a host capable of running musl/Linux containers (e.g. a GNU/Linux, musl/Linux, macOS, or Windows host)
- ASDF 0.10 (run
asdf reshimafter each Rust application binary installation) - direnv 2
- cargo-cache
- tree
- GNU compatible time
- Amphetamine (macOS), The Caffeine (Windows), Caffeine (Linux) can prevent hibernation during any long builds
CONTRIBUTING
For more details on developing crit itself, see DEVELOPMENT.md.
FAQ
Help, some targets are broken?
First, check that your project is able to build with conventional cross or cargo commands. A project which does not compile, will naturally have difficulty cross-compiling.
Note that Rust introduces new, under-supported targets all the time. We try to keep up, but sometimes we miss a few of these. Regardless, you can declare which targets are disabled, by writing a custom pattern for the -e / --exclude-targets flag.
Some targets may lack stock support for the Rust std library. This is common for bare metal or embedded targets. For these kinds of targets, you have several strategies for resolution:
- Provide a
stdimplementation. Reach out to specialists for the specific target involved. - Avoid using the
stdlibrary, in both your code, as well as the dependency tree. This is actually common practice for many Rust projects, as an proactive stance on embedded development support. - Disable undesired targets.
CREDITS
- cross underlying cross-compiler system
- cross-toolchains provisions cross Docker images
- cubejs/rust-cross Docker images for additional cross targets
- factorio generates Go application ports based on the standard Go toolchain
- snek ports native C/C++ applications.
- tug automates multi-platform Docker image builds
- WASM provides a portable interface for C/C++ code.
- xgo supports Go projects with native cgo dependencies.