69 lines
2.1 KiB
Bash
Executable File
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://git.niklascfw.de/OmniNX/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 ***"
|