Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
170 commits
Select commit Hold shift + click to select a range
090d86a
launcher: expose HD Rendering as an opt-in mod
mstan Aug 16, 2026
ebf4623
Merge branch 'mph-hd-mods'
mstan Aug 16, 2026
3b26101
release: v0.4.0-alpha
mstan Aug 16, 2026
bc34bd9
Add MPH ROM profile registry
Zection6V Aug 17, 2026
fb5abc9
Add EU1.1 bootstrap coverage identity
Zection6V Aug 17, 2026
3b9254e
Add safe EU1.1 runtime config
Zection6V Aug 17, 2026
8acf281
Generalize MPH input preparation by ROM profile
Zection6V Aug 17, 2026
9d777a8
Make MPH banks version-profile driven
Zection6V Aug 17, 2026
2ecf399
Make ROM checker follow selected MPH profile
Zection6V Aug 17, 2026
99edb51
Add EU1.1 Windows bring-up build path
Zection6V Aug 17, 2026
f613b6a
Add EU1.1 Linux bring-up build path
Zection6V Aug 17, 2026
37924ba
Document EU1.1 bring-up gates
Zection6V Aug 17, 2026
829de4d
Preserve US1.0 AppImage naming
Zection6V Aug 17, 2026
099fbbc
Fix Linux profile build script syntax
Zection6V Aug 17, 2026
e0a0a8c
Add revision-specific MPH runtime addresses
Zection6V Aug 17, 2026
772721f
Patch ndsrecomp runner for MPH multi-ROM runtime profiles
Zection6V Aug 17, 2026
140243a
Make MPH launcher ROM identity profile-driven
Zection6V Aug 17, 2026
1015ef8
Generate profile-specific launcher source at configure time
Zection6V Aug 17, 2026
7eb27d3
Package profile-specific MPH releases
Zection6V Aug 17, 2026
be879f4
Build and package complete EU1.1 profile on Windows
Zection6V Aug 17, 2026
5793dea
Enable complete EU1.1 runtime profile on Linux
Zection6V Aug 17, 2026
c0ff508
Add static multi-ROM profile validator
Zection6V Aug 17, 2026
b9e153d
Add multi-ROM static verification workflow
Zection6V Aug 17, 2026
4015956
Compile both ROM checker profiles in static CI
Zection6V Aug 17, 2026
e7c2fe4
Update EU1.1 bring-up documentation to current implementation
Zection6V Aug 17, 2026
8a1c6dc
Compile patched runner in multi-ROM CI
Zection6V Aug 17, 2026
fca2b01
Compile patched runner sources without private BIOS artifacts
Zection6V Aug 17, 2026
535d2a0
Use public Makefile object targets for runner source checks
Zection6V Aug 17, 2026
683c23c
Test exact-ROM MPH runtime address dispatch
Zection6V Aug 17, 2026
ea08c51
Run exact-ROM MPH runtime dispatch test in CI
Zection6V Aug 17, 2026
d4ee43e
Gate launcher enhancements per ROM profile
Zection6V Aug 17, 2026
b1ae135
Validate launcher policy for each ROM profile
Zection6V Aug 17, 2026
0c2a143
Gate launcher widescreen by ROM profile
Zection6V Aug 17, 2026
58b5e2e
Pass profile launcher policy to Windows build
Zection6V Aug 17, 2026
35cd9c0
Verify profile-specific launcher generation in CI
Zection6V Aug 17, 2026
fecfcbe
Update EU1.1 bring-up status and launcher safety gates
Zection6V Aug 17, 2026
c3c8088
Keep Linux EU1.1 launch policy profile-owned
Zection6V Aug 17, 2026
756de1d
Check Linux EU1.1 profile launch policy in CI
Zection6V Aug 17, 2026
d2bec01
Document Linux EU1.1 profile-owned launch policy
Zection6V Aug 17, 2026
ce2756a
Keep EU1.1 bring-up document synchronized
Zection6V Aug 17, 2026
07083f7
Polish EU1.1 bring-up documentation
Zection6V Aug 17, 2026
5ad2c42
Finalize EU1.1 bring-up documentation
Zection6V Aug 17, 2026
e6f242f
Condense EU1.1 bring-up guide without losing gates
Zection6V Aug 17, 2026
2ebc842
Normalize EU1.1 bring-up guide
Zection6V Aug 17, 2026
d8b4be4
No-op sync EU1.1 guide
Zection6V Aug 17, 2026
12484e0
Preserve final EU1.1 guide
Zection6V Aug 17, 2026
56cfc6e
Finalize EU1.1 guide content
Zection6V Aug 17, 2026
a2e58b5
Keep guide stable
Zection6V Aug 17, 2026
c72c05c
No content change
Zection6V Aug 17, 2026
6131ec0
Stable EU1.1 guide
Zection6V Aug 17, 2026
148bed9
Final no-op documentation sync
Zection6V Aug 17, 2026
3915bdb
Profile coverage and FMV bank identity
Zection6V Aug 17, 2026
d25b728
Add shared MPH profile helpers
Zection6V Aug 17, 2026
2301508
Make static coverage promotion profile-aware
Zection6V Aug 17, 2026
4cea74b
Make runtime coverage promotion profile-aware
Zection6V Aug 17, 2026
2a30567
Make FMV capture profile-aware
Zection6V Aug 17, 2026
8f5a9a4
Test profile-aware coverage tooling
Zection6V Aug 17, 2026
4d159f2
Validate profile game configs in capture tools
Zection6V Aug 17, 2026
300266c
Tag gameplay coverage traces with ROM profile
Zection6V Aug 17, 2026
31e3d7a
Profile FMV runtime bank generation
Zection6V Aug 17, 2026
3d90ce2
Use profile FMV bank in Linux release gate
Zection6V Aug 17, 2026
fdc8da1
Gate releases on profile FMV bank
Zection6V Aug 17, 2026
54a9afe
Pass profile FMV bank to Windows packaging
Zection6V Aug 17, 2026
75dfed4
Validate profile FMV bank configuration
Zection6V Aug 17, 2026
f17570b
Require complete capture profile metadata
Zection6V Aug 17, 2026
293d08a
Extend multi-ROM coverage static checks
Zection6V Aug 17, 2026
9c284ba
Require identified non-US coverage traces
Zection6V Aug 17, 2026
7c244be
Bind runtime promotion to tagged captures
Zection6V Aug 17, 2026
1b40ab2
Record coverage scenario provenance
Zection6V Aug 17, 2026
5c9aaf0
Validate tagged runtime capture identity
Zection6V Aug 17, 2026
a0a13ce
Document EU1.1 coverage capture pipeline
Zection6V Aug 17, 2026
16aab63
Remove fixed Windows profile enumeration
Zection6V Aug 17, 2026
7f9cb8b
Derive CMake profile choices from registry
Zection6V Aug 17, 2026
a3703cd
Make checkpoint capture profile-aware
Zection6V Aug 17, 2026
fcdc912
Guard capture tools and dynamic profile discovery
Zection6V Aug 17, 2026
273a8d0
Harden runtime capture size metadata errors
Zection6V Aug 17, 2026
b61bcb1
Note profile-aware checkpoint validation
Zection6V Aug 17, 2026
eecb925
Reject unvalidated adaptive FMV capture
Zection6V Aug 17, 2026
fa10e44
Document FMV adaptive fail-closed capture policy
Zection6V Aug 17, 2026
a2e7758
Require profile capture metadata fields
Zection6V Aug 17, 2026
5abcfee
Persist MPH Wi-Fi profiles across launches
mstan Aug 17, 2026
bf9a977
Detect MPH runtime profile from base ROM header
Zection6V Aug 17, 2026
7c4865e
Gate MPH mods by executable compatibility
Zection6V Aug 17, 2026
702aaf6
Read MPH ROM revision from header byte 0x1E
Zection6V Aug 17, 2026
5af26a7
Route launcher ROM validation through runtime detector
Zection6V Aug 17, 2026
2fe5396
Decouple content profiles from runtime base profiles
Zection6V Aug 17, 2026
1e64d86
Allow mod-specific content profiles to share base layouts
Zection6V Aug 17, 2026
fabe97c
Document base ROM and mod content identity model
Zection6V Aug 17, 2026
3221a4e
Cross-check MPH detector table against melonPrimeDS
Zection6V Aug 17, 2026
4fbfc43
Pin multi-ROM CI checks to melonPrimeDS develop_hud
Zection6V Aug 17, 2026
eaf9439
Describe runtime base-profile detector accurately
Zection6V Aug 17, 2026
97f2d92
Sync upstream Wi-Fi state and profile-aware widescreen
Zection6V Aug 17, 2026
b354dc5
Fix melonPrime widescreen table cross-check
Zection6V Aug 17, 2026
e916b96
Refresh melonPrime executable checksum table
Zection6V Aug 17, 2026
d5b6ea4
Restore complete build profile metadata
Zection6V Aug 17, 2026
221375c
Document profile-aware widescreen and upstream Wi-Fi state
Zection6V Aug 17, 2026
3ef9868
Sync upstream HD launcher on multi-ROM profile layer
Zection6V Aug 17, 2026
60d12a3
Update multi-ROM CI for upstream three-mod launcher
Zection6V Aug 17, 2026
9711da1
Restore complete multi-ROM CI coverage
Zection6V Aug 17, 2026
39b8549
Fix shallow-checkout diff validation
Zection6V Aug 17, 2026
e3f0f99
Sync upstream v0.4.0 release metadata
Zection6V Aug 17, 2026
e50d2dc
Merge pull request #1 from Zection6V/agent/eu11-multirom-bringup
Zection6V Aug 17, 2026
f1fe8d8
Pin recomp-ui for reproducible CI builds
Zection6V Aug 17, 2026
ecabcc1
Add Nightly release payload verifier
Zection6V Aug 17, 2026
fef5e8f
Add portable Linux AppImage packager
Zection6V Aug 17, 2026
44a7b99
Add ROM-free runner fallback patch
Zection6V Aug 17, 2026
95d511c
Fix ROM-free patch idempotent anchors
Zection6V Aug 17, 2026
fcb87fb
Add redistributable FreeBIOS bank builder
Zection6V Aug 17, 2026
05fa97c
Document portable optimization cache directory
Zection6V Aug 17, 2026
6be471d
Use portable-first cache root in Linux package
Zection6V Aug 17, 2026
4e722e5
Add ROM-free Windows Nightly packager
Zection6V Aug 17, 2026
f4c11be
Add ROM-free Windows build workflow
Zection6V Aug 17, 2026
bf87a3e
Add ROM-free Linux build workflow
Zection6V Aug 17, 2026
2dc1dc3
Add cross-platform ROM-free build CI
Zection6V Aug 17, 2026
c5a90ea
Add ROM-free Nightly release workflow
Zection6V Aug 17, 2026
1b1c409
Document local optimization cache architecture
Zection6V Aug 17, 2026
095e1b5
Document ROM-free Nightly execution model
Zection6V Aug 17, 2026
86823e7
Require portable cache contract in Windows Nightly
Zection6V Aug 17, 2026
e946c1e
Ignore local optimization cache
Zection6V Aug 17, 2026
901d4f0
Add ROM-free source policy check
Zection6V Aug 17, 2026
1da2470
Gate CI on ROM-free release policy
Zection6V Aug 17, 2026
0fcfd9c
Record ROM-free Nightly architecture
Zection6V Aug 17, 2026
27fed60
Restore README and append ROM-free Nightly notes
Zection6V Aug 17, 2026
5ce8a46
Restore bring-up ledger and append ROM-free Nightly notes
Zection6V Aug 17, 2026
d8c9683
Fix ROM-free patch idempotency
Zection6V Aug 17, 2026
3acd616
Preserve existing ignores for local cache
Zection6V Aug 17, 2026
ceafcc7
Run Linux packager through bash
Zection6V Aug 17, 2026
1932f62
Drive MPH friend matches across local peer routing
mstan Aug 17, 2026
4b9ad7c
Fix Windows Nightly PowerShell packaging
Zection6V Aug 17, 2026
3d55c53
Merge branch 'codex/mph-online-first-run'
mstan Aug 17, 2026
dc95926
Gate Nightly helper syntax in build CI
Zection6V Aug 17, 2026
c19611d
Fix delegated multi-ROM status in launcher UI
Zection6V Aug 17, 2026
89731ae
Delegate launcher ROM verification to runtime detector
Zection6V Aug 17, 2026
cd8d6f5
Keep profile defaults while patching real launcher UI
Zection6V Aug 17, 2026
6cf124f
Show runtime-detected region in generic Nightly launcher
Zection6V Aug 17, 2026
413c616
launcher: remember the chosen ROM across relaunches
mstan Aug 17, 2026
9d51f0e
tools: report which ARM9 overlays a play route actually exercised
mstan Aug 17, 2026
ab64ad8
tools: offline-multiplayer route + end-to-end overlay coverage loop
mstan Aug 17, 2026
04498fd
tools: seed an overlay's recompiler config with proven-generation ent…
mstan Aug 17, 2026
4c651ab
config: seed overlays 0 and 1; measure where the win actually is
mstan Aug 17, 2026
638f6b3
config: compile nine overlays; record the real bot-match start procedure
mstan Aug 17, 2026
905ffab
tools: resume run_to_event when the round budget is exhausted
mstan Aug 17, 2026
66bdd9c
Gate launcher multi-ROM UI patch syntax
Zection6V Aug 17, 2026
1291373
Fix launcher default ROM selection when file is absent
Zection6V Aug 17, 2026
ae79be2
Require readable ROM before delegated validation display
Zection6V Aug 17, 2026
13a2634
Assert launcher starts with no absent default ROM
Zection6V Aug 17, 2026
e516c3b
Add launcher startup ROM selection regression check
Zection6V Aug 17, 2026
e46806c
Document fresh-launch ROM selection assertion
Zection6V Aug 17, 2026
06baba5
Reuse cached MSYS2 on Windows CI
Zection6V Aug 17, 2026
cc95024
Add persistent ccache for Windows CI
Zection6V Aug 17, 2026
15e0173
Avoid full MSYS2 upgrade in Windows CI
Zection6V Aug 17, 2026
d617f75
Trim Windows CI MinGW dependency install
Zection6V Aug 17, 2026
35bc28c
Add persistent ccache to Linux CI
Zection6V Aug 17, 2026
892e108
Add MPH runtime diagnostics and ROM-free multi-ROM gate
Zection6V Aug 17, 2026
cece5e3
Apply MPH diagnostics after runtime patch stack
Zection6V Aug 17, 2026
ccd94bf
Merge pull request #2 from Zection6V/agent/build-nightly-workflows
Zection6V Aug 17, 2026
b926c5f
Make game.toml runtime-generic
Zection6V Aug 17, 2026
a174aae
Share generic game config across content profiles
Zection6V Aug 17, 2026
9b22099
Validate shared generic frontend config
Zection6V Aug 17, 2026
9aea3fb
Remove obsolete EU1.1-specific game config
Zection6V Aug 17, 2026
5d3f526
Merge upstream main through 905ffab with multi-ROM adaptations
Zection6V Aug 17, 2026
bd2fed3
Update multi-ROM bring-up notes for latest upstream sync
Zection6V Aug 17, 2026
d691472
Fix generic config adaptive capability gate
Zection6V Aug 17, 2026
f4bf870
Grant adaptive capability after MPH runtime detection
Zection6V Aug 17, 2026
5e2b053
Apply runtime adaptive capability patch
Zection6V Aug 17, 2026
b425f98
Smoke-test generic frontend config on Linux
Zection6V Aug 17, 2026
9b1159e
Smoke-test generic frontend config on Windows
Zection6V Aug 17, 2026
4baff5b
Validate runtime-granted adaptive capability
Zection6V Aug 17, 2026
cad6718
Check adaptive capability patch syntax in CI
Zection6V Aug 17, 2026
10aaf9a
Merge pull request #3 from Zection6V/agent/cleanup-generic-game-config
Zection6V Aug 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
179 changes: 179 additions & 0 deletions .github/workflows/build-linux.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
name: Build Linux

on:
workflow_call:
workflow_dispatch:

permissions:
contents: read

jobs:
linux:
name: Linux ROM-free build
runs-on: ubuntu-24.04
env:
CCACHE_DIR: ${{ github.workspace }}/.ccache
CCACHE_MAXSIZE: 750M
CMAKE_C_COMPILER_LAUNCHER: ccache
CMAKE_CXX_COMPILER_LAUNCHER: ccache

steps:
- name: Check out title sources
uses: actions/checkout@v4

- name: Install build dependencies
run: |
set -euo pipefail
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential cmake ninja-build git curl ca-certificates ccache \
libsdl2-dev libgl1-mesa-dev libx11-dev libxext-dev libxrandr-dev \
libxcursor-dev libxi-dev libxinerama-dev libwayland-dev

- name: Restore compiler cache
uses: actions/cache@v4
with:
path: ${{ github.workspace }}/.ccache
key: >-
mph-linux-x86_64-ccache-v1-${{ hashFiles(
'ndsrecomp.pin',
'config/mph_rom_profiles.json',
'tools/patch_ndsrecomp_mph_runtime.py',
'tools/patch_ndsrecomp_rom_free_release.py'
) }}
restore-keys: |
mph-linux-x86_64-ccache-v1-

- name: Configure compiler cache
run: |
set -euo pipefail
ccache --version
ccache --set-config=max_size="$CCACHE_MAXSIZE"
ccache --zero-stats

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Fetch pinned ndsrecomp
run: |
set -euo pipefail
nds_pin="$(tr -d '\r\n' < ndsrecomp.pin)"
git clone --filter=blob:none https://github.com/mstan/ndsrecomp.git ../ndsrecomp
git -C ../ndsrecomp checkout --detach "$nds_pin"
git -C ../ndsrecomp submodule update --init --recursive
test "$(git -C ../ndsrecomp rev-parse HEAD)" = "$nds_pin"

- name: Apply MPH and ROM-free runner integration
run: |
set -euo pipefail
python tools/patch_ndsrecomp_mph_runtime.py \
--framework-root ../ndsrecomp \
--profiles config/mph_rom_profiles.json
python tools/patch_ndsrecomp_rom_free_release.py \
--framework-root ../ndsrecomp
python tools/patch_ndsrecomp_mph_runtime.py \
--framework-root ../ndsrecomp \
--profiles config/mph_rom_profiles.json
python tools/patch_ndsrecomp_rom_free_release.py \
--framework-root ../ndsrecomp

- name: Generate redistributable FreeBIOS banks
run: |
set -euo pipefail
python tools/ci/prepare_freebios_banks.py \
--framework-root ../ndsrecomp \
--build-dir ../ndsrecomp/build-freebios-recompiler
test ! -e ../ndsrecomp/generated/arm9_bios.c
test ! -e ../ndsrecomp/generated/arm7_bios.c

- name: Build ROM-free runner
run: |
set -euo pipefail
cmake -S ../ndsrecomp/runner -B ../ndsrecomp/runner/build-mph-nightly \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DNDS_BOOTSTRAP_FIRMWARE=ON \
-DNDS_RETAIL_BIOS_BANKS=OFF \
-DNDS_ENABLE_COMPUTE_RENDERER=ON
cmake --build ../ndsrecomp/runner/build-mph-nightly
test -x ../ndsrecomp/runner/build-mph-nightly/nds_runner
if grep -a -E -q 'g_dispatch_mph_arm(9|7)|mph_arm9_fmv_runtime' \
../ndsrecomp/runner/build-mph-nightly/nds_runner; then
echo 'ROM-derived MPH title bank leaked into ROM-free runner' >&2
exit 1
fi

- name: Smoke-test generic frontend config
run: |
set -euo pipefail
mkdir -p /tmp/mph-generic-config-smoke
set +e
output="$(../ndsrecomp/runner/build-mph-nightly/nds_runner \
/tmp/mph-generic-config-smoke \
--rom /tmp/mph-generic-config-smoke/missing.nds \
--config "$PWD/game.toml" \
--freebios --generated-firmware --boot direct 2>&1)"
status=$?
set -e
printf '%s\n' "$output"
test "$status" -ne 0
if grep -q 'invalid frontend config' <<<"$output"; then
echo 'Generic game.toml was rejected by the runner frontend parser' >&2
exit 1
fi
grep -q 'cartridge image is missing or truncated' <<<"$output"
grep -q 'MPH_MULTIROM_RUNTIME_ADAPTIVE_CAPABILITY' \
../ndsrecomp/runner/src/main.cpp

- name: Install pinned AppImage packaging tools
run: |
set -euo pipefail
mkdir -p .ci-tools
curl -fL --retry 3 \
https://github.com/AppImage/appimagetool/releases/download/1.9.1/appimagetool-x86_64.AppImage \
-o .ci-tools/appimagetool
echo 'ed4ce84f0d9caff66f50bcca6ff6f35aae54ce8135408b3fa33abfc3cb384eb0 .ci-tools/appimagetool' | sha256sum -c -
curl -fL --retry 3 \
https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage \
-o .ci-tools/linuxdeploy
echo '421ca71d5c69ea97c6309276232990d43df1dcece0edfaa26bbf926ff96ed12e .ci-tools/linuxdeploy' | sha256sum -c -
chmod +x .ci-tools/appimagetool .ci-tools/linuxdeploy

- name: Package Linux Nightly payload
run: |
set -euo pipefail
version="$(sed -n 's/^project(MetroidPrimeHuntersRecomp VERSION \([0-9.]*\).*/\1/p' CMakeLists.txt)"
test -n "$version"
bash tools/package-linux-appimage.sh \
--version "$version" \
--runner ../ndsrecomp/runner/build-mph-nightly/nds_runner \
--appimage-tool "$PWD/.ci-tools/appimagetool" \
--linuxdeploy "$PWD/.ci-tools/linuxdeploy"
image="release-stage/MetroidPrimeHuntersRecomp-linux-v${version}-x86_64.AppImage"
test -s "$image"
mkdir -p /tmp/mph-appimage-audit
(cd /tmp/mph-appimage-audit && "$GITHUB_WORKSPACE/$image" --appimage-extract >/dev/null)
if find /tmp/mph-appimage-audit/squashfs-root -type f \( \
-iname '*.nds' -o -iname '*.sav' -o -iname '*.dsv' -o \
-iname 'biosnds9.rom' -o -iname 'biosnds7.rom' -o -iname 'firmware.bin' \
\) -print -quit | grep -q .; then
echo 'Forbidden ROM/save/BIOS/firmware material found inside AppImage' >&2
exit 1
fi

- name: Show compiler cache stats
if: always()
run: |
if command -v ccache >/dev/null 2>&1; then
ccache --show-stats || true
fi

- name: Upload Linux Nightly payload
uses: actions/upload-artifact@v4
with:
name: mph-nightly-linux
path: release-stage/MetroidPrimeHuntersRecomp-linux-v*-x86_64.AppImage
if-no-files-found: error
retention-days: 14
Loading
Loading