10 KiB
10 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 versionreports 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.exereports 18.1.8, but the selected VS 2026-preview STL expects Clang 20 or newer; see DEBT-0014 before treatingwindows-clangcl-asanas a passing sanitizer gate. - Android arm64 headless configure/build passes through root CMake and the
platform-buildautomation wrapper forpp_foundation,pp_assets,pp_paint,pp_document,pp_renderer_api,pp_renderer_gl,pp_paint_renderer,pp_ui_core,pano_cli, and their current headless test binaries, including foundation event/logging/task queue coverage, PNG metadata and decode, PPI header/layout, settings document, document snapshot/per-layer-frame/move/duration/face-pixel coverage, paint brush/stroke/stroke-script coverage, renderer shader descriptor and OpenGL capability coverage, UI color parsing, and layout XML parse coverage. pano_cli inspect-imagereports PNG IHDR metadata as JSON and is covered bypano_cli_inspect_png_metadata_smokewith a tiny IHDR fixture.pano_cli inspect-projectreports validated PPI thumbnail/body byte layout, body summary fields, layer/frame descriptors, and dirty-face PNG payload metadata, and is covered bypano_cli_inspect_project_layout_smokewith a minimal PPI fixture.pp_assets_image_pixels_testsdecodes PNG payloads to RGBA8 and rejects corrupt image payloads.pp_document_ppi_import_testsattaches decoded PPI dirty-face payloads topp_documentlayer/frame storage and rejects payloads outside document layers.pano_cli load-projectcreates app_documentprojection with per-layer frame counts, durations, and decoded face-pixel payloads when present; the metadata-only minimal fixture remains covered bypano_cli_load_project_metadata_smoke.pano_cli create-documentsupports--framesand--frame-duration-msand is covered bypano_cli_create_animation_document_smoke.pano_cli simulate-strokeexposes the pure stroke sampler for scripted automation and is covered bypano_cli_simulate_stroke_smoke.pano_cli simulate-stroke-scriptloads a text stroke script fixture and is covered bypano_cli_simulate_stroke_script_smoke.panopainter_validate_shadersvalidates the current combined GLSL shader files for one vertex stage marker, one fragment stage marker, valid marker order, and existing relative includes.pp_renderer_apiowns the canonical PanoPainter shader catalog consumed by the legacy OpenGL app initialization path;pp_renderer_api_testsvalidates catalog size, key entries, duplicate rejection, and bad path rejection.pp_renderer_glowns headless OpenGL runtime capability detection consumed by the legacy app initialization path;pp_renderer_gl_capabilities_testsvalidates framebuffer fetch, map-buffer alignment, desktop GL float support, GLES float/half-float extensions, WebGL exclusion behavior, and the upload-type mapping used by legacyTexture2DandRTTcreation, plus the RGBA pixel-format mapping used byRTTtexture allocation. It also validates image channel-count to OpenGL texture format mapping, including invalid channel counts rejected byTexture2D::create(Image), RGBA8/RGBA32F readback formats, byte-count math, and PBO pixel-buffer target/usage/access mapping used byRTTandPBOreadbacks, and framebuffer status naming used byRTTandTexture2Ddiagnostics. It also owns the 2D texture target, framebuffer setup, readback format, mipmap target, and update component-type tokens used byTexture2D, plus cube-map binding and allocation face targets used byTextureCube. It also owns and validates framebuffer blit color mask and linear/nearest filters used byRTT::resizeandRTT::copy, plus the default linear clamp-to-edge render-target texture parameters, texture/renderbuffer targets, depth format, framebuffer targets, binding queries, attachment points, and completion status used byRTT::createand framebuffer bind/restore paths, plus RTT clear color/depth masks and color-write-mask query tokens.RTTno longer spells GL enum names directly. It also validates Shape index-type, fill/stroke primitive-mode, buffer target, static upload usage, and vertex attribute component/normalization mapping used by the legacy mesh draw path, plus the PanoPainter cube-face to OpenGL texture-target mapping used byTextureCube. It also owns and validates sampler wrap S/T/R, min/mag filter, and desktop border-color parameter mapping used by legacySampler. The PanoPainter shader attribute binding catalog, shader stage tokens, compile/link status queries, active-uniform count query, and matrix-uniform transpose token used by legacyShadercreation also live here.Shaderno longer spells GL enum names directly. It also owns the PanoPainter shader uniform catalog and legacy hash mapping used byShaderactive-uniform discovery and the uniform uniqueness check. App OpenGL initialization debug severity, debug output, GL info string, default depth/program-point/line-smooth state, blend factor/equation, and UI render-target RGBA8 format tokens are cataloged and tested here too.windows-msvc-vcpkg-headlessvalidates manifest install/configure/build/test for the current headless component matrix; see DEBT-0007 for remaining app and platform triplet migration.pp_ui_coreconsumes vcpkg tinyxml2 only whenPP_USE_VCPKG_TINYXML2=ONthrough 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.
LNK4099missingyuv.pdbfor retained libyuv binaries.LNK4098runtime library conflict from retained vendor binaries.
Platform-specific commands should be added here when verified locally.