Cross-platform PS2 .psu save archive manager (wxWidgets)
  • C++ 93.6%
  • CMake 5.1%
  • C 1.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
techwritescode 6c4d371ebd
All checks were successful
Build / linux (push) Has been skipped
Build / windows (push) Successful in 1m35s
Set up the MSVC environment inline instead of via ilammy/msvc-dev-cmd
That action isn't available: this runner mirrors marketplace actions
through data.forgejo.org, which returned "Not found" for it. vswhere
+ vcvarsall.bat achieves the same PATH setup without depending on a
marketplace action.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-14 15:37:52 -05:00
.forgejo/workflows Set up the MSVC environment inline instead of via ilammy/msvc-dev-cmd 2026-09-14 15:37:52 -05:00
installer/windows Use Ninja instead of the Visual Studio generator for Windows builds 2026-09-14 15:36:44 -05:00
src Style-guide pass: dedupe extract-to-temp, fix stale comment, trim README 2026-09-14 13:11:18 -05:00
.gitignore Initial PSU Manager: core library, wxWidgets GUI, Windows shell integration 2026-09-14 12:25:46 -05:00
CMakeLists.txt Initial PSU Manager: core library, wxWidgets GUI, Windows shell integration 2026-09-14 12:25:46 -05:00
LICENSE Initial PSU Manager: core library, wxWidgets GUI, Windows shell integration 2026-09-14 12:25:46 -05:00
README.md Use Ninja instead of the Visual Studio generator for Windows builds 2026-09-14 15:36:44 -05:00

PSU Manager

Create and extract PlayStation 2 .psu save archives.

Project layout

Path What
src/core .psu read/write, no UI dependency. Unit-tested in src/core/tests.
src/gui The wxWidgets PSUManager executable (also handles CLI actions used by the Explorer verbs below).
src/cli Argument parsing for the Explorer-verb / file-association entry points.
src/platform/win/shellext The IExplorerCommand shell extension backing the "PSU Manager" context-menu flyout.
src/platform/linux .desktop and shared-mime-info files for file association.
installer/windows WiX v5 source producing the Windows .msi.

Building

Requires CMake 3.21+ and a C++17 compiler.

Windows

Uses the Ninja generator, which needs the MSVC toolchain on PATH - run from a "x64 Native Tools Command Prompt for VS" (or after calling vcvarsall.bat x64) rather than a plain shell.

vcpkg install wxwidgets:x64-windows
cmake -S . -B build -G Ninja -DCMAKE_TOOLCHAIN_FILE=<vcpkg-root>/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release
cmake --build build

Produces PSUManager.exe, PSUManagerShellExt.dll, and psu-core-tests.exe under build/src/*.

Linux

sudo apt install libwxgtk3.2-dev   # or the equivalent wxGTK 3.2 dev package for your distro
cmake -S . -B build
cmake --build build
cmake --install build --prefix /usr/local

The install step also registers the .desktop entry and application/x-ps2-save-psu mime type under the chosen prefix.

Tests

ctest --test-dir build --output-on-failure

Windows installer

cd installer/windows
dotnet tool install --global wix
wix build PSUManager.wxs -arch x64 -o PSUManager.msi ^
  -d PSUManagerExePath=..\..\build\src\gui\PSUManager.exe ^
  -d PSUManagerShellExtPath=..\..\build\src\platform\win\shellext\PSUManagerShellExt.dll ^
  -d RuntimeDir=..\..\build\src\gui

RuntimeDir must contain the wxWidgets/image-codec DLLs vcpkg copies next to PSUManager.exe at build time - if vcpkg's wxwidgets dependency set changes, re-run a Release build and update the RuntimeFiles components in PSUManager.wxs to match.

Known gaps

  • Linux packaging (.desktop/mime install, the AppImage/.deb/tarball release job) was written to spec but not exercised on an actual Linux machine or Forgejo runner.
  • Windows 11's default (non-"Show more options") context menu requires package identity (MSIX packaging or a registered sparse package) for a third-party entry to appear there - a platform requirement this project doesn't currently meet, so the "PSU Manager" flyout lives under "Show more options" like most classic Win32 tools.
  • "Open" extracts an entry to a temp file and launches it with the OS default handler, but doesn't watch for edits or offer to write changes back into the archive.