Skip to content

Build from source

The recompiled game code is generated from your own copy of Blur, so there is no build without the game files. Nothing game-derived goes into git.

Apple Silicon Mac, Xcode Command Line Tools, CMake, Ninja, Python 3, Go (server tests), Ghidra 12.1.4 and JDK 21. Set GHIDRA and JAVA_HOME if they aren’t in the default locations (tools/recomp/ghidra/discover.sh). A disc or ISO of Blur for PC (or an installed copy plus the disc for two runtime DLLs).

Terminal window
tools/recomp/build/from_game.sh modules /path/to/Blur.iso work/mods # extract + checksum the 5 game modules
tools/recomp/build/from_game.sh pcode work/mods work/pcode # Ghidra analysis, ~8 min
tools/recomp/build/from_game.sh gen work/pcode # -> work/recomp/m3/gen
python3 tools/app/make_icon.py work/mods/Blur.exe work/app/Blur.icns # optional app icon
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release [-DBLUR_ONLINE_KEY=<key>]
ninja -C build app # -> build/Blur Native.app
ctest --test-dir build

The pipeline stages are explained in The recomp pipeline. work/ and build/ are gitignored.

BLUR_DEV defaults to ON: debug flags (Debug and test flags), tests and tools are included. Releases pass -DBLUR_DEV=OFF. Without BLUR_ONLINE_KEY, online only works when the key is set at run time.

tools/ci/build_mac.sh builds the release .dmg; see CI and releases.

  • Emitter or discovery change: re-run from_game.sh gen (only changed shards are rewritten), then ninja.
  • Host or renderer change: ninja -C build is enough.
  • Several features at once: one git worktree each, symlinking work/ and traces/ from the main checkout. Regenerating recomp code from a worktree affects every checkout.