Building from Source
articwake requires Rust 1.85+ (edition 2024). This guide covers native builds and cross-compilation.
Prerequisites
Section titled “Prerequisites”Install Rust
Section titled “Install Rust”curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsource $HOME/.cargo/env
# Verify version (1.85+)rustc --versionClone the Repository
Section titled “Clone the Repository”git clone https://github.com/a-maccormack/articwake.gitcd articwakeNative Build
Section titled “Native Build”For running on your development machine:
# Debug buildcargo build
# Release build (optimized)cargo build --releaseBinary location:
- Debug:
target/debug/articwake - Release:
target/release/articwake
Cross-Compilation
Section titled “Cross-Compilation”For building on x86 and running on ARM (like Raspberry Pi).
Install cross
Section titled “Install cross”cargo install cross --git https://github.com/cross-rs/crosscross uses Docker to provide consistent build environments.
Build Targets
Section titled “Build Targets”| Target | Platform | Use Case |
|---|---|---|
x86_64-unknown-linux-gnu | x86_64 Linux | Standard servers |
aarch64-unknown-linux-gnu | ARM64 Linux (glibc) | Pi 4/5, ARM servers |
aarch64-unknown-linux-musl | ARM64 Linux (musl) | Alpine, static binary |
armv7-unknown-linux-gnueabihf | ARMv7 Linux | Pi 2/3 (32-bit) |
Build for Raspberry Pi Zero 2 W
Section titled “Build for Raspberry Pi Zero 2 W”The Pi Zero 2 W is ARM64 (aarch64):
# Dynamic linking (glibc)cross build --release --target aarch64-unknown-linux-gnu
# Static binary (musl) - recommended for Alpinecross build --release --target aarch64-unknown-linux-muslBinary location: target/aarch64-unknown-linux-musl/release/articwake
Build for Pi 2/3 (32-bit)
Section titled “Build for Pi 2/3 (32-bit)”cross build --release --target armv7-unknown-linux-gnueabihfBuild Configuration
Section titled “Build Configuration”Cross.toml
Section titled “Cross.toml”The repository includes a Cross.toml configuration:
[target.armv7-unknown-linux-gnueabihf]image = "ghcr.io/cross-rs/armv7-unknown-linux-gnueabihf:main"
[target.aarch64-unknown-linux-gnu]image = "ghcr.io/cross-rs/aarch64-unknown-linux-gnu:main"
[target.aarch64-unknown-linux-musl]image = "ghcr.io/cross-rs/aarch64-unknown-linux-musl:main"Cargo Features
Section titled “Cargo Features”articwake uses default features for all dependencies. No special feature flags are needed.
Build Artifacts
Section titled “Build Artifacts”Binary Size
Section titled “Binary Size”Approximate release binary sizes:
| Target | Size |
|---|---|
| x86_64-gnu | ~6 MB |
| aarch64-gnu | ~5 MB |
| aarch64-musl | ~7 MB |
| armv7-gnueabihf | ~5 MB |
Stripping Symbols
Section titled “Stripping Symbols”To reduce binary size:
strip target/release/articwakeOr configure in Cargo.toml:
[profile.release]strip = truelto = trueDevelopment Build
Section titled “Development Build”For local development with hot reload:
# Install cargo-watchcargo install cargo-watch
# Run with auto-reloadcargo watch -x runTroubleshooting
Section titled “Troubleshooting”Rust version too old
Section titled “Rust version too old”error: package `articwake` requires rustc 1.85Update Rust:
rustup update stableCross-compilation fails
Section titled “Cross-compilation fails”Ensure Docker is running and you have pulled the cross images:
docker pull ghcr.io/cross-rs/aarch64-unknown-linux-musl:mainMissing build dependencies
Section titled “Missing build dependencies”On some systems, you may need:
# Debian/Ubuntuapt install build-essential pkg-config libssl-dev
# Fedoradnf install gcc pkg-config openssl-develOut of memory
Section titled “Out of memory”Building with LTO can use significant RAM. If OOM, try:
# Build with fewer parallel jobscargo build --release -j 2