52 lines
1.7 KiB
Bash
Executable File
52 lines
1.7 KiB
Bash
Executable File
#!/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).
|
|
# Builds in the source tree, so the tree is cleaned first.
|
|
set -euo pipefail
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
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")
|
|
|
|
make clean >/dev/null
|
|
make -C vendor/sashidown clean >/dev/null 2>&1 || true
|
|
"${mk[@]}" -j"$(nproc)" cst-agent
|
|
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="$(sed -n 's/^#define CST_VERSION_\(MAJOR\|MINOR\|PATCH\) \([0-9]*\)$/\2/p' include/cst_version.h | paste -sd.)"
|
|
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="dist/$name.tar.gz"
|
|
tar -C dist -czf "$tgz" "$name"
|
|
(cd dist && sha256sum "$name.tar.gz" >"$name.tar.gz.sha256")
|
|
ls -la "$rel"
|
|
echo "$ROOT/$tgz"
|