summaryrefslogtreecommitdiff
path: root/cmake/DemoExecutables.cmake
blob: 86b63dadd9865d0c7a987e10f548b3276e3cd68c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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()