summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-06 10:22:01 +0100
committerskal <pascal.massimino@gmail.com>2026-02-06 10:22:01 +0100
commit34b88141c44b7b7ea56f160d755de1d17c79e882 (patch)
tree87f21c79a1dfb10fa85a853c5a5488205dc13ba5 /CMakeLists.txt
parente281b6ff0884a5b4af8aa2ca79fd01141bc2005b (diff)
fix(build): Add file-level dependencies for assets (shaders, meshes, audio)
CRITICAL FIX: Changing .wgsl/.spec/.obj files now triggers asset regeneration. Problem: CMake only tracked demo_assets.txt, not individual asset files. Result: Editing shaders didn't trigger rebuilds → stale code in binary! Solution: Parse demo_assets.txt to extract all asset filenames and add them to DEPENDS clause in add_custom_command(). Now CMake tracks all 42 assets. Implementation: - Added parse_asset_list() function to extract filenames from asset list - Regex parses format: ASSET_NAME, COMPRESSION, FILENAME, DESCRIPTION - Filters out PROC() entries (procedural, no file on disk) - Adds full paths to DEPENDS for both pack_assets() and pack_test_assets() Performance impact: - Before: touch shader → 0.28s (no rebuild, STALE!) - After: touch shader → 3.55s (regenerates assets, rebuilds users) Files tracked: 42 demo assets + 17 test assets - Shaders: renderer_3d.wgsl, mesh_render.wgsl, skybox.wgsl, etc. - Audio: kick1.spec, KICK_606.spec, snare samples, bass samples - Meshes: dodecahedron.obj, other geometry Developer workflow: No more 'touch demo_assets.txt' workaround needed! Just edit shaders and rebuild - dependencies work correctly now.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt37
1 files changed, 34 insertions, 3 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ff47cea..887e018 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -181,15 +181,42 @@ else()
set(TRACKER_COMPILER_FINAL_DEPENDS ${TRACKER_COMPILER_DEPENDS})
endif()
-#-- - Code Generation Helpers -- -
+#-- - Code Generation Helpers -- -
+# Helper to parse demo_assets.txt and extract individual file paths
+function(parse_asset_list INPUT_TXT OUT_FILE_LIST)
+ set(ASSET_FILES "")
+ if(EXISTS ${INPUT_TXT})
+ file(STRINGS ${INPUT_TXT} LINES)
+ foreach(LINE ${LINES})
+ # Skip comments and empty lines
+ string(STRIP "${LINE}" LINE)
+ if(NOT LINE MATCHES "^#" AND NOT LINE STREQUAL "")
+ # 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}")
+ if(EXISTS ${FULL_PATH})
+ list(APPEND ASSET_FILES ${FULL_PATH})
+ endif()
+ endif()
+ endforeach()
+ endif()
+ set(${OUT_FILE_LIST} ${ASSET_FILES} PARENT_SCOPE)
+endfunction()
+
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)
+
+ # Parse asset list to get individual file dependencies
+ parse_asset_list(${INPUT_TXT} ASSET_FILE_DEPS)
+
add_custom_command(
OUTPUT ${OUT_H} ${OUT_CC}
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/src/generated
COMMAND ${ASSET_PACKER_CMD} ${INPUT_TXT} ${OUT_H} ${OUT_CC}
- DEPENDS ${ASSET_PACKER_DEPENDS} ${INPUT_TXT}
+ DEPENDS ${ASSET_PACKER_DEPENDS} ${INPUT_TXT} ${ASSET_FILE_DEPS}
COMMENT "Generating assets for ${NAME}..."
)
set(${HEADER_VAR} ${OUT_H} PARENT_SCOPE)
@@ -201,11 +228,15 @@ endfunction()
function(pack_test_assets NAME INPUT_TXT HEADER_VAR DATA_CC_VAR TARGET_NAME)
set(OUT_H ${CMAKE_CURRENT_BINARY_DIR}/src/generated_test/${NAME}.h)
set(OUT_CC ${CMAKE_CURRENT_BINARY_DIR}/src/generated_test/${NAME}_data.cc)
+
+ # Parse asset list to get individual file dependencies
+ parse_asset_list(${INPUT_TXT} ASSET_FILE_DEPS)
+
add_custom_command(
OUTPUT ${OUT_H} ${OUT_CC}
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/src/generated_test
COMMAND ${ASSET_PACKER_CMD} ${INPUT_TXT} ${OUT_H} ${OUT_CC}
- DEPENDS ${ASSET_PACKER_DEPENDS} ${INPUT_TXT}
+ DEPENDS ${ASSET_PACKER_DEPENDS} ${INPUT_TXT} ${ASSET_FILE_DEPS}
COMMENT "Generating assets for test ${NAME}..."
)
set(${HEADER_VAR} ${OUT_H} PARENT_SCOPE)