diff options
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() |
