vision-rs / Cross-Compilation & Deployment
Building for Jetson Orin Nano
vision-rs targets the Jetson Orin Nano (aarch64-unknown-linux-gnu) using
cross via the cargo-teeny plugin.
Additional prerequisites
- Install
cross:cargo install cross --git https://github.com/cross-rs/cross - Add the aarch64 target:
rustup target add aarch64-unknown-linux-gnu - CUDA aarch64 libraries — the build mounts the host’s CUDA aarch64
target directory into the cross container, so the cross-compiled binary
links against the CUDA version actually present on the Jetson’s JetPack
(independent of the host’s own CUDA 13.3, which is only used for
AOT-compiling kernels). Default path:
If your device’s JetPack CUDA version differs, pass/usr/local/cuda-12.6/targets/aarch64-linux--cuda-path <path>on everybuild/packagecommand below.
Building
# Build the library in release mode (default)
cargo teeny build --target jetson-orin-nano
# Build all examples / a single example
cargo teeny build --target jetson-orin-nano --examples
cargo teeny build --target jetson-orin-nano --example yolo26
# Type-check only (faster feedback), or lint
cargo teeny check --target jetson-orin-nano
cargo teeny clippy --target jetson-orin-nano
# Debug build
cargo teeny build --target jetson-orin-nano --no-release
# Custom CUDA path (target device's JetPack CUDA version)
cargo teeny build --target jetson-orin-nano --cuda-path /usr/local/cuda-12.8/targets/aarch64-linux
Compiled artifacts land in target/aarch64-unknown-linux-gnu/release/.
How it works
cargo teeny build wraps cross build and automatically:
- Resolves the teenygrad workspace
root from
Cargo.toml’s[patch.crates-io]entries and mounts it into the cross container — required becausecrossonly auto-mounts individual crate directories, not the workspace root providingCargo.tomlinheritance. - Mounts the host CUDA aarch64 target directory at the path the cross container’s Dockerfile expects.
- Uses the custom image defined in
docker/Dockerfile.jetson-orin-nano, which extends thecrossbase image withclang-12(required bybindgenfor aarch64 cross-bindings).
Once you have a cross-compiled binary, see Packaging a Deployable Bundle to combine it with ahead-of-time-compiled kernels into something you can copy straight to the device.