diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-11 08:19:05 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-11 08:19:05 +0100 |
| commit | fdf9345d5de1c951603e5da3ee8454e9efe2dc28 (patch) | |
| tree | ee0dcf35de7d2800b20faf861cd70cb168d773f8 /cmake/DemoExecutables.cmake | |
| parent | 6d64674f7e3d00a9d18ec61eaf968ed37c8e849b (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/DemoExecutables.cmake')
| -rw-r--r-- | cmake/DemoExecutables.cmake | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/cmake/DemoExecutables.cmake b/cmake/DemoExecutables.cmake new file mode 100644 index 0000000..86b63da --- /dev/null +++ b/cmake/DemoExecutables.cmake @@ -0,0 +1,96 @@ +# Main Executables +# Defines demo64k and test_demo binary targets + +# ============================================================================= +# demo64k - Main Demo Executable +# ============================================================================= + +if(DEMO_STRIP_EXTERNAL_LIBS) + # Size measurement mode: Stub main, no timeline/music + add_demo_executable(demo64k src/stub_main.cc ${PLATFORM_SOURCES} ${GEN_DEMO_CC}) + add_dependencies(demo64k generate_demo_assets) +else() + # Normal mode: Full main with timeline and music + add_demo_executable(demo64k src/main.cc ${PLATFORM_SOURCES} ${GEN_DEMO_CC} ${GENERATED_TIMELINE_CC} ${GENERATED_MUSIC_DATA_CC}) + add_dependencies(demo64k generate_demo_assets generate_timeline generate_tracker_music) +endif() + +# Link libraries (use shared macro) +demo_link_libraries_ordered(demo64k) + +# Size optimizations (use shared macro) +demo_apply_size_optimizations(demo64k) + +# ============================================================================== +# Final Build Target (make final) +# ============================================================================== +# Convenience target for final production build with all stripping enabled +# Usage: make final +# This reconfigures CMake with FINAL_STRIP and rebuilds demo64k +# Note: Only create this target if we're NOT already in FINAL_STRIP mode + +if(NOT DEMO_FINAL_STRIP) + add_custom_target(final + COMMAND ${CMAKE_COMMAND} -E echo "Building FINAL production binary..." + COMMAND ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR} -DDEMO_FINAL_STRIP=ON -DDEMO_SIZE_OPT=ON + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target demo64k -j8 + COMMAND ${CMAKE_COMMAND} -E echo "" + COMMAND ${CMAKE_COMMAND} -E echo "Final build complete!" + COMMAND ${CMAKE_COMMAND} -E echo "Binary: ${CMAKE_BINARY_DIR}/demo64k" + COMMAND ls -lh ${CMAKE_BINARY_DIR}/demo64k + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Building final production binary with FINAL_STRIP" + ) +endif() + +# ============================================================================= +# test_demo - Audio/Visual Sync Tool +# ============================================================================= + +# Timeline generation +set(TEST_DEMO_SEQ_PATH ${CMAKE_CURRENT_SOURCE_DIR}/assets/test_demo.seq) +set(GENERATED_TEST_DEMO_TIMELINE_CC ${CMAKE_CURRENT_SOURCE_DIR}/src/generated/test_demo_timeline.cc) +add_custom_command( + OUTPUT ${GENERATED_TEST_DEMO_TIMELINE_CC} + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/src/generated + COMMAND ${SEQ_COMPILER_CMD} ${TEST_DEMO_SEQ_PATH} ${GENERATED_TEST_DEMO_TIMELINE_CC} + DEPENDS ${SEQ_COMPILER_DEPENDS} ${TEST_DEMO_SEQ_PATH} src/gpu/demo_effects.h + COMMENT "Compiling test_demo sequence..." +) +add_custom_target(generate_test_demo_timeline ALL DEPENDS ${GENERATED_TEST_DEMO_TIMELINE_CC}) + +# Music generation +set(TEST_DEMO_TRACK_PATH ${CMAKE_CURRENT_SOURCE_DIR}/assets/test_demo.track) +set(GENERATED_TEST_DEMO_MUSIC_CC ${CMAKE_CURRENT_SOURCE_DIR}/src/generated/test_demo_music.cc) +add_custom_command( + OUTPUT ${GENERATED_TEST_DEMO_MUSIC_CC} + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/src/generated + COMMAND ${TRACKER_COMPILER_FINAL_CMD} ${TEST_DEMO_TRACK_PATH} ${GENERATED_TEST_DEMO_MUSIC_CC} + DEPENDS ${TRACKER_COMPILER_FINAL_DEPENDS} ${TEST_DEMO_TRACK_PATH} tracker_compiler_host + COMMENT "Compiling test_demo music..." +) +add_custom_target(generate_test_demo_music ALL DEPENDS ${GENERATED_TEST_DEMO_MUSIC_CC}) + +# Mark test_demo generated files as GENERATED +set_source_files_properties(${GENERATED_TEST_DEMO_TIMELINE_CC} PROPERTIES GENERATED TRUE) +set_source_files_properties(${GENERATED_TEST_DEMO_MUSIC_CC} PROPERTIES GENERATED TRUE) + +# Build executable (uses main demo assets) +if(NOT DEMO_STRIP_EXTERNAL_LIBS) + add_demo_executable( + test_demo + src/test_demo.cc + ${PLATFORM_SOURCES} + ${GEN_DEMO_CC} + ${GENERATED_TEST_DEMO_TIMELINE_CC} + ${GENERATED_TEST_DEMO_MUSIC_CC} + ) + + add_dependencies(test_demo generate_demo_assets generate_test_demo_timeline generate_test_demo_music) + + # Link libraries (use shared macro) + demo_link_libraries_ordered(test_demo) + + # Size optimizations (use shared macro) + demo_apply_size_optimizations(test_demo) +endif() |
