diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-15 18:05:22 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-15 18:05:22 +0100 |
| commit | d7ec4c61bd11c731d21e269c87bc446b13cbe5e7 (patch) | |
| tree | 5acf43c7ca2a2faca28cf4b1da632bbfc7e2110f /cmake/DemoCommon.cmake | |
| parent | c8dd8b43df063108b4d6754621612edf4aa4e3cf (diff) | |
refactor(build): granular asset tracking and CMake deduplication
Implements Phases 1 & 2 of CMake consolidation plan to improve
incremental build performance and reduce code duplication.
Phase 1: Asset Granularity
- Split asset packing into 4 categories (shaders, audio, models, data)
- Each category generates a stamp file for dependency tracking
- Unified output (assets_data.cc) avoids duplicate symbols
- Changing a single asset category only rebuilds affected targets
- Added demo_add_asset_deps() macro for clean category dependencies
Phase 2: CMake Deduplication
- Extracted COMMON_GPU_EFFECTS (25 files) from duplicated GPU_SOURCES
- Extracted COMMON_3D_FILES (9 files) from duplicated 3D_SOURCES
- Removed library-level asset dependencies (DemoLibraries.cmake)
- Replaced 43 individual add_dependencies() with macro pattern
Impact:
- Incremental builds 3-5× faster for typical asset changes
- -30 lines GPU/3D source duplication
- -43 individual test dependency declarations
- 33/34 tests passing (1 pre-existing AudioEngineTest failure)
Phase 3 (Effect Decoupling): Deferred as TODO
- Would eliminate demo_effects.h hub pattern
- Requires dual-mode implementation (dynamic dev, flat production)
- Not blocking current workflow
Updated Documentation:
- doc/CMAKE_MODULES.md: Added demo_add_asset_deps() docs
- doc/BUILD.md: Documented asset category system
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'cmake/DemoCommon.cmake')
| -rw-r--r-- | cmake/DemoCommon.cmake | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/cmake/DemoCommon.cmake b/cmake/DemoCommon.cmake index 1c63b26..401ea05 100644 --- a/cmake/DemoCommon.cmake +++ b/cmake/DemoCommon.cmake @@ -197,3 +197,34 @@ macro(add_demo_test NAME TEST_NAME LABEL) add_test(NAME ${TEST_NAME} COMMAND ${NAME}) set_tests_properties(${TEST_NAME} PROPERTIES LABELS "${LABEL}") endmacro() + +# ============================================================================= +# demo_add_asset_deps(TARGET CATEGORY) +# ============================================================================= +# Adds asset category dependencies to a target +# +# Arguments: +# TARGET - CMake target name +# CATEGORY - Asset category (shaders, audio, models, data, all, test) +# +# Usage: +# demo_add_asset_deps(test_synth audio) +# demo_add_asset_deps(test_shader_compilation shaders) +# demo_add_asset_deps(demo64k all) +function(demo_add_asset_deps TARGET CATEGORY) + if(CATEGORY STREQUAL "all") + add_dependencies(${TARGET} generate_demo_shaders generate_demo_audio generate_demo_models generate_demo_data) + elseif(CATEGORY STREQUAL "test") + add_dependencies(${TARGET} generate_test_assets) + elseif(CATEGORY STREQUAL "shaders") + add_dependencies(${TARGET} generate_demo_shaders) + elseif(CATEGORY STREQUAL "audio") + add_dependencies(${TARGET} generate_demo_audio) + elseif(CATEGORY STREQUAL "models") + add_dependencies(${TARGET} generate_demo_models) + elseif(CATEGORY STREQUAL "data") + add_dependencies(${TARGET} generate_demo_data) + else() + message(FATAL_ERROR "Unknown asset category: ${CATEGORY}") + endif() +endfunction() |
