summaryrefslogtreecommitdiff
path: root/cmake/DemoSourceLists.cmake
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-11 08:19:05 +0100
committerskal <pascal.massimino@gmail.com>2026-02-11 08:19:05 +0100
commitfdf9345d5de1c951603e5da3ee8454e9efe2dc28 (patch)
treeee0dcf35de7d2800b20faf861cd70cb168d773f8 /cmake/DemoSourceLists.cmake
parent6d64674f7e3d00a9d18ec61eaf968ed37c8e849b (diff)
refactor: Modularize CMake build system into 10 specialized modules
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 <noreply@anthropic.com>
Diffstat (limited to 'cmake/DemoSourceLists.cmake')
-rw-r--r--cmake/DemoSourceLists.cmake57
1 files changed, 57 insertions, 0 deletions
diff --git a/cmake/DemoSourceLists.cmake b/cmake/DemoSourceLists.cmake
new file mode 100644
index 0000000..fc6b02d
--- /dev/null
+++ b/cmake/DemoSourceLists.cmake
@@ -0,0 +1,57 @@
+# Source File Lists
+# Conditional source file lists based on build mode
+
+# Audio sources (unconditional)
+set(AUDIO_SOURCES
+ src/audio/audio.cc
+ src/audio/ring_buffer.cc
+ src/audio/backend/miniaudio_backend.cc
+ src/audio/backend/wav_dump_backend.cc
+ src/audio/backend/silent_backend.cc
+ src/audio/gen.cc
+ src/audio/fdct.cc
+ src/audio/idct.cc
+ src/audio/fft.cc
+ src/audio/window.cc
+ src/audio/synth.cc
+ src/audio/tracker.cc
+ src/audio/spectrogram_resource_manager.cc
+ src/audio/audio_engine.cc
+ src/audio/spectral_brush.cc
+)
+
+# Procedural sources (unconditional)
+set(PROCEDURAL_SOURCES src/procedural/generator.cc)
+
+# Utility sources (unconditional)
+set(UTIL_SOURCES src/util/asset_manager.cc src/util/file_watcher.cc)
+
+# GPU sources (conditional: HEADLESS / STRIP_EXTERNAL / NORMAL)
+demo_set_conditional_sources(GPU_SOURCES
+ # Headless mode: Functional stubs (timeline/audio work)
+ "src/gpu/headless_gpu.cc;src/gpu/demo_effects.cc;src/gpu/effect.cc;src/gpu/effects/heptagon_effect.cc;src/gpu/effects/particles_effect.cc;src/gpu/effects/passthrough_effect.cc;src/gpu/effects/moving_ellipse_effect.cc;src/gpu/effects/particle_spray_effect.cc;src/gpu/effects/gaussian_blur_effect.cc;src/gpu/effects/solarize_effect.cc;src/gpu/effects/scene1_effect.cc;src/gpu/effects/chroma_aberration_effect.cc;src/gpu/effects/vignette_effect.cc;src/gpu/effects/cnn_effect.cc;src/gpu/effects/post_process_helper.cc;src/gpu/effects/shaders.cc;src/gpu/effects/hybrid_3d_effect.cc;src/gpu/effects/flash_cube_effect.cc;src/gpu/effects/theme_modulation_effect.cc;src/gpu/effects/fade_effect.cc;src/gpu/effects/flash_effect.cc;src/gpu/effects/shader_composer.cc;src/gpu/effects/circle_mask_effect.cc;src/gpu/effects/rotating_cube_effect.cc;src/gpu/texture_manager.cc;src/gpu/texture_readback.cc"
+ # Strip mode: Minimal GPU stubs only
+ "src/gpu/stub_gpu.cc"
+ # Normal mode: Full GPU implementation
+ "src/gpu/gpu.cc;src/gpu/effect.cc;src/gpu/effects/heptagon_effect.cc;src/gpu/effects/particles_effect.cc;src/gpu/effects/passthrough_effect.cc;src/gpu/effects/moving_ellipse_effect.cc;src/gpu/effects/particle_spray_effect.cc;src/gpu/effects/gaussian_blur_effect.cc;src/gpu/effects/solarize_effect.cc;src/gpu/effects/scene1_effect.cc;src/gpu/effects/chroma_aberration_effect.cc;src/gpu/effects/vignette_effect.cc;src/gpu/effects/cnn_effect.cc;src/gpu/effects/post_process_helper.cc;src/gpu/effects/shaders.cc;src/gpu/effects/hybrid_3d_effect.cc;src/gpu/effects/flash_cube_effect.cc;src/gpu/effects/theme_modulation_effect.cc;src/gpu/effects/fade_effect.cc;src/gpu/effects/flash_effect.cc;src/gpu/effects/shader_composer.cc;src/gpu/effects/circle_mask_effect.cc;src/gpu/effects/rotating_cube_effect.cc;src/gpu/texture_manager.cc;src/gpu/texture_readback.cc"
+)
+
+# 3D sources (conditional: HEADLESS / STRIP_EXTERNAL / NORMAL)
+demo_set_conditional_sources(3D_SOURCES
+ # Headless mode: Full 3D (needed for Hybrid3DEffect)
+ "src/3d/renderer.cc;src/3d/renderer_draw.cc;src/3d/renderer_pipelines.cc;src/3d/renderer_resources.cc;src/3d/visual_debug.cc;src/3d/bvh.cc;src/3d/physics.cc;src/3d/scene_loader.cc"
+ # Strip mode: Stub 3D (depends on WebGPU)
+ "src/3d/bvh.cc;src/3d/physics.cc;src/3d/scene_loader.cc"
+ # Normal mode: Full 3D implementation
+ "src/3d/renderer.cc;src/3d/renderer_draw.cc;src/3d/renderer_pipelines.cc;src/3d/renderer_resources.cc;src/3d/visual_debug.cc;src/3d/bvh.cc;src/3d/physics.cc;src/3d/scene_loader.cc"
+)
+
+# Platform sources (conditional: HEADLESS / STRIP_EXTERNAL / NORMAL)
+demo_set_conditional_sources(PLATFORM_SOURCES
+ # Headless mode: Headless platform stub
+ "src/platform/headless_platform.cc"
+ # Strip mode: Stub platform
+ "src/platform/stub_platform.cc"
+ # Normal mode: Full platform with GLFW
+ "src/platform/platform.cc;third_party/glfw3webgpu/glfw3webgpu.c"
+)