#!/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 ***"