From 7d187b9659d995beaaf0a8eb484c16525382d237 Mon Sep 17 00:00:00 2001 From: John Stefanelli Date: Sat, 23 Aug 2025 21:07:29 +0200 Subject: [PATCH] [General] Add 'compile_and_pack_shader' CMake function --- CMakeLists.txt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0d19460..bdad092 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,9 +9,21 @@ add_custom_target(${CMAKE_PROJECT_NAME}_html COMMAND ${CMAKE_COMMAND} -E copy ${ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/assets/index.html) add_executable(${CMAKE_PROJECT_NAME} src/main.cpp) - add_dependencies(${CMAKE_PROJECT_NAME} ${CMAKE_PROJECT_NAME}_html) target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE $<$:/W4 /WX> $<$>:-Wall -Wextra -Wpedantic -Werror>) target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE --use-port=emdawnwebgpu) target_link_options(${CMAKE_PROJECT_NAME} PRIVATE --use-port=emdawnwebgpu) + +function(compile_and_package_shader SHADER_NAME TARGET) + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.wgsl + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/shaders + COMMAND slangc -target wgsl -matrix-layout-column-major ${CMAKE_CURRENT_SOURCE_DIR}/assets/shaders/${SHADER_NAME}.slang -o ${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.wgsl + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/assets/shaders/${SHADER_NAME}.slang) + add_custom_target(${TARGET}_shader_${SHADER_NAME} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.wgsl) + #TODO: Add deptfile generation via slang for recompilation when embedded files change + add_dependencies(${TARGET} ${TARGET}_shader_${SHADER_NAME}) + target_link_options(${TARGET} PRIVATE --embed-file ${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.wgsl@/shaders/${SHADER_NAME}.wgsl) +endfunction() + +compile_and_package_shader(shaders ${CMAKE_PROJECT_NAME})