summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt57
1 files changed, 53 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c35695f..ede06ee 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,6 +13,7 @@ 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)
option(DEMO_ENABLE_DEBUG_LOGS "Enable all debug logging (for pre-commit checks)" OFF)
+option(DEMO_HEADLESS "Build headless mode (functional stubs for testing)" OFF)
option(DEMO_ALL_OPTIONS "Activate all options at once" OFF)
set(DEMO_WORKSPACE "main" CACHE STRING "Active workspace (main, test, etc.)")
@@ -56,6 +57,12 @@ if (DEMO_ENABLE_DEBUG_LOGS)
add_definitions(-DDEBUG_LOG_ALL)
endif()
+if (DEMO_HEADLESS)
+ add_definitions(-DDEMO_HEADLESS)
+ add_definitions(-DMA_ENABLE_ONLY_SPECIFIC_BACKENDS -DMA_ENABLE_NULL)
+ message(STATUS "DEMO_HEADLESS enabled - functional stubs (audio works, no GPU)")
+endif()
+
#-- - Workspace Configuration -- -
include(cmake/ParseWorkspace.cmake)
set(WORKSPACE_DIR "${CMAKE_SOURCE_DIR}/workspaces/${DEMO_WORKSPACE}")
@@ -113,7 +120,35 @@ 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)
-if (DEMO_STRIP_EXTERNAL_LIBS)
+if (DEMO_HEADLESS)
+ # Headless mode: Functional stubs (timeline/audio work)
+ # Include all effect classes to satisfy timeline loading
+ set(GPU_SOURCES
+ src/gpu/headless_gpu.cc
+ src/gpu/demo_effects.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
+ )
+elseif (DEMO_STRIP_EXTERNAL_LIBS)
# Size measurement mode: Minimal GPU stubs only
set(GPU_SOURCES src/gpu/stub_gpu.cc)
else()
@@ -143,8 +178,20 @@ else()
src/gpu/texture_manager.cc
)
endif()
-if (DEMO_STRIP_EXTERNAL_LIBS)
- # Size measurement mode: Stub 3D (it depends on WebGPU)
+if (DEMO_HEADLESS)
+ # Headless mode: Full 3D (needed for Hybrid3DEffect)
+ 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
+ )
+elseif (DEMO_STRIP_EXTERNAL_LIBS)
+ # Size measurement mode: Stub 3D (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
@@ -159,7 +206,9 @@ else()
src/3d/scene_loader.cc
)
endif()
-if (DEMO_STRIP_EXTERNAL_LIBS)
+if (DEMO_HEADLESS)
+ set(PLATFORM_SOURCES src/platform/headless_platform.cc)
+elseif (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)