First Version
This commit is contained in:
Executable
+43
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env sh
|
||||
# Build a fully static Linux binary (musl) without any host cross-toolchain.
|
||||
#
|
||||
# Since openssl is gone (rustls) and the crypto backend is `ring` (no OpenSSL /
|
||||
# aws-lc cmake build), the only native code left to cross-compile is SQLite
|
||||
# (bundled) and the tree-sitter C grammars — both of which the musl-cross image
|
||||
# handles out of the box. `whisper-local` (whisper.cpp, C++) is dropped via
|
||||
# --no-default-features because it is heavy and irrelevant to a headless server;
|
||||
# set FEATURES="" to include it.
|
||||
#
|
||||
# Requirements: Docker. No Rust/musl toolchain needed on the host.
|
||||
#
|
||||
# Usage:
|
||||
# scripts/build-musl.sh # x86_64 static binary
|
||||
# TARGET=aarch64-unknown-linux-musl \
|
||||
# IMAGE=messense/rust-musl-cross:aarch64-musl \
|
||||
# scripts/build-musl.sh # arm64 static binary
|
||||
#
|
||||
# Output: target/musl/<target>/release/skald
|
||||
set -eu
|
||||
|
||||
TARGET="${TARGET:-x86_64-unknown-linux-musl}"
|
||||
IMAGE="${IMAGE:-messense/rust-musl-cross:x86_64-musl}"
|
||||
# Word-splitting is intentional so callers can pass multiple flags.
|
||||
FEATURES="${FEATURES:---no-default-features}"
|
||||
|
||||
PROJ="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
|
||||
echo "[build-musl] target=$TARGET image=$IMAGE features='$FEATURES'"
|
||||
|
||||
# A dedicated CARGO_TARGET_DIR keeps musl artifacts from clashing with the host
|
||||
# (macOS) build cache; a named volume caches the crates.io registry across runs.
|
||||
docker run --rm -t \
|
||||
-v "$PROJ":/home/rust/src \
|
||||
-v skald-musl-registry:/root/.cargo/registry \
|
||||
-e CARGO_TARGET_DIR=/home/rust/src/target/musl \
|
||||
"$IMAGE" \
|
||||
cargo build --release --target "$TARGET" $FEATURES --bin skald
|
||||
|
||||
BIN="$PROJ/target/musl/$TARGET/release/skald"
|
||||
echo "[build-musl] built: $BIN"
|
||||
file "$BIN" 2>/dev/null || true
|
||||
echo "[build-musl] copy this single file to the server and run it — no shared libs required."
|
||||
Reference in New Issue
Block a user