#!/usr/bin/env bash # build-static.sh — Build statically-linked nirc binaries via cargo-zigbuild # # Prerequisites: # 1. rustup target add x86_64-unknown-linux-musl aarch64-unknown-linux-musl # 2. pip install cargo-zigbuild (or: cargo install cargo-zigbuild) # 3. Install zig: https://ziglang.org/download/ # # Usage: # ./packaging/build-static.sh # both targets # ./packaging/build-static.sh x86_64 # just x86_64 # ./packaging/build-static.sh aarch64 # just aarch64 set -euo pipefail cd "$(dirname "$0")/.." VERSION="0.5.0" OUTDIR="target/static-release" mkdir -p "$OUTDIR" build_target() { local target="$1" local suffix="$2" echo "=== Building nirc ${VERSION} for ${target} ===" cargo zigbuild --release --target "${target}" local bin="target/${target}/release/nirc" if [ -f "$bin" ]; then local out="${OUTDIR}/nirc-${VERSION}-${suffix}" cp "$bin" "$out" chmod +x "$out" local size size=$(du -h "$out" | cut -f1) echo " -> $out ($size)" else echo " ERROR: $bin not found" >&2 return 1 fi } if [ -n "${1:-}" ]; then case "$1" in x86_64) build_target x86_64-unknown-linux-musl linux-x86_64 ;; aarch64) build_target aarch64-unknown-linux-musl linux-aarch64 ;; *) echo "Usage: $0 [x86_64|aarch64]"; exit 1 ;; esac else build_target x86_64-unknown-linux-musl linux-x86_64 build_target aarch64-unknown-linux-musl linux-aarch64 fi echo "" echo "=== Static builds complete in ${OUTDIR}/ ===" ls -lh "$OUTDIR"/nirc-${VERSION}-*