104 lines
3 KiB
Bash
Executable file
104 lines
3 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Multi-architecture build for UniversalisOS release artifacts.
|
|
#
|
|
# Usage:
|
|
# tools/build-release.sh <version>
|
|
#
|
|
# Builds:
|
|
# - kernel ELF for armv7, aarch64, riscv
|
|
# - mycelium CLI (if Rust toolchain available)
|
|
# - Copies all artifacts to release/<version>/
|
|
# - Generates SHA256SUMS
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
VERSION="${1:?Usage: $0 <version>}"
|
|
|
|
RELEASE_DIR="$REPO_ROOT/release/$VERSION"
|
|
cd "$REPO_ROOT"
|
|
|
|
mkdir -p "$RELEASE_DIR"
|
|
|
|
# --- Build matrix ---
|
|
declare -A KERNEL_TARGETS=(
|
|
["armv7"]="qemu-arm-virt"
|
|
["aarch64"]="qemu-aarch64-virt"
|
|
["riscv"]="polarfire"
|
|
)
|
|
|
|
echo "==> Building UniversalisOS $VERSION"
|
|
echo ""
|
|
|
|
# --- Build kernel for each architecture ---
|
|
for ARCH in "${!KERNEL_TARGETS[@]}"; do
|
|
PLATFORM="${KERNEL_TARGETS[$ARCH]}"
|
|
echo "--- Building kernel: $ARCH/$PLATFORM ---"
|
|
(
|
|
cd kernel
|
|
make ARCH="$ARCH" PLATFORM="$PLATFORM" clean
|
|
make ARCH="$ARCH" PLATFORM="$PLATFORM"
|
|
)
|
|
|
|
ELF="kernel/build/$ARCH/$PLATFORM/universalisos.elf"
|
|
if [[ -f "$ELF" ]]; then
|
|
cp "$ELF" "$RELEASE_DIR/universalisos-$ARCH-$PLATFORM.elf"
|
|
echo " OK: $ELF"
|
|
else
|
|
echo " WARN: $ELF not found, skipping"
|
|
fi
|
|
echo ""
|
|
done
|
|
|
|
# --- Build mycelium CLI ---
|
|
if command -v cargo &>/dev/null && [[ -d "$REPO_ROOT/mycelium-tfw-extension" ]]; then
|
|
echo "--- Building mycelium CLI ---"
|
|
(
|
|
cd mycelium-tfw-extension
|
|
cargo build --release 2>/dev/null || echo " WARN: cargo build failed, skipping"
|
|
)
|
|
MYCELIUM_BIN="mycelium-tfw-extension/target/release/mycelium"
|
|
if [[ -f "$MYCELIUM_BIN" ]]; then
|
|
cp "$MYCELIUM_BIN" "$RELEASE_DIR/mycelium"
|
|
echo " OK: $MYCELIUM_BIN"
|
|
else
|
|
echo " WARN: mycelium binary not found, skipping"
|
|
fi
|
|
echo ""
|
|
else
|
|
echo "--- Skipping mycelium CLI (cargo not found) ---"
|
|
echo ""
|
|
fi
|
|
|
|
# --- Copy supporting files ---
|
|
echo "--- Copying supporting files ---"
|
|
[[ -f "$REPO_ROOT/LICENSE" ]] && cp "$REPO_ROOT/LICENSE" "$RELEASE_DIR/LICENSE"
|
|
[[ -f "$REPO_ROOT/CHANGELOG.md" ]] && cp "$REPO_ROOT/CHANGELOG.md" "$RELEASE_DIR/CHANGELOG.md"
|
|
[[ -f "$REPO_ROOT/VERSION" ]] && cp "$REPO_ROOT/VERSION" "$RELEASE_DIR/VERSION"
|
|
|
|
# Copy uos-cover tools
|
|
if [[ -d "$REPO_ROOT/tools/uos-cover" ]]; then
|
|
mkdir -p "$RELEASE_DIR/tools/uos-cover"
|
|
cp "$REPO_ROOT"/tools/uos-cover/*.py "$RELEASE_DIR/tools/uos-cover/" 2>/dev/null || true
|
|
echo " uos-cover tools"
|
|
fi
|
|
|
|
# Copy uos-pkg tools
|
|
if [[ -d "$REPO_ROOT/tools/uos-pkg" ]]; then
|
|
mkdir -p "$RELEASE_DIR/tools/uos-pkg"
|
|
cp "$REPO_ROOT"/tools/uos-pkg/*.py "$RELEASE_DIR/tools/uos-pkg/" 2>/dev/null || true
|
|
echo " uos-pkg tools"
|
|
fi
|
|
|
|
# --- Generate SHA256SUMS ---
|
|
echo ""
|
|
echo "--- Generating SHA256SUMS ---"
|
|
(
|
|
cd "$RELEASE_DIR"
|
|
find . -type f ! -name SHA256SUMS -exec sha256sum {} \; > SHA256SUMS
|
|
)
|
|
|
|
echo ""
|
|
echo "==> Build complete. Artifacts in: $RELEASE_DIR"
|
|
ls -la "$RELEASE_DIR/"
|