#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" CONFIG_NAME="redbear-full" ARCH="$(uname -m)" BUILD=0 ALLOW_UPSTREAM=0 QEMU_EXTRA_ARGS=() MAKE_ENV=() usage() { cat < Ensuring .config is set for native build..." if ! grep -q 'PODMAN_BUILD?=0' .config 2>/dev/null; then echo 'PODMAN_BUILD?=0' > .config fi echo "==> Applying Red Bear OS patches..." if [ -f local/scripts/apply-patches.sh ]; then bash local/scripts/apply-patches.sh fi echo "==> Building cookbook..." cargo build --release if [ "$(id -u)" -ne 0 ] && command -v fakeroot >/dev/null 2>&1; then echo "==> Rootless build detected; using fakeroot redox_installer wrapper" MAKE_ENV+=("INSTALLER=fakeroot build/fstools/bin/redox_installer") fi echo "==> Building Red Bear OS ($CONFIG_NAME, $ARCH)..." if [ "$ALLOW_UPSTREAM" -eq 1 ]; then echo "==> Upstream recipe refresh: enabled" REPO_OFFLINE=0 COOKBOOK_OFFLINE=false CI=1 make "${MAKE_ENV[@]}" all "CONFIG_NAME=$CONFIG_NAME" ARCH="$ARCH" else echo "==> Upstream recipe refresh: disabled (pass --upstream to enable)" REPO_OFFLINE=1 COOKBOOK_OFFLINE=true CI=1 make "${MAKE_ENV[@]}" all "CONFIG_NAME=$CONFIG_NAME" ARCH="$ARCH" fi echo "==> Build complete." fi BUILD_DIR="build/$ARCH/$CONFIG_NAME" if [ ! -f "$BUILD_DIR/harddrive.img" ]; then echo "ERROR: $BUILD_DIR/harddrive.img not found. Run with --build first." exit 1 fi echo "==> Launching Red Bear OS in QEMU ($CONFIG_NAME, $ARCH)..." echo "" exec make qemu "CONFIG_NAME=$CONFIG_NAME" ARCH="$ARCH" "${QEMU_EXTRA_ARGS[@]}"