Improve build script
Some checks failed
Build / BIOS / i386 (push) Has been cancelled
Build / BIOS / x86_64 (push) Has been cancelled
Build / SBI / riscv32 (push) Has been cancelled
Build / SBI / riscv64 (push) Has been cancelled
Build / UEFI / arm32 (push) Has been cancelled
Build / UEFI / arm64 (push) Has been cancelled
Build / UEFI / i386 (push) Has been cancelled
Build / UEFI / loong64 (push) Has been cancelled
Build / UEFI / riscv32 (push) Has been cancelled
Build / UEFI / riscv64 (push) Has been cancelled
Build / UEFI / x86_64 (push) Has been cancelled
Build / UEFI SB / arm64 (push) Has been cancelled
Build / UEFI SB / x86_64 (push) Has been cancelled
Build / SB Sign / arm64 (push) Has been cancelled
Build / SB Sign / x86_64 (push) Has been cancelled
Build / Linux / arm32 (push) Has been cancelled
Build / Linux / arm64 (push) Has been cancelled
Build / Linux / i386 (push) Has been cancelled
Build / Linux / loong64 (push) Has been cancelled
Build / Linux / riscv32 (push) Has been cancelled
Build / Linux / riscv64 (push) Has been cancelled
Build / Linux / x86_64 (push) Has been cancelled
Build / UEFI shim (push) Has been cancelled
Build / Combine (push) Has been cancelled
Build / Version (push) Has been cancelled
Build / Publish (push) Has been cancelled
Build / Release (push) Has been cancelled

This commit is contained in:
2026-05-25 05:48:54 -07:00
parent 8cc1f710c5
commit 8fb25d825d

View File

@@ -27,14 +27,14 @@
# =============================================================================
set -euo pipefail
# ── Defaults ─────────────────────────────────────────────────────────────────
# ── Defaults ─────────────────────────────────────────────────────────────────
PLATFORM="efi-x64"
EMBED=""
OUTPUT_DIR="$(dirname "$0")/build"
JOBS="$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)"
SRC_DIR="$(dirname "$0")/src"
SRC_DIR="$(cd "$(dirname "$0")/src" && pwd)"
# ── Colour helpers ────────────────────────────────────────────────────────────
# ── Colour helpers ────────────────────────────────────────────────────────────
if [ -t 1 ]; then
C_BOLD='\033[1m'; C_GREEN='\033[0;32m'; C_CYAN='\033[0;36m'
C_YELLOW='\033[0;33m'; C_RED='\033[0;31m'; C_RESET='\033[0m'
@@ -47,7 +47,7 @@ ok() { echo -e "${C_GREEN}✔${C_RESET} $*"; }
warn() { echo -e "${C_YELLOW}${C_RESET} $*"; }
die() { echo -e "${C_RED}${C_RESET} $*" >&2; exit 1; }
# ── Argument parsing ──────────────────────────────────────────────────────────
# ── Argument parsing ──────────────────────────────────────────────────────────
usage() {
sed -n '3,20p' "$0" | sed 's/^# \{0,1\}//'
exit 0
@@ -64,48 +64,58 @@ while [[ $# -gt 0 ]]; do
esac
done
# ── Platform → make target ────────────────────────────────────────────────────
# ── Platform → make target ────────────────────────────────────────────────────
case "$PLATFORM" in
efi-x64) MAKE_TARGET="bin-x86_64-efi/ipxe.efi"; OUTPUT_NAME="ipxe-x64.efi" ;;
efi-ia32) MAKE_TARGET="bin-i386-efi/ipxe.efi"; OUTPUT_NAME="ipxe-ia32.efi" ;;
efi-arm64) MAKE_TARGET="bin-arm64-efi/ipxe.efi"; OUTPUT_NAME="ipxe-arm64.efi" ;;
snp-x64) MAKE_TARGET="bin-x86_64-efi/snponly.efi"; OUTPUT_NAME="snponly-x64.efi";;
bios) MAKE_TARGET="bin/undionly.kpxe"; OUTPUT_NAME="undionly.kpxe" ;;
efi-x64) MAKE_TARGET="bin-x86_64-efi/ipxe.efi"; OUTPUT_NAME="ipxe-x64.efi" ;;
efi-ia32) MAKE_TARGET="bin-i386-efi/ipxe.efi"; OUTPUT_NAME="ipxe-ia32.efi" ;;
efi-arm64) MAKE_TARGET="bin-arm64-efi/ipxe.efi"; OUTPUT_NAME="ipxe-arm64.efi" ;;
snp-x64) MAKE_TARGET="bin-x86_64-efi/snponly.efi"; OUTPUT_NAME="snponly-x64.efi" ;;
bios) MAKE_TARGET="bin/undionly.kpxe"; OUTPUT_NAME="undionly.kpxe" ;;
*) die "Unknown platform: '$PLATFORM'. Run with --help for valid platforms." ;;
esac
# ── Validate inputs ───────────────────────────────────────────────────────────
[[ -d "$SRC_DIR" ]] || die "src/ directory not found at $SRC_DIR"
# ── Validate inputs ───────────────────────────────────────────────────────────
[[ -d "$SRC_DIR" ]] || die "src/ not found at $SRC_DIR"
EMBED_ARG=""
EMBED_ABS=""
if [[ -n "$EMBED" ]]; then
# Resolve relative to repo root, not src/
EMBED_ABS="$(realpath "$EMBED" 2>/dev/null)" || die "Embed script not found: $EMBED"
[[ -f "$EMBED_ABS" ]] || die "Embed script not found: $EMBED"
EMBED_ARG="EMBED=$EMBED_ABS"
info "Embed script: $EMBED_ABS"
fi
# ── Build ─────────────────────────────────────────────────────────────────────
# ── Summary ────────────────────────────────────────────────────────────────────
mkdir -p "$OUTPUT_DIR"
echo -e "${C_BOLD}Platform:${C_RESET} $PLATFORM$MAKE_TARGET"
echo -e "${C_BOLD}Jobs:${C_RESET} $JOBS"
echo -e "${C_BOLD}Embed:${C_RESET} ${EMBED_ABS:-none}"
echo -e "${C_BOLD}Output:${C_RESET} $OUTPUT_DIR/$OUTPUT_NAME"
echo ""
info "Starting build…"
# ── Build ──────────────────────────────────────────────────────────────────────
info "Building…"
make -C "$SRC_DIR" \
"$MAKE_TARGET" \
$EMBED_ARG \
-j "$JOBS"
if [[ -n "$EMBED_ABS" ]]; then
make -C "$SRC_DIR" "$MAKE_TARGET" "EMBED=$EMBED_ABS" -j "$JOBS"
else
make -C "$SRC_DIR" "$MAKE_TARGET" -j "$JOBS"
fi
# ── Copy output ───────────────────────────────────────────────────────────────
# ── Copy output ───────────────────────────────────────────────────────────────
BUILT_BIN="$SRC_DIR/$MAKE_TARGET"
[[ -f "$BUILT_BIN" ]] || die "Build succeeded but output not found: $BUILT_BIN"
[[ -f "$BUILT_BIN" ]] || die "Build finished but output not found: $BUILT_BIN"
cp "$BUILT_BIN" "$OUTPUT_DIR/$OUTPUT_NAME"
# ── Verify embedded script made it in ─────────────────────────────────────────
if [[ -n "$EMBED_ABS" ]]; then
# Pull first line of the script and look for it in the binary
FIRST_LINE="$(head -1 "$EMBED_ABS")"
if strings "$OUTPUT_DIR/$OUTPUT_NAME" | grep -qF "$FIRST_LINE" 2>/dev/null; then
ok "Embed verified: script found in binary"
else
warn "Could not verify embed — 'strings' may not be installed, or check manually"
fi
fi
echo ""
ok "Built: $OUTPUT_DIR/$OUTPUT_NAME"