feat(launcher): build a Windows launcher exe with the icon

Merged
NO
5d ago
+70-13

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.
  • ExtractAssociatedIcon on the built exe returns the wave emblem.
  • Launch check: a copy beside a throwaway tools\launcher.ps1 that 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-tree and
    verify-archive — passed.
  • MSVC Debug ctest — 47/47 passed. clang/MinGW ctest — 45/45 passed.
  • Not run: a full ISO build through setup that produces Launcher.exe end 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.md and CONTRIBUTING.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.