Skip to content

Building

Harrison edited this page Oct 2, 2026 · 1 revision

Building

Requirements

  • Your own dump of Mario Strikers Charged (USA) (Rev 1), R4QE01, as a disc image (ISO, RVZ, WBFS, WIA, CISO, GCZ, ...). An already-extracted folder works too. Only this version is supported; the build checks main.dol's SHA-256 and rejects anything else.
  • A 64-bit Windows 10/11, Linux or macOS 14+ (Apple Silicon) machine with a GPU that supports Direct3D 12, Vulkan or Metal.
  • About 10 GB of free disk space for the build.
  • The .NET 8 SDK, CMake 3.25+, Ninja, and Clang. Per-platform setup is below.

Note

Nobody here will tell you where to get the game. Dumping your own disc is on you, and links to game files won't be provided or tolerated.

Windows

The runtime builds with LLVM-MinGW Clang, not MSVC.

  1. Install the tools (from a terminal; or grab the installers from each project's site):

    winget install Microsoft.DotNet.SDK.8 Kitware.CMake Ninja-build.Ninja Git.Git
  2. Download the latest llvm-mingw-<version>-ucrt-x86_64.zip from mstorsjo/llvm-mingw releases, extract it (for example to C:\llvm-mingw), and put its bin folder first on your PATH, so that clang --version reports the target x86_64-w64-windows-gnu.

Linux (Debian/Ubuntu shown)

sudo apt install git clang lld cmake ninja-build pkg-config dotnet-sdk-8.0 \
  libasound2-dev libpulse-dev libpipewire-0.3-dev libx11-dev libxext-dev libxrandr-dev \
  libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev libxkbcommon-dev libdrm-dev \
  libgbm-dev libgl1-mesa-dev libegl1-mesa-dev libwayland-dev libdecor-0-dev libdbus-1-dev \
  libudev-dev libusb-1.0-0-dev

(dotnet-sdk-8.0 may need Microsoft's package feed on older distributions. Other distributions need the equivalent packages.)

macOS (Apple Silicon)

xcode-select --install
brew install cmake ninja

and the .NET 8 SDK installer (Arm64) from Microsoft.

Building the port

Clone the repository and run the build script:

git clone https://github.com/BlackAndBlue95/Strikers-WiiCompiled.git
cd Strikers-WiiCompiled
./build.sh

On Windows, double-click build.cmd in the repository folder (or run it from a terminal).

The script asks you to pick your disc image; that's the only input it needs. You can also pass it directly: ./build.sh "/path/to/game.wbfs" or build.cmd "C:\path\to\game.wbfs". A folder extracted with Dolphin works in place of an image.

The script:

  1. installs the game files into the app's data folder (see the table below), extracting a disc image with nodtool (downloaded once, pinned by version and checksum),
  2. checks and copies sys/main.dol to Assets/main.dol,
  3. builds the translator,
  4. statically translates the game code to C++ under generated/,
  5. compiles the runtime and translated code with CMake + Ninja + Clang into build-windows/, build-linux/ or build-macos/,
  6. points the runtime's Config.toml at the installed game files.

Like a WiiCompiled install, you don't need the original disc image or folder afterwards: the game reads its files from the data folder. (Keep your dump backed up somewhere if you ever want to reinstall.)

The first build takes a while (translation is a few minutes, and compiling the translated code and fetching the graphics dependencies can take much longer on slower machines). Logs for every step are written to the build folder. Later runs are incremental.

Then run build-<platform>/Strikers-WiiCompiled (Strikers-WiiCompiled.exe on Windows). The game files (Game/), config, saves and caches live in a MSCRecomp folder, separate from any Mario Kart Wii WiiCompiled install:

Platform Location
Windows %LOCALAPPDATA%\MSCRecomp
Linux $XDG_DATA_HOME/MSCRecomp (default ~/.local/share/MSCRecomp)
macOS ~/Library/Application Support/MSCRecomp

Important

The installed game files and everything the build produces (Assets/, generated/, build-*/) contain or are derived from the game, and the build output is gitignored. Don't commit it, upload it or share builds. Everyone builds from their own copy.

Developing

After changing only runtime code, ./build.sh --skip-translate (build.cmd -SkipTranslate) recompiles without retranslating. Adding or removing a PPC_NATIVE_OVERRIDE or PPC_NATIVE_WRAP needs a full run, because the translator scans runtime/src for them to decide which game functions to leave untranslated, or to keep but route through a wrapper.

Clone this wiki locally