summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt176
1 files changed, 109 insertions, 67 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1892775..acae668 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,6 +8,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
option(DEMO_SIZE_OPT "Enable size optimization flags" OFF)
option(DEMO_STRIP_ALL "Strip all unnecessary code for final build" OFF)
option(DEMO_FINAL_STRIP "Strip ALL error checking for final-final build" OFF)
+option(DEMO_STRIP_EXTERNAL_LIBS "Stub external libs for size measurement (binary won't run)" OFF)
option(DEMO_BUILD_TESTS "Build tests" OFF)
option(DEMO_BUILD_TOOLS "Build tools" OFF)
option(DEMO_ENABLE_COVERAGE "Enable code coverage generation (macOS only)" OFF)
@@ -35,6 +36,13 @@ if (DEMO_STRIP_ALL)
set(DEMO_SIZE_OPT ON)
endif()
+if (DEMO_STRIP_EXTERNAL_LIBS)
+ add_definitions(-DSTRIP_EXTERNAL_LIBS)
+ # Audio: Use miniaudio null backend
+ add_definitions(-DMA_ENABLE_ONLY_SPECIFIC_BACKENDS -DMA_ENABLE_NULL)
+ message(STATUS "STRIP_EXTERNAL_LIBS enabled - binary will compile but NOT run (size measurement only)")
+endif()
+
if (DEMO_ENABLE_COVERAGE AND APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage")
@@ -95,44 +103,60 @@ endif()
#-- - Source Groups -- -
set(AUDIO_SOURCES src/audio/audio.cc src/audio/ring_buffer.cc src/audio/backend/miniaudio_backend.cc src/audio/backend/wav_dump_backend.cc src/audio/backend/silent_backend.cc src/audio/gen.cc src/audio/fdct.cc src/audio/idct.cc src/audio/fft.cc src/audio/window.cc src/audio/synth.cc src/audio/tracker.cc src/audio/spectrogram_resource_manager.cc src/audio/audio_engine.cc src/audio/spectral_brush.cc)
set(PROCEDURAL_SOURCES src/procedural/generator.cc)
-set(GPU_SOURCES
- src/gpu/gpu.cc
- src/gpu/effect.cc
- src/gpu/effects/heptagon_effect.cc
- src/gpu/effects/particles_effect.cc
- src/gpu/effects/passthrough_effect.cc
- src/gpu/effects/moving_ellipse_effect.cc
- src/gpu/effects/particle_spray_effect.cc
- src/gpu/effects/gaussian_blur_effect.cc
- src/gpu/effects/solarize_effect.cc
- src/gpu/effects/chroma_aberration_effect.cc
- src/gpu/effects/vignette_effect.cc
- src/gpu/effects/post_process_helper.cc
- src/gpu/effects/shaders.cc
- src/gpu/effects/hybrid_3d_effect.cc
- src/gpu/effects/flash_cube_effect.cc
- src/gpu/effects/theme_modulation_effect.cc
- src/gpu/effects/fade_effect.cc
- src/gpu/effects/flash_effect.cc
- src/gpu/effects/shader_composer.cc
- src/gpu/effects/circle_mask_effect.cc
- src/gpu/effects/rotating_cube_effect.cc
- src/gpu/texture_manager.cc
-)
-set(3D_SOURCES
- src/3d/renderer.cc
- src/3d/renderer_draw.cc
- src/3d/renderer_pipelines.cc
- src/3d/renderer_resources.cc
- src/3d/visual_debug.cc
- src/3d/bvh.cc
- src/3d/physics.cc
- src/3d/scene_loader.cc
-)
-set(PLATFORM_SOURCES src/platform/platform.cc third_party/glfw3webgpu/glfw3webgpu.c)
+if (DEMO_STRIP_EXTERNAL_LIBS)
+ # Size measurement mode: Minimal GPU stubs only
+ set(GPU_SOURCES src/gpu/stub_gpu.cc)
+else()
+ # Normal mode: Full GPU implementation
+ set(GPU_SOURCES
+ src/gpu/gpu.cc
+ src/gpu/effect.cc
+ src/gpu/effects/heptagon_effect.cc
+ src/gpu/effects/particles_effect.cc
+ src/gpu/effects/passthrough_effect.cc
+ src/gpu/effects/moving_ellipse_effect.cc
+ src/gpu/effects/particle_spray_effect.cc
+ src/gpu/effects/gaussian_blur_effect.cc
+ src/gpu/effects/solarize_effect.cc
+ src/gpu/effects/chroma_aberration_effect.cc
+ src/gpu/effects/vignette_effect.cc
+ src/gpu/effects/post_process_helper.cc
+ src/gpu/effects/shaders.cc
+ src/gpu/effects/hybrid_3d_effect.cc
+ src/gpu/effects/flash_cube_effect.cc
+ src/gpu/effects/theme_modulation_effect.cc
+ src/gpu/effects/fade_effect.cc
+ src/gpu/effects/flash_effect.cc
+ src/gpu/effects/shader_composer.cc
+ src/gpu/effects/circle_mask_effect.cc
+ src/gpu/effects/rotating_cube_effect.cc
+ src/gpu/texture_manager.cc
+ )
+endif()
+if (DEMO_STRIP_EXTERNAL_LIBS)
+ # Size measurement mode: Stub 3D (it depends on WebGPU)
+ set(3D_SOURCES src/3d/bvh.cc src/3d/physics.cc src/3d/scene_loader.cc)
+else()
+ # Normal mode: Full 3D implementation
+ set(3D_SOURCES
+ src/3d/renderer.cc
+ src/3d/renderer_draw.cc
+ src/3d/renderer_pipelines.cc
+ src/3d/renderer_resources.cc
+ src/3d/visual_debug.cc
+ src/3d/bvh.cc
+ src/3d/physics.cc
+ src/3d/scene_loader.cc
+ )
+endif()
+if (DEMO_STRIP_EXTERNAL_LIBS)
+ set(PLATFORM_SOURCES src/platform/stub_platform.cc)
+else()
+ set(PLATFORM_SOURCES src/platform/platform.cc third_party/glfw3webgpu/glfw3webgpu.c)
+endif()
set(UTIL_SOURCES src/util/asset_manager.cc src/util/file_watcher.cc)
-#-- - Subsystem Libraries -- -
+#-- - Subsystem Libraries -- -
add_library(util STATIC ${UTIL_SOURCES})
add_dependencies(util generate_demo_assets generate_test_assets)
add_library(procedural STATIC ${PROCEDURAL_SOURCES})
@@ -307,14 +331,30 @@ set_source_files_properties(${GENERATED_TIMELINE_CC} PROPERTIES GENERATED TRUE)
set_source_files_properties(${GENERATED_MUSIC_DATA_CC} PROPERTIES GENERATED TRUE)
#-- - 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)# Link order: Internal libs first, then external libs (DEMO_LIBS).
+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 order: Internal libs first, then external libs (DEMO_LIBS).
# gpu and 3d depend on WGPU (in DEMO_LIBS).
-if (APPLE)
- target_link_libraries(demo64k PRIVATE 3d gpu audio procedural util ${DEMO_LIBS})
+if (DEMO_STRIP_EXTERNAL_LIBS)
+ # Size measurement mode: No external libraries (only math/pthread)
+ if (APPLE)
+ target_link_libraries(demo64k PRIVATE 3d gpu audio procedural util)
+ else()
+ target_link_libraries(demo64k PRIVATE -Wl,--start-group 3d gpu audio procedural util -Wl,--end-group pthread m)
+ endif()
else()
- target_link_libraries(demo64k PRIVATE -Wl,--start-group 3d gpu audio procedural util -Wl,--end-group ${DEMO_LIBS})
+ # Normal mode: Link external libraries
+ if (APPLE)
+ target_link_libraries(demo64k PRIVATE 3d gpu audio procedural util ${DEMO_LIBS})
+ else()
+ target_link_libraries(demo64k PRIVATE -Wl,--start-group 3d gpu audio procedural util -Wl,--end-group ${DEMO_LIBS})
+ endif()
endif()
#Size optimizations
@@ -386,34 +426,36 @@ set_source_files_properties(${GENERATED_TEST_DEMO_TIMELINE_CC} PROPERTIES GENERA
set_source_files_properties(${GENERATED_TEST_DEMO_MUSIC_CC} PROPERTIES GENERATED TRUE)
# Build executable (uses main demo assets)
-add_demo_executable(
- test_demo
- src/test_demo.cc
- ${PLATFORM_SOURCES}
- ${GEN_DEMO_CC}
- ${GENERATED_TEST_DEMO_TIMELINE_CC}
- ${GENERATED_TEST_DEMO_MUSIC_CC}
-)
+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)
+ add_dependencies(test_demo generate_demo_assets generate_test_demo_timeline generate_test_demo_music)
-if (APPLE)
- target_link_libraries(test_demo PRIVATE 3d gpu audio procedural util ${DEMO_LIBS})
-else()
- target_link_libraries(test_demo PRIVATE -Wl,--start-group 3d gpu audio procedural util -Wl,--end-group ${DEMO_LIBS})
-endif()
+ if (APPLE)
+ target_link_libraries(test_demo PRIVATE 3d gpu audio procedural util ${DEMO_LIBS})
+ else()
+ target_link_libraries(test_demo PRIVATE -Wl,--start-group 3d gpu audio procedural util -Wl,--end-group ${DEMO_LIBS})
+ endif()
-# Size optimizations
-if (DEMO_SIZE_OPT)
- if (MSVC)
- target_compile_options(test_demo PRIVATE /Os /GS-)
- target_link_options(test_demo PRIVATE /OPT:REF /OPT:ICF /INCREMENTAL:NO)
- elseif (APPLE)
- target_compile_options(test_demo PRIVATE -Os)
- target_link_options(test_demo PRIVATE -Wl,-dead_strip)
- else ()
- target_compile_options(test_demo PRIVATE -Os -ffunction-sections -fdata-sections)
- target_link_options(test_demo PRIVATE -Wl,--gc-sections -s)
+ # Size optimizations
+ if (DEMO_SIZE_OPT)
+ if (MSVC)
+ target_compile_options(test_demo PRIVATE /Os /GS-)
+ target_link_options(test_demo PRIVATE /OPT:REF /OPT:ICF /INCREMENTAL:NO)
+ elseif (APPLE)
+ target_compile_options(test_demo PRIVATE -Os)
+ target_link_options(test_demo PRIVATE -Wl,-dead_strip)
+ else ()
+ target_compile_options(test_demo PRIVATE -Os -ffunction-sections -fdata-sections)
+ target_link_options(test_demo PRIVATE -Wl,--gc-sections -s)
+ endif()
endif()
endif()