push
This commit is contained in:
1 parent
093e6a7c14
commit
1a2a5f0faf
24 files changed
+578
-537
No files matched your search
Executable
+62
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
SOURCE_DIR="${RUSTPROXY_SOURCE_DIR:?RUSTPROXY_SOURCE_DIR is required}"
|
||||
FREEBSD_RELEASE="${FREEBSD_RELEASE:-15.1-RELEASE}"
|
||||
DOCKER_IMAGE="${DOCKER_IMAGE:-rustproxy-freebsd15-builder:15.1-rust1.88}"
|
||||
DOCKER_CACHE_DIR="${DOCKER_CACHE_DIR:-/opt/opn-rustproxy/cache}"
|
||||
RUN_LINUX_TESTS="${RUN_LINUX_TESTS:-1}"
|
||||
|
||||
command -v docker >/dev/null 2>&1 || { echo "Docker is required" >&2; exit 1; }
|
||||
[[ -f "$SOURCE_DIR/Cargo.toml" ]] || { echo "Invalid RustProxy source: $SOURCE_DIR" >&2; exit 1; }
|
||||
|
||||
mkdir -p "$DOCKER_CACHE_DIR/cargo" "$DOCKER_CACHE_DIR/target" "$ROOT/dist/docker-build"
|
||||
uid="$(id -u)"
|
||||
gid="$(id -g)"
|
||||
|
||||
# Rebuild is cheap after the first run because the FreeBSD sysroot layer is cached.
|
||||
docker build \
|
||||
--build-arg "FREEBSD_RELEASE=$FREEBSD_RELEASE" \
|
||||
-t "$DOCKER_IMAGE" \
|
||||
-f "$ROOT/builder/docker/Dockerfile" \
|
||||
"$ROOT/builder/docker"
|
||||
|
||||
run_args=(
|
||||
--rm
|
||||
--user "$uid:$gid"
|
||||
-e CARGO_HOME=/cargo
|
||||
-e CARGO_TARGET_DIR=/target
|
||||
-v "$SOURCE_DIR:/src:ro"
|
||||
-v "$DOCKER_CACHE_DIR/cargo:/cargo"
|
||||
-v "$DOCKER_CACHE_DIR/target:/target"
|
||||
-v "$ROOT/dist/docker-build:/out"
|
||||
-w /src
|
||||
)
|
||||
|
||||
if [[ "$RUN_LINUX_TESTS" == "1" ]]; then
|
||||
echo "Running RustProxy tests in Linux builder container..."
|
||||
docker run "${run_args[@]}" "$DOCKER_IMAGE" \
|
||||
cargo test --locked --release
|
||||
fi
|
||||
|
||||
echo "Cross-compiling RustProxy for x86_64-unknown-freebsd..."
|
||||
docker run "${run_args[@]}" "$DOCKER_IMAGE" bash -lc '
|
||||
set -euo pipefail
|
||||
cargo build --locked --release --target x86_64-unknown-freebsd
|
||||
install -m 0555 /target/x86_64-unknown-freebsd/release/rust-proxy /out/rust-proxy
|
||||
desc="$(file -b /out/rust-proxy)"
|
||||
echo "$desc"
|
||||
header="$(llvm-readelf -h /out/rust-proxy)"
|
||||
printf "%s\n" "$header" | grep -E "Class:|Machine:|OS/ABI:" || true
|
||||
printf "%s\n" "$header" | grep -qi FreeBSD || { echo "Built ELF is not marked for FreeBSD" >&2; exit 1; }
|
||||
dynamic="$(llvm-readelf -d /out/rust-proxy || true)"
|
||||
printf "%s\n" "$dynamic" | grep NEEDED || true
|
||||
if printf "%s\n" "$dynamic" | grep -q "libc\.so\.6"; then
|
||||
echo "Linux libc detected in FreeBSD target binary" >&2
|
||||
exit 1
|
||||
fi
|
||||
'
|
||||
|
||||
RUSTPROXY_BINARY="$ROOT/dist/docker-build/rust-proxy" \
|
||||
"$ROOT/builder/debian/package-freebsd.sh"
|
||||
Reference in new issue
Block a user