ReforgeIL is a fail-closed IL2CPP analysis and managed-code reconstruction pipeline. It joins immutable compact-v39 metadata, runtime registrations, PE data, and bounded x86-64 evidence before producing Managed IR, linked CIL, and independently verified assemblies.
The repository root contains the only maintained implementation. Historical
acceptance data lives under oracle/; it is evidence for corpus comparison,
not executable recovery code.
The implementation is split into real CMake domains:
formats + native
|
analysis -> ssa -> semantics
|
reconstruction
|
cil + assembly + verification
|
workflow
|
cli
Only workflow composes the domains. Reconstruction consumes resolved facts and keeps contradictions, exhausted budgets, and unsupported native behavior as explicit obligations.
See docs/ARCHITECTURE.md for ownership and dependency rules, and docs/STATUS.md for implemented capabilities and remaining acceptance work.
ReforgeIL requires CMake 3.20 or newer, Ninja, Python 3, and a C++20 compiler.
The Windows presets use the standalone LLVM-MinGW and Ninja installations
under out/tools/windows. Both presets also run incremental portability
analysis during compilation so GCC-sensitive narrowing and shadowing failures
are reported before the Linux CI build.
pwsh -File scripts/bootstrap_windows_toolchain.ps1
cmake --preset windows-release
cmake --build --preset windows-release
ctest --preset windows-releaseFor an iterative Debug build:
cmake --preset windows-debug
cmake --build --preset windows-debug
ctest --preset windows-debugcmake --preset release
cmake --build --preset release
ctest --preset releaseThe reforge-next executable exposes the current workflow:
reforge-next analyze --assembly <GameAssembly.dll>
--metadata <global-metadata.dat>
--run <directory>
reforge-next explain --run <directory>
--method <image>:<rid>
[--instruction-limit <count>]
reforge-next recover --run <directory>
--image <name>
--rid <rid>
--output <dll>
--policy complete
reforge-next campaign --run <directory>
--image <name>
--output <directory>
--workers <count>
[--instruction-limit <count>]
reforge-next verify --run <directory>
[--assembly <dll>]
Recovery emits only complete, proven methods. A successful build or one representative RID is not corpus-wide recovery evidence.
Read AGENTS.md, the nearest subtree AGENTS.md, and
docs/ARCHITECTURE.md before modifying a domain.
Feature families belong in explicit subdirectories, and focused tests should
link the smallest owning target.
The root quality gate checks ownership, file sizes, function sizes, parameter counts, complexity, and nesting:
ctest --test-dir out/build/release -R reforge_next_quality --output-on-failureSee CONTRIBUTING.md for the complete validation contract.