#!/usr/bin/env bash
set -euo pipefail

cd "$(dirname "$0")/.."
DIST="dist"
mkdir -p "$DIST"
# nix build can only see git-committed files
git add -A

nix_build() {
    local target="$1"
    local name="$2"
    echo "Building $name (nix)..."
    out=$(nix build ".#$target" --no-link --print-out-paths | tail -1)
    # `install -m 755` rather than `cp`: nix store outputs are mode 555, and cp
    # preserves the source mode, so a second build fails with EACCES.
    install -m 755 "$out/bin/rosless" "$DIST/$name"
    echo "  -> $DIST/$name"
}

# macOS ARM builds with plain cargo, not nix: nix-built macOS binaries link
# against /nix/store dylibs, which makes them non-portable to other Macs.
echo "Building rosless-aarch64-apple-darwin (cargo)..."
cargo build --release --quiet
cp target/release/rosless "$DIST/rosless-aarch64-apple-darwin"
echo "  -> $DIST/rosless-aarch64-apple-darwin"

nix_build linux-x86   rosless-x86_64-linux-musl
nix_build linux-arm64 rosless-aarch64-linux-musl

echo ""
echo "Done. Binaries in $DIST/:"
ls -lh "$DIST"
