Files
panopainter/docs/modernization/build-inventory.md

6.9 KiB

Build And Platform Inventory

Status: live Last updated: 2026-06-01

This inventory records the known build surfaces during the CMake migration. Keep it updated as platform paths move to shared CMake targets.

Existing Build Entrypoints

Platform/Target Current Entrypoint Notes
Windows desktop Root CMakeLists.txt, preset windows-msvc-default; target preset windows-vs2026-x64 retained for VS 2026 Raw .sln/.vcxproj files removed on 2026-05-31; local machine currently uses Visual Studio 17 2022
Windows AppX PanoPainterPackage/Package.appxmanifest, .wapproj referenced by solution Distribution packaging
macOS PanoPainter-OSX/ project files and Info.plist Uses NSOpenGLView today
iOS PanoPainter/Info.plist, related Apple sources Uses OpenGL ES today
Android standard android/android/build.gradle, android/android/CMakeLists.txt Native library target native-lib
Android Quest android/quest/build.gradle, android/quest/CMakeLists.txt OVR SDK imported libraries
Android Focus/Wave android/focus/build.gradle, android/focus/CMakeLists.txt Wave SDK imported libraries
Linux linux/CMakeLists.txt Old CMake 3.4, C++14 flag
WebGL/Emscripten webgl/CMakeLists.txt Old CMake 3.4, WebGL2 flags

Existing Version Generation

  • Script: scripts/pre-build.py
  • Output: src/version.gen.h
  • Current behavior: derives version from git branch, latest tag, short hash, commit count, and configuration argument.
  • Migration requirement: root CMake should call this script through a custom command and avoid unnecessary tracked-file churn where possible.

Existing Dependency Sources

Hybrid policy: migrate reliable packages to vcpkg and retain SDK/patched dependencies until each platform triplet is proven.

Dependency Current Source Initial Policy
fmt libs/fmt Move to vcpkg
GLM libs/glm Move to vcpkg
tinyxml2 libs/tinyxml2 Move to vcpkg
stb libs/stb Move to vcpkg or interface target if package friction
CURL libs/curl-win, libs/curl-android-ios Move to vcpkg where triplets work
SQLite libs/sqlite3 Move to vcpkg
GLAD libs/glad Move to vcpkg or generated backend target
Catch2 none yet Add through vcpkg
OpenVR libs/openvr Retain initially
OVR Platform/Mobile libs/ovr_platform, libs/ovr_mobile Retain initially
Wave SDK libs/wave_sdk Retain initially
Wacom WinTab libs/wacom Retain initially
AppCenter Apple libs/appcenter-apple Retain initially
openh264/mp4v2/libyuv libs/openh264, libs/mp4v2, libs/libyuv Retain initially
jpeg helpers libs/jpeg Evaluate after image tests exist
poly2tri/nanort/base64/hash-library libs/* Evaluate after component split

Current Validation Commands

These commands are the current local baseline.

cmake --preset windows-msvc-default
cmake --build --preset windows-msvc-default --config Debug --target PanoPainter
ctest --preset desktop-fast --build-config Debug
powershell -ExecutionPolicy Bypass -File scripts\automation\test.ps1 -Preset desktop-fast -Configuration Debug
powershell -ExecutionPolicy Bypass -File scripts\automation\build.ps1 -Preset windows-msvc-default -Configuration Debug -Target pano_cli
cmake --build --preset windows-msvc-default --target panopainter_validate_shaders
powershell -ExecutionPolicy Bypass -File scripts\automation\analyze.ps1 -Preset windows-msvc-default -NoApp
$env:VCPKG_ROOT = "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\vcpkg"
cmake --preset windows-msvc-vcpkg-headless
powershell -ExecutionPolicy Bypass -File scripts\automation\platform-build.ps1 -Presets windows-msvc-vcpkg-headless
ctest --preset desktop-fast-vcpkg --build-config Debug
cmake --preset android-arm64
powershell -ExecutionPolicy Bypass -File scripts\automation\platform-build.ps1 -Presets android-arm64
powershell -ExecutionPolicy Bypass -File scripts\automation\package-smoke.ps1 -Preset windows-msvc-default -Configuration Debug
cmake --fresh --preset windows-clangcl-asan

Known local toolchain state:

  • CMake: 4.0.0-rc4
  • Local Visual Studio generator selected by CMake: Visual Studio 17 2022
  • Bundled vcpkg: C:\Program Files\Microsoft Visual Studio\2022\Community\VC\vcpkg (vcpkg version reports 2025-11-19)
  • Android SDK: C:\Users\omara\AppData\Local\Android\Sdk
  • Android NDK: C:\Users\omara\AppData\Local\Android\Sdk\ndk\29.0.14206865
  • clang-cl: C:\Program Files\LLVM\bin\clang-cl.exe reports 18.1.8, but the selected VS 2026-preview STL expects Clang 20 or newer; see DEBT-0014 before treating windows-clangcl-asan as a passing sanitizer gate.
  • Android arm64 headless configure/build passes through root CMake and the platform-build automation wrapper for pp_foundation, pp_assets, pp_paint, pp_document, pp_renderer_api, pp_paint_renderer, pp_ui_core, pano_cli, and their current headless test binaries, including foundation event/logging/task queue coverage, PNG metadata, PPI header/layout, settings document, document frame move/duration coverage, paint brush/stroke/stroke-script coverage, renderer shader descriptor coverage, UI color parsing, and layout XML parse coverage.
  • pano_cli inspect-image reports PNG IHDR metadata as JSON and is covered by pano_cli_inspect_png_metadata_smoke with a tiny IHDR fixture.
  • pano_cli inspect-project reports validated PPI thumbnail/body byte layout plus body summary fields, and is covered by pano_cli_inspect_project_layout_smoke with a minimal PPI fixture.
  • pano_cli create-document supports --frames and --frame-duration-ms and is covered by pano_cli_create_animation_document_smoke.
  • pano_cli simulate-stroke exposes the pure stroke sampler for scripted automation and is covered by pano_cli_simulate_stroke_smoke.
  • pano_cli simulate-stroke-script loads a text stroke script fixture and is covered by pano_cli_simulate_stroke_script_smoke.
  • panopainter_validate_shaders validates the current combined GLSL shader files for one vertex stage marker, one fragment stage marker, valid marker order, and existing relative includes.
  • windows-msvc-vcpkg-headless validates manifest install/configure/build/test for the current headless component matrix; see DEBT-0007 for remaining app and platform triplet migration.
  • pp_ui_core consumes vcpkg tinyxml2 only when PP_USE_VCPKG_TINYXML2=ON through the vcpkg preset; default and Android validation still use the retained vendored fallback tracked by DEBT-0012.

Known warnings after the current CMake app build:

  • Legacy code/vendor warnings under /W4.
  • Visual Studio vcpkg manifest warning because manifest mode is not enabled.
  • LNK4099 missing yuv.pdb for retained libyuv binaries.
  • LNK4098 runtime library conflict from retained vendor binaries.

Platform-specific commands should be added here when verified locally.