Files
codex/codex-rs/scripts/build-linux-gnu.sh
2025-10-31 19:49:57 -07:00

57 lines
1.7 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# Native Linux GNU build for Codex CLI on x86_64-unknown-linux-gnu.
#
# This script is intended to be run on an x86_64 Linux host (or in an
# x86_64 container/VM). It builds the `codex` binary and packages it into a
# tarball matching the GitHub Releases naming:
# codex-x86_64-unknown-linux-gnu.tar.gz
#
# Usage:
# cd codex-rs
# ./scripts/build-linux-gnu.sh
#
# Optional: Pin the toolchain via the workspace rust-toolchain.toml (default).
if [[ "${OSTYPE}" != linux* ]]; then
echo "[!] This script is for native Linux builds. Detected OSTYPE='${OSTYPE}'." >&2
echo " Run this inside a Linux VM/container or use the Docker approach described in the README." >&2
exit 2
fi
ROOT_DIR=$(cd "$(dirname "$0")/.." && pwd)
cd "$ROOT_DIR"
BIN=codex
TARGET=x86_64-unknown-linux-gnu
OUTDIR="${ROOT_DIR}/dist/linux-gnu/${TARGET}"
mkdir -p "$OUTDIR"
TOOLCHAIN=${RUSTUP_TOOLCHAIN:-"$(grep -Eo 'channel\s*=\s*"[^"]+"' rust-toolchain.toml 2>/dev/null | sed -E 's/.*"(.*)"/\1/; s/channel\s*=\s*//g' || true)"}
if [[ -n "$TOOLCHAIN" ]]; then
export RUSTUP_TOOLCHAIN="$TOOLCHAIN"
echo "==> Using toolchain: $RUSTUP_TOOLCHAIN"
else
echo "==> Using default rustup toolchain"
fi
echo "==> Ensuring target installed: $TARGET"
rustup target add "$TARGET" >/dev/null
echo "==> Building $BIN for $TARGET (release)"
cargo build --release --bin "$BIN" --target "$TARGET"
SRC_BIN="${ROOT_DIR}/target/${TARGET}/release/${BIN}"
if [[ ! -f "$SRC_BIN" ]]; then
echo "Build succeeded but binary not found: $SRC_BIN" >&2
exit 1
fi
FINAL_NAME="${BIN}-${TARGET}"
cp -f "$SRC_BIN" "$OUTDIR/$FINAL_NAME"
tar -C "$OUTDIR" -czf "$OUTDIR/${FINAL_NAME}.tar.gz" "$FINAL_NAME"
echo "==> Artifact: $OUTDIR/${FINAL_NAME}.tar.gz"