Add CMake build system for PresentMon, IntelPresentMon, tools, test, and MSI packaging - #679
Open
markgalvan-intel wants to merge 1 commit into
Open
Add CMake build system for PresentMon, IntelPresentMon, tools, test, and MSI packaging#679markgalvan-intel wants to merge 1 commit into
markgalvan-intel wants to merge 1 commit into
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR introduces a CMake-based build system and supporting tooling to build PresentMon / IntelPresentMon components, developer tools, tests (CTest + VS test integration), and MSI/MSM packaging, while keeping legacy Visual Studio/MSBuild workflows functional during migration.
Changes:
- Add a top-level CMake build graph covering console/provider/service/UI, tools, and tests, plus shared configuration modules (vcpkg/toolchain/output/version/signing).
- Add Python build-orchestration utilities (CEF/web/auxdata/bootstrap/versioning/discovery/packaging/signing) and wire them into the CMake and MSBuild flows.
- Improve test ergonomics: attach runsettings by default, ensure pinned auxiliary ETL data, and register leaf tests with CTest.
Reviewed changes
Copilot reviewed 107 out of 114 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| Tools/Reflector/StructDumpers.h.scriban | Add Scriban template for dumpers |
| Tools/Reflector/Reflector.csproj | Add Reflector .NET project file |
| Tools/Reflector/Properties/launchSettings.json | Add Reflector launch settings |
| Tools/Reflector/Program.cs | Improve parsing perf + path discovery |
| Tools/Reflector/CMakeLists.txt | Add CMake wrapper targets for Reflector |
| Tools/pm_convert_csv/CMakeLists.txt | Add CMake target for pm_convert_csv |
| Tools/etw_list/CMakeLists.txt | Add CMake target for etw_list |
| Tools/ETLTrimmer/main.cpp | Fix includes for new folder layout |
| Tools/ETLTrimmer/ETLTrimmer.vcxproj.filters | Add filters file under Tools |
| Tools/ETLTrimmer/ETLTrimmer.vcxproj | Update props + project references paths |
| Tools/ETLTrimmer/ETLTrimmer.args.json | Add args presets for ETLTrimmer |
| Tools/ETLTrimmer/CMakeLists.txt | Add CMake target + ATL requirement |
| Tools/ETLTrimmer/CliOptions.h | Fix include path for CliFramework |
| Tools/ETLTrimmer/.gitignore | Ignore ETLTrimmer local artifacts |
| Tests/README.md | Document CMake/CTest testing workflow |
| Tests/PresentMonTests.vcxproj | Attach runsettings + ensure aux data |
| Tests/PresentMonTests.runsettings.template | Update template for new defaults |
| Tests/PresentMonTests.runsettings | Add default checked-in runsettings |
| Tests/PresentMonTests.generated.runsettings.in | Add CMake-generated runsettings template |
| Tests/PresentMonTests.cpp | Adjust arg parsing + gtest list mode |
| Tests/PresentMonTestData.targets | Add MSBuild target to ensure aux data |
| Tests/ensure-aux.ps1 | Add PS helper to validate/restore aux data |
| Tests/CMakeLists.txt | Add CMake target + gtest registration |
| Tests/auxdata.md | Update auxdata docs for CMake path |
| Scripts/web.py | Add CLI wrapper for web ops |
| Scripts/versioning.py | Add build-id generation tool (Python) |
| Scripts/sign.py | Add CLI wrapper for signing ops |
| Scripts/pmon/web.py | Implement npm ensure/build orchestration |
| Scripts/pmon/signing.py | Implement developer signing helper |
| Scripts/pmon/common.py | Add shared helpers (run, locks, atomic writes) |
| Scripts/pmon/auxdata.py | Implement auxdata validate/restore/ensure |
| Scripts/pmon/init.py | Introduce pmon helper package |
| Scripts/package.py | Add packaging preflight/verify/sign wrapper |
| Scripts/generate_etl_csv_tests.py | Generate API2 ETL CSV test methods |
| Scripts/discover_tests.py | Generate CTest entries from binaries |
| Scripts/cef.py | Add CEF restore/verify wrapper |
| Scripts/bootstrap.py | Add dependency bootstrap entrypoint |
| Scripts/auxdata.py | Add auxdata CLI wrapper |
| requirements.txt | Add placeholder requirements file |
| Reflector/Properties/launchSettings.json | Remove user-specific launch settings |
| Provider/CMakeLists.txt | Add provider CMake target |
| PresentMon/CMakeLists.txt | Add console CMake target |
| PresentMon.sln | Update solution paths/folders |
| PresentData/CMakeLists.txt | Add PresentData CMake target |
| IntelPresentMon/Versioning/scripts/pre-build.ps1 | Improve signature hashing robustness |
| IntelPresentMon/Versioning/CMakeLists.txt | Add versioning + build-id CMake targets |
| IntelPresentMon/UnitTests/UnitTests.vcxproj | Attach shared runsettings |
| IntelPresentMon/UnitTests/CMakeLists.txt | Add CMake UnitTests target |
| IntelPresentMon/ServiceMergeModule/ServiceMergeModule.wixproj | Support CMake packaging props + ICE suppression |
| IntelPresentMon/SampleClient/CMakeLists.txt | Add SampleClient CMake target |
| IntelPresentMon/PresentMonService/CMakeLists.txt | Add service/actions generation + staging rules |
| IntelPresentMon/PresentMonMiddleware/CMakeLists.txt | Add middleware CMake target |
| IntelPresentMon/PresentMonAPIWrapperCommon/CMakeLists.txt | Add wrapper-common CMake target |
| IntelPresentMon/PresentMonAPIWrapper/CMakeLists.txt | Add wrapper CMake target |
| IntelPresentMon/PresentMonAPI2Tests/PresentMonAPI2Tests.vcxproj | Attach runsettings + ensure aux data |
| IntelPresentMon/PresentMonAPI2Tests/CMakeLists.txt | Add API2 tests + codegen + deps |
| IntelPresentMon/PresentMonAPI2Loader/Implementation.cpp | Change loader logging-link failure behavior |
| IntelPresentMon/PresentMonAPI2Loader/CMakeLists.txt | Add loader CMake target |
| IntelPresentMon/PresentMonAPI2/CMakeLists.txt | Add API2 CMake target |
| IntelPresentMon/PmonCMakePackaging.wixproj.props | Add WiX prop bridge for CMake packaging |
| IntelPresentMon/PMInstallerLib/PMInstallerLib.wixproj | Add CMake packaging conditional paths |
| IntelPresentMon/PMInstaller/PresentMon.wxs | Add explicit-path mode + additional web font components |
| IntelPresentMon/PMInstaller/PMInstaller.wixproj | Add CMake packaging conditional wiring |
| IntelPresentMon/KernelProcess/KernelProcess.args.json | Adjust args preset content |
| IntelPresentMon/KernelProcess/CMakeLists.txt | Add KernelProcess CMake target + debugger args |
| IntelPresentMon/Interprocess/CMakeLists.txt | Add CMake interprocess target + EnumMetric gen |
| IntelPresentMon/Core/CMakeLists.txt | Add core CMake target |
| IntelPresentMon/ControlLib/CMakeLists.txt | Add control library CMake target |
| IntelPresentMon/CommonUtilities/win/WinAPI.h | Guard WIN32_LEAN_AND_MEAN/NOMINMAX defines |
| IntelPresentMon/CommonUtilities/Metrics.cmake | Add metrics library CMake fragment |
| IntelPresentMon/CommonUtilities/CMakeLists.txt | Add common utilities CMake target |
| IntelPresentMon/AppCef/webui.md | Update web UI docs for CMake workflow |
| IntelPresentMon/AppCef/web-dist-lock.json | Add lock for tracked dist outputs |
| IntelPresentMon/AppCef/source/winmain.cpp | Remove unused boost/process include |
| IntelPresentMon/AppCef/source/util/ThreadCompass.cpp | Normalize include path |
| IntelPresentMon/AppCef/source/util/IpcInvocationManager.h | Normalize include path |
| IntelPresentMon/AppCef/source/util/cact/CefExecutionContext.h | Normalize include path |
| IntelPresentMon/AppCef/source/util/ActionClientServer.cpp | Normalize include path |
| IntelPresentMon/AppCef/CMakeLists.txt | Add UI CMake target + dependencies |
| IntelPresentMon/AppCef/ceflock.md | Expand CEF lock docs (legacy + CMake) |
| IntelPresentMon/AppCef/Batch/validate-cef.ps1 | Add mode/stage selection + output validation |
| IntelPresentMon/AppCef/Batch/upgrade-cef.ps1 | Enforce archive/URI for lock upgrades + locking |
| IntelPresentMon/AppCef/Batch/pull-cef.ps1 | Add StageKind/toolchain args + stricter validation |
| IntelPresentMon/AppCef/Batch/cef-build-wrapper.ps1 | Rework wrapper build script w/ toolchain args |
| CMakeLists.txt | Add top-level CMake project configuration |
| cmake/PresentMonVersion.cmake | Add version parsing + generated version header |
| cmake/PresentMonVcpkg.cmake | Add toolset-qualified vcpkg integration |
| cmake/PresentMonUiPayload.cmake | Add UI payload build + staging rules |
| cmake/PresentMonUci.cmake | Add UCI detection + interface target |
| cmake/PresentMonSigningPreflight.cmake | Add signing preflight script |
| cmake/PresentMonShaders.cmake | Add fxc discovery + shader compilation targets |
| cmake/PresentMonPython.cmake | Add Python discovery + dependency bootstrap |
| cmake/PresentMonPackagingVerifyOutput.cmake | Add packaging output verification script |
| cmake/PresentMonPackagingPreflight.cmake | Add packaging environment/tooling preflight |
| cmake/PresentMonOutput.cmake | Centralize output dirs + arch tagging |
| cmake/PresentMonOptions.cmake | Add build-scope/deploy/test option matrix |
| cmake/PresentMonMessageCompiler.cmake | Add mc.exe manifest compilation helper |
| cmake/PresentMonGenerateEnumMetric.cmake | Add CMake wrapper for awk-based generation |
| cmake/PresentMonCppUnitTest.cmake | Locate/apply MS C++ Unit Test framework |
| cmake/PresentMonCompiler.cmake | Define shared compiler/link option targets |
| cmake/PresentMonCef.cmake | Add CEF stage + staging + imported targets |
| cmake/PresentMonAuxTestData.cmake | Add aux testdata ensure/restore targets |
| .gitignore | Update ignores for new layout/tools |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
markgalvan-intel
force-pushed
the
feature/cm
branch
from
August 26, 2026 18:19
93e4f98 to
e0cdd97
Compare
… and MSI packaging
markgalvan-intel
force-pushed
the
feature/cm
branch
from
August 27, 2026 19:41
e0cdd97 to
a4f8da7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds a CMake build path for PresentMon alongside the Visual Studio solution. Root and component CMakeLists.txt files cover the console app, PresentData, the ETW provider, Intel PresentMon (service, middleware, API, CEF UI, installer targets), and Tools/ (ETLTrimmer, Reflector, etw_list, pm_convert_csv). Shared cmake/ modules handle vcpkg, CEF/UI payloads, codegen, signing, and WiX/MSI packaging; Scripts/ supports bootstrap, versioning, packaging, and test discovery, with CTest wired to the updated test layout. BUILDING.md documents configure, build, test, sign, and package, including VS 2026. ETLTrimmer and Reflector live under Tools/ and build through CMake with the rest of the tree.