- C++ 49.7%
- C 31.6%
- LLVM 5.9%
- Ruby 4.7%
- Objective-C 3.5%
- Other 4.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
The previous commit edited the locked README after its lock was written, so the toolchain trust base reported content drift. |
||
| .claude | ||
| .codex/skills | ||
| .git-hooks-config | ||
| .githooks | ||
| build | ||
| docs | ||
| LICENSES | ||
| orig | ||
| src | ||
| tools | ||
| .gitattributes | ||
| .gitignore | ||
| AGENTS.md | ||
| Makefile | ||
| README.md | ||
| THIRD_PARTY_NOTICES.md | ||
League of Legends Mac Client Decompilation
A byte-matching decompilation of the League of Legends Mac game client (Patch 4.17, September 2014).
Project chat: Matrix room, or DM @riotzed:matrix.org.
What Is This
The goal is to reconstruct first-party Riot game code under src/Game/ in natural C++ that recompiles to a byte-perfect match against the original Mach-O i386 binary. The native game-tool compare command checks instruction encodings and reference bindings directly against that image, and production verification adds reached data, reference coverage, EH/LSDA metadata and private-helper obligations. The metrics reference defines these scopes.
Game reconstruction is the priority. Native delink and linking reconstruct the initialized image from original and compiled providers at fixed addresses; every Game obligation retains an explicit provider decision, and successful linking does not mean every function has been reconstructed. Imported libraries and repaired headers support the Game sources.
New source integration excludes Scaleform GFx 4.0.17, Wwise 2013.2.4828, FMOD Ex / Event / EventNet and NVIDIA Cg; existing source coverage for those dependencies is retained, and their unreconstructed code keeps its delinked original providers. The Scaleform base typeinfo (RefCountImpl, RefCountImplCore) is nevertheless a Game obligation: Game TUs must emit matching typeinfo from the Scaleform headers, so no external provider supplies it.
Source availability does not establish the exact historical revision or a matching Riot fork; vendored library provenance is listed in THIRD_PARTY_NOTICES.md. Whole-program initializer order and linked-image execution remain separate work; the project does not yet claim a playable reconstruction.
The progress page shows a dated snapshot of the Game milestone by default. External support and the whole binary have separate views and statistics; generated support is available within each view.
The binary ships with a matching DWARF dSYM containing function names, parameter types, struct layouts, source file paths and line numbers. The project skeleton was generated from this debug information.
| Game Version | 4.17.0.244 (September 2014) |
| Canonical source compiler | Clang 3.3 (i686-apple-darwin10); additional per-TU producer lanes are recorded in Make |
Compilation and scoring use an exact content-locked Linux toolchain, described in docs/toolchain-provenance.md.
This public tree includes original game/debug artifacts, vendor libraries, an Apple SDK and prebuilt tools. THIRD_PARTY_NOTICES.md lists these artifacts, their redistribution limits and the retained notices.
Building
The supported build host is Linux x86-64 with:
- Git LFS, which stores the dSYM; the post-commit hook fails without it.
- C and C++ compilers, CMake, OpenSSL Crypto and zlib development files, and LLVM development libraries for the native tools (the recorded core uses LLVM 20.1.2; the mimalloc allocator they link is vendored).
- For delink and link: the pinned linker built by
make hybrid-linker, which needs Git, clang-18 and network access;/usr/bin/llvm-readobj-20; and the image decoder built bybash tools/darwin32/decoder/build.sh, which needs exactly LLVM 20.1.2, CURL development files and network access. - Node.js for the Git date hook and the progress frontend.
- The Apple producers that compile the FreeType, Scaleform and TLSF units:
make apple-llvmgcc42andmake apple-llvmgcc42-cneed docker and curl;tools/apple-clang425/build.shneeds clang-18, Python 3.12 and a user-supplied Apple source archive. Their build scripts use jq. Until they are built,makecannot compile those units. - clang-18, lld, Python 3.12 and ripgrep for rebuilding the Clang 3.3 iteration producers with
tools/iteration-compiler/build.sh.
On a fresh clone, configure the anonymity hooks. The first run creates .git-hooks-config/bad-strings.txt and exits 1; add at least one private identifier to it and run it again:
make setup-hooks # configure the local anonymity wordlist
The game executable, matching dSYM and MacOSX10.6 SDK are content-locked inputs. make verify-inputs checks the installed original artifacts and toolchain. External-copy verification, artifact-free linking and native derivations are described in docs/artifact-setup.md.
make # Compile all source files
make report # Generate match report
make progress # Report + update progress page
make check # Rebuild reports, run the compiler differential, validate progress and the CLI reference
make pages # Progress + commit the page to the local pages branch
make doctor # Diagnose a broken build environment
The local outputs are build/report.json, build/verification.json, build/progress.json and docs/index.html; make check rewrites the first three. See the generated command reference and metric definitions.
Contributing
The repository does not yet have a license or inbound contribution agreement. Contributions are paused until that policy is resolved. Do not submit patches, third-party binaries, SDK files, captures or game assets. The progress page and docs/ remain available for local research.
Acknowledgments
- decomp.dev — inspiration for the progress treemap