Files
Horizon-OC-pro/build-exosphere.sh
niklascfw ff4fd37cdc
Some checks failed
Build Horizon OC Zeus / build (push) Failing after 3s
Fix exosphere build after checkout path rename.
Clean stale absolute dependency paths when the tree moved, and fail the script instead of copying an old binary.
2026-07-15 23:02:43 +02:00

69 lines
2.1 KiB
Bash
Executable File

#!/bin/sh
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
DIST_DIR="$ROOT_DIR/dist"
ATMOSPHERE_DIR="$ROOT_DIR/build/atmosphere"
ATMOSPHERE_URL="https://github.com/NaGaa95/Atmosphere-Pro.git"
ATMOSPHERE_BRANCH="boot-storage"
EXO_SRC="$ROOT_DIR/Source/Atmosphere-Patches"
EXO_DEST="$ATMOSPHERE_DIR/exosphere/program/source/smc"
LIBEXO_DEST="$ATMOSPHERE_DIR/libraries/libexosphere/include/exosphere/secmon"
EXO_OUT="$ATMOSPHERE_DIR/exosphere/out/nintendo_nx_arm64_armv8a/release/exosphere.bin"
if command -v nproc >/dev/null 2>&1; then
CORES="$(nproc --all)"
else
CORES="$(sysctl -n hw.ncpu)"
fi
echo "CORES: $CORES"
mkdir -p "$ROOT_DIR/build"
if [ ! -d "$ATMOSPHERE_DIR" ]; then
echo
echo "*** Cloning Atmosphere-Pro ***"
git clone --depth=1 --single-branch -b "$ATMOSPHERE_BRANCH" "$ATMOSPHERE_URL" "$ATMOSPHERE_DIR"
fi
echo
echo "*** Patching exosphere ***"
cp -v "$EXO_SRC/secmon_emc_access_table_data.inc" "$EXO_DEST/"
cp -v "$EXO_SRC/secmon_define_emc_access_table.inc" "$EXO_DEST/"
cp -v "$EXO_SRC/secmon_rtc_pmc_access_table_data.inc" "$EXO_DEST/"
cp -v "$EXO_SRC/secmon_define_rtc_pmc_access_table.inc" "$EXO_DEST/"
cp -v "$EXO_SRC/secmon_smc_register_access.cpp" "$EXO_DEST/"
cp -v "$EXO_SRC/secmon_smc_handler.cpp" "$EXO_DEST/"
cp -v "$EXO_SRC/secmon_memory_layout.hpp" "$LIBEXO_DEST/"
echo
echo "*** Compiling exosphere ***"
cd "$ATMOSPHERE_DIR/exosphere" || exit 1
# .d files store absolute source paths. If this checkout moved (e.g. renamed
# Horizon-OC -> Horizon-OC-pro), those deps point at a dead tree and make fails.
if grep -Rql --include='*.d' '/Desktop/Horizon-OC/' "$ATMOSPHERE_DIR" 2>/dev/null; then
echo "*** Cleaning stale build deps (old Horizon-OC absolute paths) ***"
make clean || true
fi
make -j"$CORES" || {
echo "*** Build failed ***" >&2
exit 1
}
cd "$ROOT_DIR" || exit 1
if [ ! -f "$EXO_OUT" ]; then
echo "*** Missing output: $EXO_OUT ***" >&2
exit 1
fi
mkdir -p "$DIST_DIR/atmosphere"
cp -v "$EXO_OUT" "$DIST_DIR/atmosphere/exosphere.bin"
echo
echo "*** Done: $EXO_OUT ***"
echo "*** Copied to: $DIST_DIR/atmosphere/exosphere.bin ***"