summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-09 18:51:54 +0100
committerskal <pascal.massimino@gmail.com>2026-02-09 18:51:54 +0100
commit7790472dabfa0ecd06f3408d847860ec6072866e (patch)
tree5bce7b119f42d131daf746ddc052da2da5ff0650 /CMakeLists.txt
parent002ab9094f638c46d5db95d478e71c10933aceb2 (diff)
feat: Implement workspace system (Task #77)
Self-contained workspaces for parallel demo development. Structure: - workspaces/main,test - Demo-specific resources - assets/common - Shared resources - workspace.cfg - Configuration per workspace CMake integration: - DEMO_WORKSPACE option (defaults to main) - cmake/ParseWorkspace.cmake - Config parser - Workspace-relative asset/timeline/music paths Migration: - Main demo: demo.seq to workspaces/main/timeline.seq - Test demo: test_demo.seq to workspaces/test/timeline.seq - Common shaders: assets/common/shaders - Workspace shaders: workspaces/*/shaders Build: cmake -B build -DDEMO_WORKSPACE=main cmake -B build_test -DDEMO_WORKSPACE=test All tests passing (36/36). handoff(Claude): Task #77 workspace system complete. Both main and test workspaces build and pass all tests. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt36
1 files changed, 28 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index acae668..c35695f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,6 +14,7 @@ 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_ALL_OPTIONS "Activate all options at once" OFF)
+set(DEMO_WORKSPACE "main" CACHE STRING "Active workspace (main, test, etc.)")
if (DEMO_ALL_OPTIONS)
set(DEMO_SIZE_OPT ON)
@@ -55,6 +56,15 @@ if (DEMO_ENABLE_DEBUG_LOGS)
add_definitions(-DDEBUG_LOG_ALL)
endif()
+#-- - Workspace Configuration -- -
+include(cmake/ParseWorkspace.cmake)
+set(WORKSPACE_DIR "${CMAKE_SOURCE_DIR}/workspaces/${DEMO_WORKSPACE}")
+if(NOT EXISTS "${WORKSPACE_DIR}/workspace.cfg")
+ message(FATAL_ERROR "Workspace not found: ${DEMO_WORKSPACE} (${WORKSPACE_DIR})")
+endif()
+parse_workspace_config("${WORKSPACE_DIR}")
+message(STATUS "Using workspace: ${DEMO_WORKSPACE}")
+
#-- - Platform Detection and Core Setup -- -
if(APPLE)
add_definitions(-DGLFW_EXPOSE_NATIVE_COCOA)
@@ -228,6 +238,9 @@ endif()
function(parse_asset_list INPUT_TXT OUT_FILE_LIST)
set(ASSET_FILES "")
if(EXISTS ${INPUT_TXT})
+ # Get directory of INPUT_TXT for relative path resolution
+ get_filename_component(INPUT_DIR ${INPUT_TXT} DIRECTORY)
+
file(STRINGS ${INPUT_TXT} LINES)
foreach(LINE ${LINES})
# Skip comments and empty lines
@@ -236,8 +249,14 @@ function(parse_asset_list INPUT_TXT OUT_FILE_LIST)
# Extract filename (third field: ASSET_NAME, COMPRESSION, FILENAME, DESC)
string(REGEX REPLACE "^[^,]+,[^,]+,[ ]*([^,]+).*" "\\1" FILENAME "${LINE}")
string(STRIP "${FILENAME}" FILENAME)
- # Build full path
- set(FULL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/assets/final/${FILENAME}")
+
+ # Try workspace-relative path first
+ set(FULL_PATH "${INPUT_DIR}/${FILENAME}")
+ if(NOT EXISTS ${FULL_PATH})
+ # Fall back to legacy path for compatibility
+ set(FULL_PATH "${CMAKE_CURRENT_SOURCE_DIR}/assets/final/${FILENAME}")
+ endif()
+
if(EXISTS ${FULL_PATH})
list(APPEND ASSET_FILES ${FULL_PATH})
endif()
@@ -297,8 +316,9 @@ macro(add_demo_test NAME TEST_NAME)
add_test(NAME ${TEST_NAME} COMMAND ${NAME})
endmacro()
-#-- - Generation Targets -- -
-set(DEMO_SEQ_PATH ${CMAKE_CURRENT_SOURCE_DIR}/assets/demo.seq)
+#-- - Generation Targets -- -
+# Use workspace-configured paths
+set(DEMO_SEQ_PATH ${WORKSPACE_TIMELINE})
set(GENERATED_TIMELINE_CC ${CMAKE_CURRENT_SOURCE_DIR}/src/generated/timeline.cc)
add_custom_command(
OUTPUT ${GENERATED_TIMELINE_CC}
@@ -306,22 +326,22 @@ 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 from workspace ${DEMO_WORKSPACE}..."
)
add_custom_target(generate_timeline ALL DEPENDS ${GENERATED_TIMELINE_CC})
-set(TRACKER_MUSIC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/assets/music.track)
+set(TRACKER_MUSIC_PATH ${WORKSPACE_MUSIC})
set(GENERATED_MUSIC_DATA_CC ${CMAKE_CURRENT_SOURCE_DIR}/src/generated/music_data.cc)
add_custom_command(
OUTPUT ${GENERATED_MUSIC_DATA_CC}
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/src/generated
COMMAND ${TRACKER_COMPILER_FINAL_CMD} ${TRACKER_MUSIC_PATH} ${GENERATED_MUSIC_DATA_CC}
DEPENDS ${TRACKER_COMPILER_FINAL_DEPENDS} ${TRACKER_MUSIC_PATH} tracker_compiler_host
- COMMENT "Compiling tracker music..."
+ COMMENT "Compiling tracker music from workspace ${DEMO_WORKSPACE}..."
)
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_assets(assets ${WORKSPACE_ASSETS} 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)
# Mark generated files so CMake always checks if they need rebuilding