Docs
Doc / cross-build
Cross Compile OmniEdge
OmniEdge v2.x can be cross-compiled for various architectures using Rust's cross-compilation support.
Supported Targets
| Target | Architecture | Notes |
|---|---|---|
x86_64-unknown-linux-gnu | Linux x86_64 | Most servers and desktops |
aarch64-unknown-linux-gnu | Linux ARM64 | Raspberry Pi 4/5, Jetson |
riscv64gc-unknown-linux-gnu | Linux RISC-V 64 | StarFive, Sipeed boards |
x86_64-unknown-linux-musl | Linux x86_64 (static) | Alpine, portable binary |
aarch64-unknown-linux-musl | Linux ARM64 (static) | Portable ARM64 binary |
x86_64-apple-darwin | macOS Intel | Intel Macs |
aarch64-apple-darwin | macOS Apple Silicon | M1/M2/M3/M4 Macs |
x86_64-pc-windows-msvc | Windows x86_64 | Windows 10/11 |
Prerequisites
Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/envInstall Cross (Recommended)
cross simplifies cross-compilation using Docker:
cargo install cross --git https://github.com/cross-rs/crossCross Compile with cross
ARM64 Linux
# Using cross (requires Docker)
cross build --release -p omni-cli --target aarch64-unknown-linux-gnu
# Output
ls target/aarch64-unknown-linux-gnu/release/omniedgeRISC-V 64 Linux
cross build --release -p omni-cli --target riscv64gc-unknown-linux-gnu
# Output
ls target/riscv64gc-unknown-linux-gnu/release/omniedgeStatic Binary (musl)
# x86_64 static
cross build --release -p omni-cli --target x86_64-unknown-linux-musl
# ARM64 static
cross build --release -p omni-cli --target aarch64-unknown-linux-muslCross Compile Without Docker
ARM64 Linux (Native Cross-Compile)
# Install ARM64 toolchain
# Ubuntu/Debian
sudo apt install gcc-aarch64-linux-gnu
# Add target
rustup target add aarch64-unknown-linux-gnu
# Configure linker
mkdir -p ~/.cargo
cat >> ~/.cargo/config.toml << 'EOF'
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
EOF
# Build
cargo build --release -p omni-cli --target aarch64-unknown-linux-gnuRISC-V 64 Linux (Native Cross-Compile)
# Install RISC-V toolchain
# Ubuntu/Debian
sudo apt install gcc-riscv64-linux-gnu
# Add target
rustup target add riscv64gc-unknown-linux-gnu
# Configure linker
cat >> ~/.cargo/config.toml << 'EOF'
[target.riscv64gc-unknown-linux-gnu]
linker = "riscv64-linux-gnu-gcc"
EOF
# Build
cargo build --release -p omni-cli --target riscv64gc-unknown-linux-gnuCross Compile for macOS from Linux
Cross-compiling to macOS from Linux requires the macOS SDK:
# Using osxcross (complex setup)
# See: https://github.com/tpoechtrager/osxcross
# Add targets
rustup target add x86_64-apple-darwin aarch64-apple-darwin
# Build (requires osxcross)
CC=o64-clang cargo build --release -p omni-cli --target x86_64-apple-darwin
CC=oa64-clang cargo build --release -p omni-cli --target aarch64-apple-darwinCross Compile for Windows from Linux
# Install MinGW
sudo apt install mingw-w64
# Add target
rustup target add x86_64-pc-windows-gnu
# Build
cargo build --release -p omni-cli --target x86_64-pc-windows-gnuGitHub Actions Example
For automated cross-compilation:
name: Cross Compile
on: push
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
target:
- x86_64-unknown-linux-gnu
- aarch64-unknown-linux-gnu
- riscv64gc-unknown-linux-gnu
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-action@stable
- name: Install cross
run: cargo install cross --git https://github.com/cross-rs/cross
- name: Build
run: cross build --release -p omni-cli --target ${{ matrix.target }}
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: omniedge-${{ matrix.target }}
path: target/${{ matrix.target }}/release/omniedgeVerify Cross-Compiled Binary
# Check binary architecture
file target/aarch64-unknown-linux-gnu/release/omniedge
# Should show: ELF 64-bit LSB pie executable, ARM aarch64
file target/riscv64gc-unknown-linux-gnu/release/omniedge
# Should show: ELF 64-bit LSB pie executable, UCB RISC-VDeploy to Target Device
# Copy to Raspberry Pi or Jetson
scp target/aarch64-unknown-linux-gnu/release/omniedge user@device:/usr/local/bin/
# Copy to RISC-V board
scp target/riscv64gc-unknown-linux-gnu/release/omniedge user@device:/usr/local/bin/If you have more questions, feel free to discuss.
On This Page