[CMakeLists] Generate and reference shader depfile

This commit is contained in:
jstefanelli 2025-09-02 13:41:10 +02:00
parent 74a56d840c
commit 7b9bb79284
Signed by: jstefanelli
GPG key ID: 60EDE2437640D2AA

View file

@ -17,14 +17,16 @@ target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE --use-port=emdawnwebgpu)
target_link_options(${CMAKE_PROJECT_NAME} PRIVATE --use-port=emdawnwebgpu -sASYNCIFY=1) target_link_options(${CMAKE_PROJECT_NAME} PRIVATE --use-port=emdawnwebgpu -sASYNCIFY=1)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE glm::glm) target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE glm::glm)
target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE -DGLM_FORCE_DEPTH_ZERO_TO_ONE -DGLM_FORCE_LEFT_HANDED) target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE -DGLM_FORCE_DEPTH_ZERO_TO_ONE -DGLM_FORCE_LEFT_HANDED)
target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
function(compile_and_package_shader SHADER_NAME TARGET) function(compile_and_package_shader SHADER_NAME TARGET)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.wgsl add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.wgsl
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/shaders 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 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 -depfile ${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.wgsl.d
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/assets/shaders/${SHADER_NAME}.slang) DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/assets/shaders/${SHADER_NAME}.slang
DEPFILE ${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.wgsl.d
)
add_custom_target(${TARGET}_shader_${SHADER_NAME} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.wgsl) 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}) 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) target_link_options(${TARGET} PRIVATE --embed-file ${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.wgsl@/shaders/${SHADER_NAME}.wgsl)
set_target_properties(${TARGET} PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.wgsl) set_target_properties(${TARGET} PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.wgsl)