Release matrix: Linux, Windows, macOS and FreeBSD
Drop android (same binary as linux/arm64), big-endian ppc64 (cannot be verified: even hello-world crashes under qemu-ppc64 with the cross toolchain), NetBSD (cross 0.2.5's sysroot lacks libexecinfo), illumos, Solaris and WASI, as agreed. docs/PLATFORMS.md records each decision. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -9,16 +9,13 @@
|
||||
# release builds from the pinned toolchain (rust-toolchain.toml) and the
|
||||
# locked dependencies (Cargo.lock), with build paths remapped so the output
|
||||
# does not depend on where the tree lives. Linux binaries are static (musl)
|
||||
# except s390x and ppc64, which link glibc dynamically; static linking is
|
||||
# except s390x, which links glibc dynamically; static linking is
|
||||
# checked. SHA256SUMS is written next to the binaries.
|
||||
#
|
||||
# How each target is built, and what the host needs:
|
||||
# zig cargo-zigbuild and zig on PATH (Linux, Windows GNU ABI)
|
||||
# mac a Mac with Xcode (macOS)
|
||||
# cross `cross` and Docker (FreeBSD, NetBSD, illumos, Solaris,
|
||||
# and big-endian ppc64, which zig
|
||||
# links for the wrong ABI)
|
||||
# cargo nothing extra (WASI)
|
||||
# cross `cross` and Docker (FreeBSD)
|
||||
# A requested target the host cannot build is reported, the others are still
|
||||
# built, and the script exits non-zero. See docs/PLATFORMS.md for the Go
|
||||
# targets with no Rust equivalent; asking for one is an error.
|
||||
@@ -40,9 +37,7 @@ table() {
|
||||
linux/riscv64 riscv64gc-unknown-linux-musl zig
|
||||
linux/loong64 loongarch64-unknown-linux-musl zig
|
||||
linux/ppc64le powerpc64le-unknown-linux-musl zig
|
||||
linux/ppc64 powerpc64-unknown-linux-gnu cross
|
||||
linux/s390x s390x-unknown-linux-gnu zig
|
||||
android/arm64 aarch64-unknown-linux-musl zig
|
||||
windows/amd64 x86_64-pc-windows-gnu zig
|
||||
windows/386 i686-pc-windows-gnu zig
|
||||
windows/arm64 aarch64-pc-windows-gnullvm zig
|
||||
@@ -50,19 +45,15 @@ table() {
|
||||
darwin/arm64 aarch64-apple-darwin mac
|
||||
freebsd/amd64 x86_64-unknown-freebsd cross
|
||||
freebsd/386 i686-unknown-freebsd cross
|
||||
netbsd/amd64 x86_64-unknown-netbsd cross
|
||||
illumos/amd64 x86_64-unknown-illumos cross
|
||||
solaris/amd64 x86_64-pc-solaris cross
|
||||
wasip1/wasm wasm32-wasip1 cargo
|
||||
EOF
|
||||
}
|
||||
|
||||
# Go targets that Rust cannot build with a stable toolchain (no prebuilt
|
||||
# standard library, or no Rust target at all). See docs/PLATFORMS.md.
|
||||
unsupported="aix/ppc64 dragonfly/amd64 freebsd/arm freebsd/arm64 freebsd/riscv64 js/wasm
|
||||
linux/mips linux/mipsle linux/mips64 linux/mips64le netbsd/386 netbsd/arm netbsd/arm64
|
||||
openbsd/386 openbsd/amd64 openbsd/arm openbsd/arm64 openbsd/ppc64 openbsd/riscv64
|
||||
plan9/386 plan9/amd64 plan9/arm"
|
||||
# Go-era targets no longer released (the release covers Linux, Windows,
|
||||
# macOS and FreeBSD). See docs/PLATFORMS.md for why each was dropped.
|
||||
unsupported="aix/ppc64 android/arm64 dragonfly/amd64 freebsd/arm freebsd/arm64 freebsd/riscv64
|
||||
illumos/amd64 js/wasm linux/mips linux/mipsle linux/mips64 linux/mips64le linux/ppc64
|
||||
netbsd/386 netbsd/amd64 netbsd/arm netbsd/arm64 openbsd/386 openbsd/amd64 openbsd/arm
|
||||
openbsd/arm64 openbsd/ppc64 openbsd/riscv64 plan9/386 plan9/amd64 plan9/arm solaris/amd64 wasip1/wasm"
|
||||
|
||||
out=${OUT:-dist}
|
||||
jobs=${JOBS:-1}
|
||||
@@ -89,7 +80,7 @@ build_one() {
|
||||
row=$(table | awk -v t="$want" '$1 == t')
|
||||
if [[ -z $row ]]; then
|
||||
if grep -qw -- "$want" <<<"$unsupported"; then
|
||||
echo "UNSUPPORTED $want: no stable Rust target; see docs/PLATFORMS.md" >&2
|
||||
echo "UNSUPPORTED $want: not released; see docs/PLATFORMS.md" >&2
|
||||
else
|
||||
echo "UNKNOWN $want" >&2
|
||||
fi
|
||||
@@ -98,7 +89,6 @@ build_one() {
|
||||
read -r _ triple method <<<"$row"
|
||||
os=${want%/*}
|
||||
[[ $os == windows ]] && ext=.exe
|
||||
[[ $os == wasip1 ]] && ext=.wasm
|
||||
name=vault-${want/\//-}$ext
|
||||
tdir=$root/target
|
||||
[[ $JOBS_N != 1 ]] && tdir=$CARGO_TARGET_DIR_BASE/$triple
|
||||
@@ -114,7 +104,6 @@ build_one() {
|
||||
command -v cross >/dev/null && command -v docker >/dev/null ||
|
||||
{ echo "SKIPPED $want: needs cross and docker" >&2; return 1; }
|
||||
cmd=(cross build) ;;
|
||||
cargo) cmd=(cargo build) ;;
|
||||
esac
|
||||
local flags=$RUSTFLAGS
|
||||
# zig's musl getrandom() never reaches the kernel on riscv64 (it spins);
|
||||
@@ -126,7 +115,6 @@ build_one() {
|
||||
return 1
|
||||
fi
|
||||
bin=$tdir/$triple/release/vault$ext
|
||||
[[ $os == wasip1 ]] && bin=$tdir/$triple/release/vault.wasm
|
||||
cp -- "$bin" "$OUT_DIR/$name"
|
||||
if [[ $triple == *-musl* ]] && command -v file >/dev/null; then
|
||||
file -L "$OUT_DIR/$name" | grep -q 'static' || { echo "FAILED $want: not statically linked" >&2; return 1; }
|
||||
|
||||
Reference in New Issue
Block a user