summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt76
1 files changed, 42 insertions, 34 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e7de30d..f3eff28 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -109,6 +109,10 @@ target_include_directories(audio PUBLIC ${CORE_INCLUDES})
target_include_directories(3d PUBLIC ${CORE_INCLUDES})
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.
+
#-- - Tools Setup -- -
if (DEFINED ASSET_PACKER_PATH)
set(ASSET_PACKER_CMD ${ASSET_PACKER_PATH})
@@ -184,6 +188,17 @@ function(pack_test_assets NAME INPUT_TXT HEADER_VAR DATA_CC_VAR TARGET_NAME)
add_custom_target(${TARGET_NAME} DEPENDS ${OUT_H} ${OUT_CC})
endfunction()
+#-- - Build Macros -- -
+macro(add_demo_executable NAME)
+ add_executable(${NAME} ${ARGN})
+ # target_link_libraries must be called manually to ensure correct order
+endmacro()
+
+macro(add_demo_test NAME TEST_NAME)
+ add_executable(${NAME} ${ARGN})
+ add_test(NAME ${TEST_NAME} COMMAND ${NAME})
+endmacro()
+
#-- - Generation Targets -- -
set(DEMO_SEQ_PATH ${CMAKE_CURRENT_SOURCE_DIR}/assets/demo.seq)
set(GENERATED_TIMELINE_CC ${CMAKE_CURRENT_SOURCE_DIR}/src/generated/timeline.cc)
@@ -211,10 +226,12 @@ add_custom_target(generate_tracker_music ALL DEPENDS ${GENERATED_MUSIC_DATA_CC})
pack_assets(assets ${CMAKE_CURRENT_SOURCE_DIR}/assets/final/demo_assets.txt GEN_DEMO_H GEN_DEMO_CC generate_demo_assets)
pack_test_assets(test_assets ${CMAKE_CURRENT_SOURCE_DIR}/assets/final/test_assets_list.txt GEN_TEST_H GEN_TEST_CC generate_test_assets)
-#-- - Main Demo -- -
-add_executable(demo64k src/main.cc ${PLATFORM_SOURCES} ${GEN_DEMO_CC} ${GENERATED_TIMELINE_CC} ${GENERATED_MUSIC_DATA_CC})
+#-- - Main Demo -- -
+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)
-target_link_libraries(demo64k PRIVATE gpu 3d audio procedural util ${DEMO_LIBS})
+# Link order: Internal libs first, then external libs (DEMO_LIBS).
+# gpu and 3d depend on WGPU (in DEMO_LIBS).
+target_link_libraries(demo64k PRIVATE 3d gpu audio procedural util ${DEMO_LIBS})
#Size optimizations
if (DEMO_SIZE_OPT)
@@ -233,63 +250,54 @@ endif()
#-- - Tests -- -
enable_testing()
if(DEMO_BUILD_TESTS)
- add_executable(test_window src/tests/test_window.cc)
- target_link_libraries(test_window PRIVATE audio)
- add_test(NAME HammingWindowTest COMMAND test_window)
+ add_demo_test(test_window HammingWindowTest src/tests/test_window.cc)
+ target_link_libraries(test_window PRIVATE audio ${DEMO_LIBS})
- add_executable(test_maths src/tests/test_maths.cc)
- add_test(NAME MathUtilsTest COMMAND test_maths)
+ add_demo_test(test_maths MathUtilsTest src/tests/test_maths.cc)
- add_executable(test_synth src/tests/test_synth.cc)
- target_link_libraries(test_synth PRIVATE audio)
- add_test(NAME SynthEngineTest COMMAND test_synth)
+ add_demo_test(test_synth SynthEngineTest src/tests/test_synth.cc)
+ target_link_libraries(test_synth PRIVATE audio ${DEMO_LIBS})
- add_executable(test_tracker src/tests/test_tracker.cc ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC})
+ add_demo_test(test_tracker TrackerSystemTest src/tests/test_tracker.cc ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC})
target_link_libraries(test_tracker PRIVATE audio util procedural ${DEMO_LIBS})
add_dependencies(test_tracker generate_tracker_music)
- add_test(NAME TrackerSystemTest COMMAND test_tracker)
- add_executable(test_spectool src/tests/test_spectool.cc ${PLATFORM_SOURCES} ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC})
+ add_demo_executable(test_spectool src/tests/test_spectool.cc ${PLATFORM_SOURCES} ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC})
target_compile_definitions(test_spectool PRIVATE DEMO_BUILD_TOOLS)
target_link_libraries(test_spectool PRIVATE audio util procedural ${DEMO_LIBS})
add_dependencies(test_spectool generate_tracker_music generate_demo_assets)
- add_executable(test_assets src/tests/test_assets.cc ${GEN_TEST_CC})
- target_link_libraries(test_assets PRIVATE util procedural)
+ add_demo_test(test_assets AssetManagerTest src/tests/test_assets.cc ${GEN_TEST_CC})
target_include_directories(test_assets PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src/generated_test)
target_compile_definitions(test_assets PRIVATE USE_TEST_ASSETS)
+ target_link_libraries(test_assets PRIVATE util procedural ${DEMO_LIBS})
add_dependencies(test_assets generate_test_assets)
set_source_files_properties(src/tests/test_assets.cc PROPERTIES COMPILE_DEFINITIONS "USE_TEST_ASSETS")
- add_test(NAME AssetManagerTest COMMAND test_assets)
- add_executable(test_sequence src/tests/test_sequence.cc ${GEN_DEMO_CC} ${GENERATED_TIMELINE_CC} ${PLATFORM_SOURCES})
- target_link_libraries(test_sequence PRIVATE gpu 3d util procedural ${DEMO_LIBS})
+ add_demo_test(test_sequence SequenceSystemTest src/tests/test_sequence.cc ${GEN_DEMO_CC} ${GENERATED_TIMELINE_CC} ${PLATFORM_SOURCES})
+ target_link_libraries(test_sequence PRIVATE 3d gpu util procedural ${DEMO_LIBS})
add_dependencies(test_sequence generate_timeline generate_demo_assets)
- add_test(NAME SequenceSystemTest COMMAND test_sequence)
- add_executable(test_procedural src/tests/test_procedural.cc)
- target_link_libraries(test_procedural PRIVATE procedural)
- add_test(NAME ProceduralGenTest COMMAND test_procedural)
+ add_demo_test(test_procedural ProceduralGenTest src/tests/test_procedural.cc)
+ target_link_libraries(test_procedural PRIVATE procedural ${DEMO_LIBS})
- add_executable(test_3d src/tests/test_3d.cc)
- add_test(NAME ThreeDSystemTest COMMAND test_3d)
+ add_demo_test(test_3d ThreeDSystemTest src/tests/test_3d.cc)
- add_executable(test_shader_composer src/tests/test_shader_composer.cc)
- target_link_libraries(test_shader_composer PRIVATE gpu)
- add_test(NAME ShaderComposerTest COMMAND test_shader_composer)
+ add_demo_test(test_shader_composer ShaderComposerTest src/tests/test_shader_composer.cc)
+ target_link_libraries(test_shader_composer PRIVATE gpu ${DEMO_LIBS})
- add_executable(test_texture_manager src/tests/test_texture_manager.cc ${PLATFORM_SOURCES} ${GENERATED_TIMELINE_CC} ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC})
- target_link_libraries(test_texture_manager PRIVATE gpu 3d audio procedural util ${DEMO_LIBS})
+ add_demo_executable(test_texture_manager src/tests/test_texture_manager.cc ${PLATFORM_SOURCES} ${GENERATED_TIMELINE_CC} ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC})
+ target_link_libraries(test_texture_manager PRIVATE 3d gpu audio procedural util ${DEMO_LIBS})
add_dependencies(test_texture_manager generate_timeline generate_demo_assets generate_tracker_music)
- add_executable(test_3d_render src/tests/test_3d_render.cc ${PLATFORM_SOURCES} ${GENERATED_TIMELINE_CC} ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC})
- target_link_libraries(test_3d_render PRIVATE gpu 3d audio procedural util ${DEMO_LIBS})
+ add_demo_executable(test_3d_render src/tests/test_3d_render.cc ${PLATFORM_SOURCES} ${GENERATED_TIMELINE_CC} ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC})
+ target_link_libraries(test_3d_render PRIVATE 3d gpu audio procedural util ${DEMO_LIBS})
add_dependencies(test_3d_render generate_timeline generate_demo_assets generate_tracker_music)
endif()
#-- - Extra Tools -- -
if(DEMO_BUILD_TOOLS OR DEMO_BUILD_TESTS)
- add_executable(spectool tools/spectool.cc ${PLATFORM_SOURCES} ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC})
+ add_demo_executable(spectool tools/spectool.cc ${PLATFORM_SOURCES} ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC})
target_compile_definitions(spectool PRIVATE DEMO_BUILD_TOOLS)
target_link_libraries(spectool PRIVATE audio util procedural ${DEMO_LIBS})
add_dependencies(spectool generate_tracker_music generate_demo_assets)
@@ -308,4 +316,4 @@ add_custom_target(final
add_custom_target(pack_source
COMMAND tar -czf demo_all.tgz --exclude=.git --exclude=build* --exclude=.gemini* --exclude=*.tgz --exclude=*.zip --exclude=.DS_Store .
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-)
+) \ No newline at end of file