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 glibc 2.31 (Debian Bullseye /
5# Ubuntu Focal) so the binary is portable to any modern Linux distro.
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-gnu (glibc >= 2.31)..."
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")"