mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 02:11:36 -04:00
2bd2208c8b
psxrecomp_add_game_runtime() (added in #110) is unusable with PSX_RECOMP_UI=OFF and real generated game C linked — a documented, supported config ("PSX_RECOMP_UI OFF for headless/generated builds", BUILDING.md) that nothing currently exercises. Found while bringing up a new title with recomp-ui intentionally left out initially. Two independent breaks in that combination: 1. main.cpp calls psx_game_codegen_forward_if_built() from main() whenever PSX_HAS_GAME_CODEGEN is set (i.e. any time real game C is linked), but only *declares* it under the narrower RECOMP_LAUNCHER guard. Any no-launcher build with generated game C fails with "use of undeclared identifier". Introduced a precise PSX_HAS_CODEGEN_SETUP_HOST macro (set only when a codegen-setup host is actually linked) and re-guarded both the declaration and the call site on it instead of the mismatched pair of guards. 2. psxrecomp_codegen_host.c was unconditionally added to every game target's extras, but it unconditionally #includes recomp_launcher.h from the recomp-ui submodule. Any --no-recomp-ui build fails with "recomp_launcher.h file not found". Gated its inclusion on PSX_RECOMP_UI. Verification: - Built and ran a new title (headless: PSX_RECOMP_UI=OFF, real generated game C, no launcher) end to end: OpenBIOS -> game entry -> continuous gameplay, clean atexit shutdown, no crash. - Regression-checked the one existing title that actually calls psxrecomp_add_game_runtime() (TombaRecomp; every other shipped title calls the lower-level psxrecomp_add_runtime_target directly and never reaches this code): built TombaRecomp's real production config (PSX_RECOMP_UI=ON, ENABLE_SETUP_WIZARD, recomp-ui launcher, mod catalog, setup-host/no-disc mode) against this branch via -DPSXRECOMP_ROOT override, no submodule surgery. Clean build, ran to the launcher with no regressions. Both changes are conditionally gated on flags Tomba always sets the opposite way, so this is expected and was confirmed empirically, not just by inspection. Not covered by this PR: CMAKE_CXX_STANDARD 17 is also never inherited by a game repo that include()s runtime.cmake directly (as opposed to add_subdirectory()-ing runtime/CMakeLists.txt), which silently compiles text_xlate.cpp's std::filesystem usage against whatever the host compiler's default standard is. Six of seven other title repos work around this by setting it themselves; happy to send a follow-up if that's wanted here instead of per-repo.