#!/usr/bin/env bash # Static musl build of cst-agent for one architecture, packed as # dist/cst-agent-VERSION-linux-ARCH.tar.gz (+ .sha256). # scripts/package_linux.sh x86_64|x86|aarch64 # CST_LINUX_CHECK=1 also runs `make check` (only where the binaries can run). # CST_FORCE_REBUILD=1 forces a clean tree; otherwise same compiler+version # reuses object files (much faster CI/local repacks). set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" # shellcheck source=lib_release.sh . "$ROOT/scripts/lib_release.sh" ARCH="${1:?usage: $0 x86_64|x86|aarch64}" PREFIX="$ROOT/third_party/prefix-linux-$ARCH" cd "$ROOT" read -r LINUX_HOST bindir < <(bash scripts/ci_linux_toolchain.sh "$ARCH") export PATH="$bindir:$PATH" LINUX_HOST T="$LINUX_HOST-" if [[ ! -f "$PREFIX/lib/libcurl.a" || ! -f "$PREFIX/lib/libncursesw.a" ]]; then bash scripts/build_third_party_linux.sh "$ARCH" fi # Only the static prefix: no host .pc file may leak into the link. export PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" unset PKG_CONFIG_PATH CC CFLAGS LDFLAGS mk=(make CC="${T}gcc" AR="${T}ar" STATIC=1 CFLAGS="-std=c11 -Wall -Wextra -O2 -g -Werror") stamp=".gen/release-linux-$ARCH.stamp" want="$(cst_build_stamp "${T}gcc")" if [[ "${CST_FORCE_REBUILD:-0}" == 1 || ! -f cst-agent || ! -f "$stamp" || "$(cat "$stamp" 2>/dev/null || true)" != "$want" ]]; then echo "==> clean rebuild ($ARCH)" make clean >/dev/null make -C vendor/sashidown clean >/dev/null 2>&1 || true else echo "==> incremental rebuild ($ARCH, stamp match)" fi "${mk[@]}" -j"$(nproc)" cst-agent mkdir -p .gen printf '%s\n' "$want" >"$stamp" if "${T}readelf" -l cst-agent | grep -q 'Requesting program interpreter'; then echo "cst-agent is dynamically linked" >&2 exit 1 fi if [[ "${CST_LINUX_CHECK:-0}" == 1 ]]; then "${mk[@]}" check fi ver="$(cst_version)" name="cst-agent-$ver-linux-$ARCH" rel="dist/$name" rm -rf "$rel" mkdir -p "$rel" cp -f cst-agent "$rel/cst-agent" "${T}strip" "$rel/cst-agent" cp -f README.md "$rel/README.md" echo "$ver" >"$rel/VERSION" tgz="$(cst_pack_tgz dist "$name")" ls -la "$rel" echo "$ROOT/$tgz"