mirror of https://github.com/mongodb/mongo
106 lines
3.2 KiB
Bash
Executable File
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"
|