From fdf9345d5de1c951603e5da3ee8454e9efe2dc28 Mon Sep 17 00:00:00 2001 From: skal Date: Wed, 11 Feb 2026 08:19:05 +0100 Subject: refactor: Modularize CMake build system into 10 specialized modules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactor monolithic 866-line CMakeLists.txt into 54-line orchestrator + 10 modules: - DemoOptions.cmake - Build option declarations - DemoConfig.cmake - Option implications and platform detection - DemoCommon.cmake - Shared macros (conditional sources, size opts, linking) - DemoDependencies.cmake - External library discovery (WGPU, GLFW) - DemoSourceLists.cmake - Conditional source file lists - DemoLibraries.cmake - Subsystem library targets - DemoTools.cmake - Build tools (asset_packer, compilers) - DemoCodegen.cmake - Code generation (assets, timeline, music) - DemoExecutables.cmake - Main binaries (demo64k, test_demo) - DemoTests.cmake - Test infrastructure (36 tests) - Validation.cmake - Uniform buffer validation Benefits: - 94% reduction in main file size (866 → 54 lines) - Conditional module inclusion (tests only parsed if DEMO_BUILD_TESTS=ON) - Shared macros eliminate 200+ lines of repetition - Clear separation of concerns All 36 tests passing. All build modes verified. Documentation: Created doc/CMAKE_MODULES.md with module architecture. Co-Authored-By: Claude Sonnet 4.5 --- cmake/DemoLibraries.cmake | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 cmake/DemoLibraries.cmake (limited to 'cmake/DemoLibraries.cmake') diff --git a/cmake/DemoLibraries.cmake b/cmake/DemoLibraries.cmake new file mode 100644 index 0000000..3a2207a --- /dev/null +++ b/cmake/DemoLibraries.cmake @@ -0,0 +1,30 @@ +# Subsystem Library Targets +# Defines the 5 core static libraries + +# Utility library +add_library(util STATIC ${UTIL_SOURCES}) +add_dependencies(util generate_demo_assets generate_test_assets) +target_include_directories(util PUBLIC ${CORE_INCLUDES}) + +# Procedural generation library +add_library(procedural STATIC ${PROCEDURAL_SOURCES}) +target_include_directories(procedural PUBLIC ${CORE_INCLUDES}) + +# Audio synthesis and processing library +add_library(audio STATIC ${AUDIO_SOURCES}) +add_dependencies(audio generate_demo_assets) +target_include_directories(audio PUBLIC ${CORE_INCLUDES}) + +# 3D rendering library +add_library(3d STATIC ${3D_SOURCES}) +add_dependencies(3d generate_demo_assets) +target_include_directories(3d PUBLIC ${CORE_INCLUDES}) + +# GPU effects library +add_library(gpu STATIC ${GPU_SOURCES}) +add_dependencies(gpu generate_demo_assets) +target_include_directories(gpu PUBLIC ${CORE_INCLUDES}) + +# Note: Static libraries do not strictly need to link dependencies, +# but if they did, PRIVATE would propagate to the executable. +# We will link them in the executable to be explicit and avoid order issues. -- cgit v1.2.3