27 lines
906 B
CMake
27 lines
906 B
CMake
function(compile_glsl_to_spv target shader_src_dir shader_out_dir out_var)
|
|
find_program(GLSLC glslc REQUIRED)
|
|
|
|
file(GLOB_RECURSE SHADERS
|
|
"${shader_src_dir}/*.vert"
|
|
"${shader_src_dir}/*.frag"
|
|
"${shader_src_dir}/*.comp"
|
|
)
|
|
|
|
set(SPV_OUTPUTS "")
|
|
foreach(shader ${SHADERS})
|
|
file(RELATIVE_PATH rel "${shader_src_dir}" "${shader}")
|
|
set(out "${shader_out_dir}/${rel}.spv")
|
|
|
|
add_custom_command(
|
|
OUTPUT "${out}"
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "$<PATH:GET_PARENT_PATH,${out}>"
|
|
COMMAND ${GLSLC} -o "${out}" "${shader}"
|
|
DEPENDS "${shader}"
|
|
VERBATIM
|
|
)
|
|
list(APPEND SPV_OUTPUTS "${out}")
|
|
endforeach()
|
|
|
|
add_custom_target(${target}_shaders ALL DEPENDS ${SPV_OUTPUTS})
|
|
set(${out_var} ${SPV_OUTPUTS} PARENT_SCOPE)
|
|
endfunction() |