98 lines
3.5 KiB
Bash
98 lines
3.5 KiB
Bash
#!/usr/bin/env bash
|
|
# scripts/build-boringtun.sh — Build the boringtun WireGuard FFI library for Artemis.
|
|
#
|
|
# Usage:
|
|
# bash scripts/build-boringtun.sh # native target
|
|
# bash scripts/build-boringtun.sh --universal # macOS fat binary (x86_64 + arm64)
|
|
#
|
|
# Output:
|
|
# deps/boringtun/libboringtun.a — static library
|
|
# deps/boringtun/wireguard_ffi.h — C ABI header (for reference)
|
|
#
|
|
# Prerequisites:
|
|
# • Rust toolchain (https://rustup.rs)
|
|
# • git
|
|
|
|
set -euo pipefail
|
|
|
|
REPO="https://github.com/cloudflare/boringtun.git"
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
SRC="$ROOT/build/boringtun-src"
|
|
OUT="$ROOT/deps/boringtun"
|
|
UNIVERSAL=false
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--universal) UNIVERSAL=true; shift ;;
|
|
*) echo "Unknown flag: $1"; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
info() { echo " $*"; }
|
|
ok() { echo " ✓ $*"; }
|
|
fail() { echo " ✗ $*" >&2; exit 1; }
|
|
|
|
# ── Prerequisites ─────────────────────────────────────────────────────────────
|
|
|
|
command -v cargo &>/dev/null || fail "cargo not found. Install Rust from https://rustup.rs"
|
|
command -v git &>/dev/null || fail "git not found"
|
|
|
|
if $UNIVERSAL; then
|
|
rustup target add x86_64-apple-darwin aarch64-apple-darwin 2>/dev/null || true
|
|
fi
|
|
|
|
# ── Clone / update ────────────────────────────────────────────────────────────
|
|
|
|
if [[ ! -d "$SRC" ]]; then
|
|
info "Cloning boringtun..."
|
|
git clone --depth 1 "$REPO" "$SRC"
|
|
else
|
|
info "Updating boringtun..."
|
|
git -C "$SRC" pull --ff-only
|
|
fi
|
|
ok "Source ready"
|
|
|
|
# ── Build ─────────────────────────────────────────────────────────────────────
|
|
|
|
if $UNIVERSAL && [[ "$(uname)" == "Darwin" ]]; then
|
|
info "Building for x86_64-apple-darwin..."
|
|
(cd "$SRC" && cargo build --release --target x86_64-apple-darwin --features ffi-bindings)
|
|
info "Building for aarch64-apple-darwin..."
|
|
(cd "$SRC" && cargo build --release --target aarch64-apple-darwin --features ffi-bindings)
|
|
ok "Both slices built"
|
|
else
|
|
info "Building boringtun (release)..."
|
|
(cd "$SRC" && cargo build --release --features ffi-bindings)
|
|
ok "Build complete"
|
|
fi
|
|
|
|
# ── Copy artifacts ────────────────────────────────────────────────────────────
|
|
|
|
mkdir -p "$OUT"
|
|
|
|
if $UNIVERSAL && [[ "$(uname)" == "Darwin" ]]; then
|
|
X86="$SRC/target/x86_64-apple-darwin/release/libboringtun.a"
|
|
ARM="$SRC/target/aarch64-apple-darwin/release/libboringtun.a"
|
|
[[ -f "$X86" ]] || fail "x86_64 library not found: $X86"
|
|
[[ -f "$ARM" ]] || fail "arm64 library not found: $ARM"
|
|
lipo -create "$X86" "$ARM" -output "$OUT/libboringtun.a"
|
|
ok "Created universal fat binary"
|
|
else
|
|
LIB="$SRC/target/release/libboringtun.a"
|
|
[[ -f "$LIB" ]] || fail "Library not found: $LIB"
|
|
cp "$LIB" "$OUT/libboringtun.a"
|
|
ok "Copied libboringtun.a"
|
|
fi
|
|
|
|
# Copy reference header if present
|
|
HDR="$SRC/boringtun/src/ffi/wireguard_ffi.h"
|
|
if [[ -f "$HDR" ]]; then
|
|
cp "$HDR" "$OUT/wireguard_ffi.h"
|
|
ok "Copied wireguard_ffi.h"
|
|
fi
|
|
|
|
echo ""
|
|
echo " Build successful. Library at:"
|
|
echo " $OUT/libboringtun.a"
|
|
echo ""
|
|
echo " Next: cmake -B build && cmake --build build"
|