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

TargetArchitectureNotes
x86_64-unknown-linux-gnuLinux x86_64Most servers and desktops
aarch64-unknown-linux-gnuLinux ARM64Raspberry Pi 4/5, Jetson
riscv64gc-unknown-linux-gnuLinux RISC-V 64StarFive, Sipeed boards
x86_64-unknown-linux-muslLinux x86_64 (static)Alpine, portable binary
aarch64-unknown-linux-muslLinux ARM64 (static)Portable ARM64 binary
x86_64-apple-darwinmacOS IntelIntel Macs
aarch64-apple-darwinmacOS Apple SiliconM1/M2/M3/M4 Macs
x86_64-pc-windows-msvcWindows x86_64Windows 10/11

Prerequisites

Install Rust

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

cross simplifies cross-compilation using Docker:

cargo install cross --git https://github.com/cross-rs/cross

Cross 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/omniedge

RISC-V 64 Linux

cross build --release -p omni-cli --target riscv64gc-unknown-linux-gnu

# Output
ls target/riscv64gc-unknown-linux-gnu/release/omniedge

Static 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-musl

Cross 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-gnu

RISC-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-gnu

Cross 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-darwin

Cross 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-gnu

GitHub 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/omniedge

Verify 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-V

Deploy 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

OmniEdge

© 2026 OmniEdge Inc. All rights reserved

Built by a global remote team.

TwitterGithubDiscord