diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-03 09:19:16 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-03 09:19:16 +0100 |
| commit | 04e1c8800f81d7f01e7f52546c75fc39779f72ae (patch) | |
| tree | e3a6adc0e5b647f636d99312ff24f0cb58eed9d4 /CMakeLists.txt | |
| parent | 249ee6e8de55b2313c86299d66b1d51abcaec130 (diff) | |
refactor(build): Modularize build system with static libraries
Completed the first part of Task #25. Created static libraries for each subsystem (audio, gpu, 3d, util, procedural) and refactored all executables to link against them. This improves modularity and simplifies the build process. Also fixed linker errors related to glfw, wgpu, and miniaudio.
Diffstat (limited to 'CMakeLists.txt')
| -rw-r--r-- | CMakeLists.txt | 92 |
1 files changed, 56 insertions, 36 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 16f6451..e7de30d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ project(demo64k LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -#-- - Configuration Options -- - +#-- - Configuration Options -- - option(DEMO_SIZE_OPT "Enable size optimization flags" OFF) option(DEMO_STRIP_ALL "Strip all unnecessary code for final build" OFF) option(DEMO_BUILD_TESTS "Build tests" OFF) @@ -23,7 +23,7 @@ if (DEMO_STRIP_ALL) set(DEMO_SIZE_OPT ON) endif() -#-- - Platform Detection and Core Setup -- - +#-- - Platform Detection and Core Setup -- - if(APPLE) add_definitions(-DGLFW_EXPOSE_NATIVE_COCOA) elseif(WIN32) @@ -36,7 +36,7 @@ elseif(UNIX) endif() endif() -#-- - Dependencies & Includes -- - +#-- - Dependencies & Includes -- - set(CORE_INCLUDES src third_party) if (DEMO_CROSS_COMPILE_WIN32) @@ -68,7 +68,7 @@ elseif (NOT DEMO_CROSS_COMPILE_WIN32) list(APPEND DEMO_LIBS pthread m dl) endif() -#-- - Source Groups -- - +#-- - Source Groups -- - set(AUDIO_SOURCES src/audio/audio.cc src/audio/gen.cc src/audio/fdct.cc src/audio/idct.cc src/audio/window.cc src/audio/synth.cc src/audio/tracker.cc) set(PROCEDURAL_SOURCES src/procedural/generator.cc) set(GPU_SOURCES @@ -88,17 +88,34 @@ set(GPU_SOURCES src/gpu/effects/hybrid_3d_effect.cc src/gpu/effects/shader_composer.cc src/gpu/texture_manager.cc +) +set(3D_SOURCES src/3d/renderer.cc src/3d/visual_debug.cc ) set(PLATFORM_SOURCES src/platform.cc third_party/glfw3webgpu/glfw3webgpu.c) +set(UTIL_SOURCES src/util/asset_manager.cc) + +#-- - Subsystem Libraries -- - +add_library(util STATIC ${UTIL_SOURCES}) +add_library(procedural STATIC ${PROCEDURAL_SOURCES}) +add_library(audio STATIC ${AUDIO_SOURCES}) +add_library(3d STATIC ${3D_SOURCES}) +add_library(gpu STATIC ${GPU_SOURCES}) + +target_include_directories(util PUBLIC ${CORE_INCLUDES}) +target_include_directories(procedural PUBLIC ${CORE_INCLUDES}) +target_include_directories(audio PUBLIC ${CORE_INCLUDES}) +target_include_directories(3d PUBLIC ${CORE_INCLUDES}) +target_include_directories(gpu PUBLIC ${CORE_INCLUDES}) -#-- - Tools Setup -- - +#-- - Tools Setup -- - if (DEFINED ASSET_PACKER_PATH) set(ASSET_PACKER_CMD ${ASSET_PACKER_PATH}) set(ASSET_PACKER_DEPENDS ${ASSET_PACKER_PATH}) else() - add_executable(asset_packer tools/asset_packer.cc ${PROCEDURAL_SOURCES}) + add_executable(asset_packer tools/asset_packer.cc) + target_link_libraries(asset_packer PRIVATE procedural) set(ASSET_PACKER_CMD $<TARGET_FILE:asset_packer>) set(ASSET_PACKER_DEPENDS asset_packer) endif() @@ -135,7 +152,7 @@ else() set(TRACKER_COMPILER_FINAL_DEPENDS ${TRACKER_COMPILER_DEPENDS}) endif() -#-- - Code Generation Helpers -- - +#-- - Code Generation Helpers -- - function(pack_assets NAME INPUT_TXT HEADER_VAR DATA_CC_VAR TARGET_NAME) set(OUT_H ${CMAKE_CURRENT_SOURCE_DIR}/src/generated/${NAME}.h) set(OUT_CC ${CMAKE_CURRENT_SOURCE_DIR}/src/generated/${NAME}_data.cc) @@ -167,7 +184,7 @@ 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() -#-- - Generation Targets -- - +#-- - 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) add_custom_command( @@ -176,7 +193,7 @@ add_custom_command( COMMAND ${SEQ_COMPILER_CMD} ${DEMO_SEQ_PATH} ${GENERATED_TIMELINE_CC} DEPENDS ${SEQ_COMPILER_DEPENDS} ${DEMO_SEQ_PATH} src/gpu/demo_effects.h - COMMENT \"Compiling demo sequence...\" + COMMENT "Compiling demo sequence..." ) add_custom_target(generate_timeline ALL DEPENDS ${GENERATED_TIMELINE_CC}) @@ -194,12 +211,10 @@ 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) -set(UTIL_SOURCES src/util/asset_manager.cc) - -#-- - Main Demo -- - -add_executable(demo64k src/main.cc ${PLATFORM_SOURCES} ${GPU_SOURCES} ${AUDIO_SOURCES} ${PROCEDURAL_SOURCES} ${UTIL_SOURCES} ${GEN_DEMO_CC} ${GENERATED_TIMELINE_CC} ${GENERATED_MUSIC_DATA_CC}) +#-- - Main Demo -- - +add_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 ${DEMO_LIBS}) +target_link_libraries(demo64k PRIVATE gpu 3d audio procedural util ${DEMO_LIBS}) #Size optimizations if (DEMO_SIZE_OPT) @@ -209,75 +224,80 @@ if (DEMO_SIZE_OPT) elseif (APPLE) target_compile_options(demo64k PRIVATE -Os) target_link_options(demo64k PRIVATE -Wl,-dead_strip) - else() + else () target_compile_options(demo64k PRIVATE -Os -ffunction-sections -fdata-sections) target_link_options(demo64k PRIVATE -Wl,--gc-sections -s) endif() endif() -#-- - Tests -- - +#-- - Tests -- - enable_testing() if(DEMO_BUILD_TESTS) - add_executable(test_window src/tests/test_window.cc src/audio/window.cc) + add_executable(test_window src/tests/test_window.cc) + target_link_libraries(test_window PRIVATE audio) add_test(NAME HammingWindowTest COMMAND test_window) add_executable(test_maths src/tests/test_maths.cc) add_test(NAME MathUtilsTest COMMAND test_maths) - add_executable(test_synth src/tests/test_synth.cc src/audio/synth.cc src/audio/idct.cc src/audio/window.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_executable(test_tracker src/tests/test_tracker.cc ${AUDIO_SOURCES} ${UTIL_SOURCES} ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC} ${PROCEDURAL_SOURCES}) - target_link_libraries(test_tracker PRIVATE ${DEMO_LIBS}) + add_executable(test_tracker 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 ${AUDIO_SOURCES} ${PLATFORM_SOURCES} ${UTIL_SOURCES} ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC} ${PROCEDURAL_SOURCES}) + add_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 ${DEMO_LIBS}) + 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 ${UTIL_SOURCES} ${PROCEDURAL_SOURCES} ${GEN_TEST_CC}) + add_executable(test_assets src/tests/test_assets.cc ${GEN_TEST_CC}) + target_link_libraries(test_assets PRIVATE util procedural) target_include_directories(test_assets PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src/generated_test) target_compile_definitions(test_assets PRIVATE USE_TEST_ASSETS) 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 ${GPU_SOURCES} ${UTIL_SOURCES} ${GEN_DEMO_CC} ${PROCEDURAL_SOURCES} ${GENERATED_TIMELINE_CC} ${PLATFORM_SOURCES}) - target_link_libraries(test_sequence PRIVATE ${DEMO_LIBS}) + 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_dependencies(test_sequence generate_timeline generate_demo_assets) add_test(NAME SequenceSystemTest COMMAND test_sequence) - add_executable(test_procedural src/tests/test_procedural.cc ${PROCEDURAL_SOURCES}) + add_executable(test_procedural src/tests/test_procedural.cc) + target_link_libraries(test_procedural PRIVATE procedural) add_test(NAME ProceduralGenTest COMMAND test_procedural) add_executable(test_3d src/tests/test_3d.cc) add_test(NAME ThreeDSystemTest COMMAND test_3d) - add_executable(test_shader_composer src/tests/test_shader_composer.cc src/gpu/effects/shader_composer.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_executable(test_texture_manager src/tests/test_texture_manager.cc ${GPU_SOURCES} ${PLATFORM_SOURCES} ${PROCEDURAL_SOURCES} ${AUDIO_SOURCES} ${GENERATED_TIMELINE_CC} ${UTIL_SOURCES} ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC}) - target_link_libraries(test_texture_manager PRIVATE ${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_dependencies(test_texture_manager generate_timeline generate_demo_assets generate_tracker_music) - add_executable(test_3d_render src/tests/test_3d_render.cc src/3d/renderer.cc ${GPU_SOURCES} ${PLATFORM_SOURCES} ${PROCEDURAL_SOURCES} ${AUDIO_SOURCES} ${GENERATED_TIMELINE_CC} ${UTIL_SOURCES} ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC}) - target_link_libraries(test_3d_render PRIVATE ${DEMO_LIBS}) + 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_dependencies(test_3d_render generate_timeline generate_demo_assets generate_tracker_music) endif() -#-- - Extra Tools -- - +#-- - Extra Tools -- - if(DEMO_BUILD_TOOLS OR DEMO_BUILD_TESTS) - add_executable(spectool tools/spectool.cc ${PLATFORM_SOURCES} ${AUDIO_SOURCES} ${UTIL_SOURCES} ${GEN_DEMO_CC} ${GENERATED_MUSIC_DATA_CC} ${PROCEDURAL_SOURCES}) + add_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 ${DEMO_LIBS}) + target_link_libraries(spectool PRIVATE audio util procedural ${DEMO_LIBS}) add_dependencies(spectool generate_tracker_music generate_demo_assets) add_executable(specview tools/specview.cc) endif() -#-- - Global Target Configuration -- - +#-- - Global Target Configuration -- - add_custom_target(final COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/gen_assets.sh COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/crunch_demo.sh @@ -288,4 +308,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 +) |
