mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 00:10:56 +02:00
75cd28435c
Point launcher, fused build, docs, and gitignore at the relocated Switch port tree.
114 lines
3.3 KiB
Bash
Executable File
114 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Build fused gen1recomp Switch NRO (romfs game.love + nacp + icon).
|
|
#
|
|
# Usage: scripts/switch/build_fused.sh GAME_LOVE VERSION OUT_NRO
|
|
#
|
|
# Prefers native nacptool/elf2nro (PATH or $DEVKITPRO/tools/bin).
|
|
# Falls back to Docker using GEN1_DKP_IMAGE or scripts/switch/dkp-docker.image.
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
# shellcheck source=common.sh
|
|
. "$SCRIPT_DIR/common.sh"
|
|
|
|
LOVE_NX_TAG="11.5-nx1"
|
|
LOVE_NX_DIR="$ROOT/.bazinga/love-nx/$LOVE_NX_TAG"
|
|
LOVE_ELF="$LOVE_NX_DIR/love.elf"
|
|
ICON="$ROOT/ports/switch/assets/icon.jpg"
|
|
APP_NAME="gen1recomp"
|
|
APP_AUTHOR="bryanthaboi, port by andrewqsantos"
|
|
DKP_IMAGE_FILE="$ROOT/scripts/switch/dkp-docker.image"
|
|
|
|
GAME_LOVE="${1:-}"
|
|
VERSION="${2:-}"
|
|
OUT_NRO="${3:-}"
|
|
|
|
[ -n "$GAME_LOVE" ] && [ -n "$VERSION" ] && [ -n "$OUT_NRO" ] \
|
|
|| fail "usage: $0 GAME_LOVE VERSION OUT_NRO"
|
|
|
|
[ -f "$GAME_LOVE" ] || fail "missing game.love at $GAME_LOVE"
|
|
|
|
"$ROOT/scripts/switch/verify_love_nx.sh"
|
|
|
|
[ -f "$ICON" ] || fail "missing Switch icon at $ICON"
|
|
|
|
ensure_dkp_tools_path
|
|
|
|
resolve_dkp_image() {
|
|
if [ -n "${GEN1_DKP_IMAGE:-}" ]; then
|
|
printf '%s' "$GEN1_DKP_IMAGE"
|
|
return 0
|
|
fi
|
|
[ -f "$DKP_IMAGE_FILE" ] || fail "missing Docker image pin: $DKP_IMAGE_FILE"
|
|
local line
|
|
line="$(grep -v '^[[:space:]]*#' "$DKP_IMAGE_FILE" | grep -v '^[[:space:]]*$' | head -1 || true)"
|
|
[ -n "$line" ] || fail "empty Docker image pin: $DKP_IMAGE_FILE"
|
|
printf '%s' "$line"
|
|
}
|
|
|
|
run_fused_native() {
|
|
local work romfs_dir nacp
|
|
work="$(mktemp -d "${TMPDIR:-/tmp}/gen1recomp-fused.XXXXXX")"
|
|
# shellcheck disable=SC2064
|
|
trap "rm -rf '$work'" EXIT
|
|
|
|
romfs_dir="$work/romfs"
|
|
mkdir -p "$romfs_dir" "$(dirname "$OUT_NRO")"
|
|
cp "$GAME_LOVE" "$romfs_dir/game.love"
|
|
|
|
nacp="$work/control.nacp"
|
|
nacptool --create "$APP_NAME" "$APP_AUTHOR" "$VERSION" "$nacp"
|
|
|
|
say "building fused NRO with pinned love.elf (native)"
|
|
elf2nro "$LOVE_ELF" "$OUT_NRO" \
|
|
--icon="$ICON" \
|
|
--nacp="$nacp" \
|
|
--romfsdir="$romfs_dir"
|
|
}
|
|
|
|
run_fused_docker() {
|
|
local image stage out_dir out_base
|
|
image="$(resolve_dkp_image)"
|
|
command -v docker >/dev/null 2>&1 || fail_fused_toolchain
|
|
|
|
# Stage under ROOT so a single repo bind-mount covers love.elf, icon, and romfs.
|
|
stage="$ROOT/.bazinga/work/fused-docker-$$"
|
|
mkdir -p "$stage/romfs" "$(dirname "$OUT_NRO")"
|
|
cp "$GAME_LOVE" "$stage/romfs/game.love"
|
|
# shellcheck disable=SC2064
|
|
trap "rm -rf '$stage'" EXIT
|
|
|
|
out_dir="$(cd "$(dirname "$OUT_NRO")" && pwd)"
|
|
out_base="$(basename "$OUT_NRO")"
|
|
|
|
say "building fused NRO with pinned love.elf (Docker: $image)"
|
|
docker run --rm \
|
|
-v "$ROOT:/src:ro" \
|
|
-v "$stage:/work" \
|
|
-v "$out_dir:/out" \
|
|
-w /work \
|
|
"$image" \
|
|
bash -c "
|
|
set -euo pipefail
|
|
nacptool --create '$APP_NAME' '$APP_AUTHOR' '$VERSION' /work/control.nacp
|
|
elf2nro /src/.bazinga/love-nx/$LOVE_NX_TAG/love.elf /out/$out_base \
|
|
--icon=/src/ports/switch/assets/icon.jpg \
|
|
--nacp=/work/control.nacp \
|
|
--romfsdir=/work/romfs
|
|
"
|
|
}
|
|
|
|
if command -v nacptool >/dev/null 2>&1 && command -v elf2nro >/dev/null 2>&1; then
|
|
run_fused_native
|
|
elif command -v docker >/dev/null 2>&1; then
|
|
run_fused_docker
|
|
else
|
|
fail_fused_toolchain
|
|
fi
|
|
|
|
[ -f "$OUT_NRO" ] || fail "fused NRO was not produced at $OUT_NRO"
|
|
sha256_file "$OUT_NRO" > "${OUT_NRO}.sha256"
|
|
say "fused NRO: $OUT_NRO"
|
|
say "sha256: $(cat "${OUT_NRO}.sha256")"
|