Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
mohitmishra786 avatar

Rust Cross

  • 307 installs
  • 155 repo stars
  • Updated June 27, 2026
  • mohitmishra786/low-level-dev-skills

Cross-compile Rust crates to Linux, macOS, Windows, and embedded targets using targets.json, linkers, musl/glibc choices, and cross toolchains in CI.

About

Guides Rust cross-compilation setup for shipping binaries to multiple OS and CPU targets, covering target triples, linker config, libc choices, and CI patterns for CLI, API, and mobile-adjacent native artifacts.

  • rustup target installation
  • Cargo .cargo/config.toml
  • musl vs gnu libc
  • Cross-compiler and linker setup
  • Multi-arch CI matrices

Rust Cross by the numbers

  • 307 all-time installs (skills.sh)
  • +23 installs in the week ending Aug 4, 2026 (Skillselion tracking)
  • Ranked #39 of 121 Rust skills by installs in the Skillselion catalog
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill rust-cross

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs307
repo stars155
Last updatedJune 27, 2026
Repositorymohitmishra786/low-level-dev-skills

What it does

Cross-compile Rust crates to Linux, macOS, Windows, and embedded targets using targets.json, linkers, musl/glibc choices, and cross toolchains in CI.

Files

SKILL.mdMarkdownGitHub ↗

Rust Cross-Compilation

Purpose

Guide agents through Rust cross-compilation: adding rustup targets, using cross for hermetic Docker-based cross-builds, cargo-zigbuild for zero-setup cross-compilation, .cargo/config.toml configuration, and embedded bare-metal targets.

Triggers

  • "How do I cross-compile Rust for ARM/aarch64?"
  • "How do I build a Rust binary for a different OS?"
  • "How do I use the cross tool for Rust cross-compilation?"
  • "How do I build Rust for embedded (no_std) targets?"
  • "How do I use cargo-zigbuild?"
  • "My cross-compiled Rust binary won't run on the target"

Workflow

1. Add a rustup target

# List installed targets
rustup target list --installed

# List all available targets
rustup target list

# Add a target
rustup target add aarch64-unknown-linux-gnu
rustup target add x86_64-unknown-linux-musl   # static Linux
rustup target add wasm32-unknown-unknown       # WASM
rustup target add thumbv7m-none-eabi          # Cortex-M

# Build for target
cargo build --target aarch64-unknown-linux-gnu --release

2. Common target triples

TargetUse case
x86_64-unknown-linux-gnuLinux x86-64 (glibc)
x86_64-unknown-linux-muslLinux x86-64 (musl, static)
aarch64-unknown-linux-gnuARM64 Linux (Raspberry Pi 4, AWS Graviton)
aarch64-unknown-linux-muslARM64 Linux static
x86_64-pc-windows-gnuWindows x86-64 (MinGW)
x86_64-pc-windows-msvcWindows x86-64 (MSVC)
x86_64-apple-darwinmacOS x86-64
aarch64-apple-darwinmacOS Apple Silicon
wasm32-unknown-unknownWASM (browser)
wasm32-wasiWASM with WASI
thumbv7m-none-eabiCortex-M3 bare metal
thumbv7em-none-eabihfCortex-M4/M7 with FPU
riscv32imac-unknown-none-elfRISC-V 32-bit bare metal

3. cross tool (Docker-based, easiest)

cross uses pre-built Docker images with the correct cross-toolchain:

# Install
cargo install cross

# Build (drop-in replacement for cargo)
cross build --target aarch64-unknown-linux-gnu --release
cross test --target aarch64-unknown-linux-gnu

# Cross.toml — project configuration
# Cross.toml
[target.aarch64-unknown-linux-gnu]
image = "ghcr.io/cross-rs/aarch64-unknown-linux-gnu:main"
pre-build = [
    "apt-get update && apt-get install -y libssl-dev:arm64"
]

[build.env]
passthrough = ["PKG_CONFIG_PATH", "OPENSSL_DIR"]

4. cargo-zigbuild (zero-setup, uses zig cc)

zig cc ships a complete C cross-toolchain — no system cross-compiler needed:

# Install
cargo install cargo-zigbuild
# Also needs zig installed: https://ziglang.org/download/

# Build (no Docker, no system cross-compiler)
cargo zigbuild --target aarch64-unknown-linux-gnu --release
cargo zigbuild --target x86_64-unknown-linux-musl --release

# Target with glibc version (important for compatibility)
cargo zigbuild --target aarch64-unknown-linux-gnu.2.17 --release
# This builds against glibc 2.17 (very compatible)

# Windows from Linux/macOS
cargo zigbuild --target x86_64-pc-windows-gnu --release

cargo-zigbuild advantages over cross:

  • No Docker required
  • Faster (no container startup)
  • Works for most targets out of the box
  • Supports precise glibc version targeting

5. .cargo/config.toml for cross targets

# .cargo/config.toml

[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"    # System cross-linker
# or with zig:
# linker = "zig"
# rustflags = ["-C", "link-arg=cc", "-C", "link-arg=-target", "-C", "link-arg=aarch64-linux-gnu"]

[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"
rustflags = ["-C", "target-feature=+crt-static"]

[target.wasm32-unknown-unknown]
runner = "wasmtime"    # Run WASM tests with wasmtime

[target.thumbv7m-none-eabi]
runner = "qemu-arm -cpu cortex-m3"

6. Static binaries with musl

# Add musl target
rustup target add x86_64-unknown-linux-musl

# Build statically linked binary
cargo build --target x86_64-unknown-linux-musl --release

# Verify it's static
file target/x86_64-unknown-linux-musl/release/myapp
# → ELF 64-bit, statically linked, not stripped

# Or with cargo-zigbuild (easier musl)
cargo zigbuild --target x86_64-unknown-linux-musl --release

7. Embedded bare-metal (#[no_std])

# .cargo/config.toml
[build]
target = "thumbv7em-none-eabihf"   # Set default target

[target.'cfg(target_arch = "arm")']
runner = "probe-run --chip STM32F411CE"
// src/main.rs
#![no_std]
#![no_main]

use core::panic::PanicInfo;

#[cortex_m_rt::entry]
fn main() -> ! {
    loop {}
}

#[panic_handler]
fn panic(_info: &PanicInfo) -> ! {
    loop {}
}
# Cargo.toml
[dependencies]
cortex-m = "0.7"
cortex-m-rt = "0.7"

[profile.release]
opt-level = "z"
lto = true
codegen-units = 1
panic = "abort"
cargo build --release  # Uses default target from .cargo/config.toml

For target triple reference and embedded setup details, see references/.

Related skills

  • Use skills/rust/rustc-basics for compiler and profile configuration
  • Use skills/compilers/cross-gcc for the underlying cross-compiler setup
  • Use skills/zig/zig-cross for Zig's native cross-compilation approach
  • Use skills/build-systems/cmake when Rust is part of a CMake cross-build

Related skills

Rustbackenddevopsintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.