mongo/buildscripts/mongo_rg_builds/build_rg_manylinux2014.sh

106 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# -------- config (overridable via env) --------------------------------------
ARCH="${ARCH:-$(uname -m)}" # x86_64 | aarch64 | s390x | ppc64le
RG_REPO="${RG_REPO:-https://github.com/BurntSushi/ripgrep.git}"
RG_REF="${RG_REF:-master}" # tag like 14.1.0 or a commit
OUT_DIR="${OUT_DIR:-$(pwd)/dist}"
PLATFORM="${PLATFORM:-}" # e.g. linux/arm64 if you want to force
DOCKER_IMAGE="" # filled below
CPU_BASELINE="${CPU_BASELINE:-}" # default per-arch below
# Map arch -> image + defaults
case "$ARCH" in
x86_64 | amd64)
ARCH=x86_64
DOCKER_IMAGE="quay.io/pypa/manylinux2014_x86_64"
CPU_BASELINE="${CPU_BASELINE:-x86-64}" # or x86-64-v2 / v3
;;
aarch64 | arm64)
ARCH=aarch64
DOCKER_IMAGE="quay.io/pypa/manylinux2014_aarch64"
CPU_BASELINE="${CPU_BASELINE:-generic}"
;;
s390x | 390x)
ARCH=s390x
DOCKER_IMAGE="quay.io/pypa/manylinux2014_s390x"
CPU_BASELINE="${CPU_BASELINE:-generic}"
;;
ppc64le | ppc)
ARCH=ppc64le
DOCKER_IMAGE="quay.io/pypa/manylinux2014_ppc64le"
CPU_BASELINE="${CPU_BASELINE:-generic}"
;;
*)
echo "Unsupported ARCH='$ARCH'. Expected x86_64|aarch64|s390x|ppc64le." >&2
exit 1
;;
esac
mkdir -p "$OUT_DIR"
echo "==> Build ripgrep for manylinux2014 ($ARCH)"
echo " Image: $DOCKER_IMAGE"
echo " CPU_BASELINE: $CPU_BASELINE"
[ -n "$PLATFORM" ] && echo " docker --platform: $PLATFORM"
# Compose optional --platform flag
PLATFORM_ARGS=()
[ -n "$PLATFORM" ] && PLATFORM_ARGS=(--platform "$PLATFORM")
docker run --rm -t "${PLATFORM_ARGS[@]}" \
-v "$OUT_DIR":/out \
"$DOCKER_IMAGE" \
bash -lc '
set -euo pipefail
echo "==> glibc baseline:"
ldd --version > /tmp/lddv && head -1 /tmp/lddv
# Enable newer GCC if available; guard against nounset
if [ -f /opt/rh/devtoolset-10/enable ]; then
set +u
# shellcheck disable=SC1091
source /opt/rh/devtoolset-10/enable
set -u
echo "Using devtoolset-10"
fi
yum -y install git cmake make which pkgconfig curl perl binutils >/dev/null 2>&1 || true
echo "==> Install Rust (minimal profile)"
curl -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
# shellcheck disable=SC1091
source "$HOME/.cargo/env"
rustc -V; cargo -V
echo "==> Clone ripgrep ('"$RG_REF"')"
rm -rf /tmp/ripgrep
git clone --depth=1 --branch '"$RG_REF"' '"$RG_REPO"' /tmp/ripgrep
cd /tmp/ripgrep
echo "==> Build with bundled+static PCRE2, LTO, single CGU, conservative CPU"
export PCRE2_SYS_BUNDLED=1
export PCRE2_SYS_STATIC=1
export CARGO_PROFILE_RELEASE_LTO=fat
export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1
export CARGO_PROFILE_RELEASE_PANIC=abort
export RUSTFLAGS="-C target-cpu='"$CPU_BASELINE"' -C strip=symbols"
cargo clean
cargo build --release --features pcre2
BIN=/tmp/ripgrep/target/release/rg
strip "$BIN" || true
echo "==> GLIBC symbols used:"
objdump -T "$BIN" | grep -o "GLIBC_[0-9]\\+\\.[0-9]\\+" | sort -u || true
OUT_NAME=rg-manylinux2014-'"$ARCH"'
cp "$BIN" /out/$OUT_NAME
echo "==> Wrote /out/$OUT_NAME"
'
echo "Built: $OUT_DIR/rg-manylinux2014-$ARCH"