Skip to content

Add CMake build system for PresentMon, IntelPresentMon, tools, test, and MSI packaging - #679

Open
markgalvan-intel wants to merge 1 commit into
mainfrom
feature/cm
Open

Add CMake build system for PresentMon, IntelPresentMon, tools, test, and MSI packaging#679
markgalvan-intel wants to merge 1 commit into
mainfrom
feature/cm

Conversation

@markgalvan-intel

@markgalvan-intel markgalvan-intel commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator

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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread IntelPresentMon/PresentMonAPI2Loader/Implementation.cpp
Comment thread Tests/PresentMonTests.cpp Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants