From bd36eb26d73df0df015b532b0ea06c7fb4ef6493 Mon Sep 17 00:00:00 2001 From: Lightos1 <124387232+Lightos1@users.noreply.github.com> Date: Sat, 13 Jun 2026 23:51:29 +0200 Subject: [PATCH] improve build script --- .gitignore | 3 +- build.sh | 123 ++++++++++++++++++++++++++++++++++++++++--------- build_noexo.sh | 34 -------------- 3 files changed, 102 insertions(+), 58 deletions(-) delete mode 100644 build_noexo.sh diff --git a/.gitignore b/.gitignore index b9a1e65d..7bb98ff5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ build/ __pycache__/ build -*.dksh \ No newline at end of file +*.dksh +source/hekate diff --git a/build.sh b/build.sh index c00e1311..ed3a3f31 100644 --- a/build.sh +++ b/build.sh @@ -1,6 +1,44 @@ #!/bin/sh +EXT=0 +LDR_MAKE="nx_release" +NO_EXO=0 + +ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +DIST_DIR="$ROOT_DIR/dist" + +while [ $# -gt 0 ]; do + case "$1" in + --ext) + EXT=1 + ;; + --ldr=*) + LDR_MAKE="${1#*=}" + ;; + --no-exo) + NO_EXO=1 + ;; + *) + echo "Unknown option: $1" + exit 1 + ;; + esac + shift +done + +LDR_BUILD_PATH="${LDR_MAKE#nx_}" + +echo +if [ "$EXT" -eq 1 ]; then + echo "EXT = 1" +fi + +if [ "$NO_EXO" -eq 1 ]; then + echo "No_EXO = 1" +fi + CORES="$(nproc --all)" +echo "CORES: $CORES" SRC="Source/Atmosphere/stratosphere/loader/" DEST="build/stratosphere/loader/" @@ -12,36 +50,38 @@ echo "*** Patching loader ***" cp -vr "$SRC"/. "$DEST"/ echo -echo "*** Patching exosphere ***" -EXO_SRC="Source/Atmosphere-Patches" -EXO_DEST="build/exosphere/program/source/smc" -LIBEXO_DEST="build/libraries/libexosphere/include/exosphere/secmon" +if [ "$NO_EXO" -eq 0 ]; then + echo "*** Patching exosphere ***" + EXO_SRC="Source/Atmosphere-Patches" + EXO_DEST="build/exosphere/program/source/smc" + LIBEXO_DEST="build/libraries/libexosphere/include/exosphere/secmon" + + 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 +fi -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 "CORES: $CORES" -echo - echo "*** Compiling loader ***" cd build/stratosphere/loader || exit 1 -make -j$CORES -hactool -t kip1 out/nintendo_nx_arm64_armv8a/release/loader.kip --uncompress=hoc.kip +make -j$CORES "$LDR_MAKE" +hactool -t kip1 "out/nintendo_nx_arm64_armv8a/$LDR_BUILD_PATH/loader.kip" --uncompress=hoc.kip cd ../../../ # exit cp -v build/stratosphere/loader/hoc.kip dist/atmosphere/kips/hoc.kip -echo -echo "*** Compiling exosphere ***" -cd build/exosphere -make -j$CORES -cd ../../ -cp -v build/exosphere/out/nintendo_nx_arm64_armv8a/release/exosphere.bin dist/atmosphere/exosphere.bin +if [ "$NO_EXO" -eq 0 ]; then + echo + echo "*** Compiling exosphere ***" + cd build/exosphere + make -j$CORES + cd ../../ + cp -v build/exosphere/out/nintendo_nx_arm64_armv8a/release/exosphere.bin dist/atmosphere/exosphere.bin +fi cd Source/hoc-clk/ ./build.sh @@ -53,3 +93,40 @@ echo "*** Compiling horizon-oc-monitor ***" cd Source/Horizon-OC-Monitor/ make -j$CORES cp -v Horizon-OC-Monitor.ovl ../../dist/switch/.overlays/Horizon-OC-Monitor.ovl + +if [ "$EXT" -eq 1 ]; then + cd ../ + echo + echo "*** Extensions enabled ***" + + REPO_DIR="hekate" + REPO_URL="https://github.com/Horizon-OC/hekate.git" + + if [ ! -d "$REPO_DIR" ]; then + echo + echo "*** Cloning custom Hekate ***" + git clone "$REPO_URL" "$REPO_DIR" + fi + + cd hekate/ + echo + echo "*** Compiling custom Hekate ***" + make -j$CORES + echo + + mkdir -p "$DIST_DIR/bootloader/sys/" + cp -v output/nyx.bin ../../dist/bootloader/sys/nyx.bin +fi + +echo +echo "*** Packaging dist.zip ***" + +cd "$DIST_DIR" || exit 1 + +rm -f dist.zip + +zip -r dist.zip . >/dev/null + +echo "*** dist.zip created ***" + +cd "$ROOT_DIR" || exit 1 diff --git a/build_noexo.sh b/build_noexo.sh deleted file mode 100644 index be0446aa..00000000 --- a/build_noexo.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -CORES="$(nproc --all)" - -SRC="Source/Atmosphere/stratosphere/loader/" -DEST="build/stratosphere/loader/" -mkdir -p "dist/atmosphere/kips/" -mkdir -p "$DEST" - -echo -echo "*** Patching loader ***" -cp -vr "$SRC"/. "$DEST"/ -echo - -echo "CORES: $CORES" -echo - -echo "*** Compiling loader ***" -cd build/stratosphere/loader || exit 1 -make -j$CORES -hactool -t kip1 out/nintendo_nx_arm64_armv8a/release/loader.kip --uncompress=hoc.kip -cd ../../../ # exit -cp -v build/stratosphere/loader/hoc.kip dist/atmosphere/kips/hoc.kip - -cd Source/hoc-clk/ -./build.sh -cp -r dist/ ../../ - -cd ../../ - -echo "*** Compiling horizon-oc-monitor ***" -cd Source/Horizon-OC-Monitor/ -make -j$CORES -cp -v Horizon-OC-Monitor.ovl ../../dist/switch/.overlays/Horizon-OC-Monitor.ovl