Remill uses a CMake superbuild pattern for dependency management instead of traditional package managers like vcpkg or Conan. The superbuild system is located in the dependencies/ directory.
The superbuild approach was chosen for several key reasons:
- Simplicity: Automating dependency compilation is easier for users
- Reproducibility: Pinned dependency versions ensure consistent builds across all environments
- Cross-Platform Consistency: Same build process works on Linux, macOS, and Windows
The superbuild uses CMake's ExternalProject module to:
- Download dependencies from source
- Build them in the correct order (respecting inter-dependencies)
- Install everything to a common prefix:
dependencies/install/as proper CMake packages - The main project then uses this prefix via
CMAKE_PREFIX_PATH
The superbuild can use an externally-provided LLVM instead of building its own:
cmake -S dependencies -B dependencies/build -DUSE_EXTERNAL_LLVM=ONThis is particularly useful for:
- macOS users with Homebrew LLVM
- Linux distributions with packaged LLVM
- CI/CD systems with pre-installed LLVM
To modify dependency versions, edit the corresponding .cmake file in dependencies/:
dependencies/llvm.cmake- LLVM version and configurationdependencies/xed.cmake- Intel XED configuration- Individual
simple_git()calls for Google libraries