build-linux

 1#!/usr/bin/env bash
 2#
 3# Build eval-cli for x86_64 Linux from any host (macOS, Linux, etc.)
 4# using Docker + cargo-zigbuild. Targets musl libc, producing a fully
 5# static binary that runs on any Linux distro (glibc or musl / Alpine).
 6# The resulting binary is placed at the path printed on completion
 7# (default: target/eval-cli).
 8#
 9# Usage:
10#   crates/eval_cli/script/build-linux [--output PATH]
11#
12# Examples:
13#   crates/eval_cli/script/build-linux
14#   crates/eval_cli/script/build-linux --output ~/bin/eval-cli
15#
16# Prerequisites: Docker must be installed and running.
17
18set -euo pipefail
19
20SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
21REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
22OUTPUT="${REPO_ROOT}/target/eval-cli"
23
24while [[ $# -gt 0 ]]; do
25    case $1 in
26        --output)
27            OUTPUT="$2"
28            shift 2
29            ;;
30        *)
31            echo "Unknown option: $1" >&2
32            exit 1
33            ;;
34    esac
35done
36
37cd "$REPO_ROOT"
38
39IMAGE_TAG="eval-cli-builder"
40
41echo "Building eval-cli for x86_64-unknown-linux-musl (static binary)..."
42echo "  Repo root: $REPO_ROOT"
43echo "  Output:    $OUTPUT"
44echo ""
45
46docker build \
47    --platform linux/amd64 \
48    -f crates/eval_cli/Dockerfile \
49    -t "$IMAGE_TAG" \
50    .
51
52CONTAINER_ID=$(docker create "$IMAGE_TAG" /eval-cli)
53mkdir -p "$(dirname "$OUTPUT")"
54docker cp "$CONTAINER_ID":/eval-cli "$OUTPUT"
55docker rm "$CONTAINER_ID" > /dev/null
56
57echo ""
58echo "Built successfully: $OUTPUT"
59echo "  $(file "$OUTPUT")"