feat(launcher): build a Windows launcher exe with the icon
Summary
On Windows the launcher was a batch file that started a PowerShell script, so
Explorer and the taskbar showed the generic batch icon. Setup now also builds
Launcher.exe beside Launcher.cmd.
tools/launcher_windows.c is a small Win32 entry point: it resolves its own
folder and starts powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File tools\launcher.ps1, then exits. It builds as a
GUI-subsystem binary, so no console appears. The launcher window, saved
settings, and Play button are unchanged.
CMake builds recomp_launcher whenever private/doaxbv.ico is available and
embeds it, so the file carries the game icon. build_game.py adds that target
and copies recomp_launcher.exe to Launcher.exe in the install folder.
Launcher.cmd stays as the entry point for a copy without a build.
The icon becomes automatic once #150 lands, which extracts private/doaxbv.ico
from the player's own disc during setup. Until then the exe uses that file when
present and builds without an icon otherwise.
Verification
- MSVC Debug and clang/MinGW both build the launcher. Both resulting exes are
PE32+ with subsystem 2 (Windows GUI), so no console window appears. ExtractAssociatedIconon the built exe returns the wave emblem.- Launch check: a copy beside a throwaway
tools\launcher.ps1that wrote a
marker resolved its own folder and ran that script. The real copy opened the
DOAXBV window and closing it ended the process, from both compilers' builds. python -m unittest discover -s tools -p "test_*.py"— 65 tests OK, 1 skipped.python tools/public_export.py verify --require-public-treeand
verify-archive— passed.- MSVC Debug
ctest— 47/47 passed. clang/MinGWctest— 45/45 passed. - Not run: a full ISO build through setup that produces
Launcher.exeend to
end. The copy step is the same one that already places the runner, and the
exe itself was built and launched directly by both compilers here.
Contribution checklist
- The change follows
AGENTS.mdandCONTRIBUTING.md. - No XBE, generated game C, retail instruction bytes, extracted assets or
filenames, saves, BIOS data, private paths, or run evidence are included. - Third-party material and its license are identified, if applicable.