#!/bin/bash set -e BINARY=$(cargo metadata --no-deps --format-version 1 | python3 -c "import sys,json; print(json.load(sys.stdin)['packages'][0]['name'])") VERSION=$(cargo metadata --no-deps --format-version 1 | python3 -c "import sys,json; print(json.load(sys.stdin)['packages'][0]['version'])") OUT_DIR="dist" TARGETS=( "x86_64-unknown-linux-musl:linux-x86_64" "aarch64-unknown-linux-musl:linux-aarch64" "aarch64-apple-darwin:macos-aarch64" ) echo "Building $BINARY v$VERSION" echo "" # Ensure rustup targets are installed rustup target add \ x86_64-unknown-linux-musl \ aarch64-unknown-linux-musl \ aarch64-apple-darwin 2>/dev/null mkdir -p "$OUT_DIR" # Clean previous release artifacts rm -f "$OUT_DIR/$BINARY"-* for entry in "${TARGETS[@]}"; do RUST_TARGET="${entry%%:*}" LABEL="${entry##*:}" ARTIFACT="$OUT_DIR/${BINARY}-${LABEL}" echo "── $LABEL ($RUST_TARGET)" case "$RUST_TARGET" in x86_64-unknown-linux-musl) CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=x86_64-linux-musl-gcc \ cargo build --release --target "$RUST_TARGET" --quiet ;; aarch64-unknown-linux-musl) CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-musl-gcc \ cargo build --release --target "$RUST_TARGET" --quiet ;; aarch64-apple-darwin) cargo build --release --target "$RUST_TARGET" --quiet ;; esac cp "target/$RUST_TARGET/release/$BINARY" "$ARTIFACT" SIZE=$(du -sh "$ARTIFACT" | cut -f1) echo " → $ARTIFACT ($SIZE)" done echo "" echo "Done. Artifacts in $OUT_DIR/:" ls -lh "$OUT_DIR/$BINARY"-*