31 lines
968 B
CMake
31 lines
968 B
CMake
function(add_shaders TARGET_NAME)
|
|
set(SHADER_SOURCE_FILES ${ARGN})
|
|
list(LENGTH SHADER_SOURCE_FILES FILE_COUNT)
|
|
if(FILE_COUNT EQUAL 0)
|
|
message(FATAL_ERROR "Cannot add shaders target without shader files!")
|
|
endif()
|
|
|
|
set(SHADER_COMMANDS)
|
|
set(SHADER_PRODUCTS)
|
|
|
|
foreach(SHADER_SOURCE IN LISTS SHADER_SOURCE_FILES)
|
|
cmake_path(ABSOLUTE_PATH SHADER_SOURCE NORMALIZE)
|
|
cmake_path(GET SHADER_SOURCE FILENAME SHADER_NAME)
|
|
|
|
# COMMANDS
|
|
list(APPEND SHADER_COMMANDS COMMAND)
|
|
list(APPEND SHADER_COMMANDS Vulkan::glslc)
|
|
list(APPEND SHADER_COMMANDS "${SHADER_SOURCE}")
|
|
list(APPEND SHADER_COMMANDS "-o")
|
|
list(APPEND SHADER_COMMANDS "${CMAKE_CURRENT_BINARY_DIR}/${SHADER_NAME}.spv")
|
|
# PRODUCTS
|
|
list(APPEND SHADER_PRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/${SHADER_NAME}.spv")
|
|
endforeach()
|
|
|
|
add_custom_target(${TARGET_NAME} ALL
|
|
${SHADER_COMMANDS}
|
|
COMMENT "Compiling shaders..."
|
|
SOURCES ${SHADER_SOURCE_FILES}
|
|
BYPRODUCTS ${SHADER_PRODUCTS}
|
|
)
|
|
endfunction() |