40 lines
1.2 KiB
CMake
40 lines
1.2 KiB
CMake
find_package(Vulkan REQUIRED)
|
|
|
|
function(add_shaders TARGET_NAME)
|
|
set(SHADER_SOURCE_FILES ${ARGN}) # the rest of arguments to this function will be assigned as shader source files
|
|
|
|
# Validate that source files have been passed
|
|
list(LENGTH SHADER_SOURCE_FILES FILE_COUNT)
|
|
if(FILE_COUNT EQUAL 0)
|
|
message(FATAL_ERROR "Cannot create a shaders target without any source 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)
|
|
|
|
# Build command
|
|
list(APPEND SHADER_COMMAND COMMAND)
|
|
list(APPEND SHADER_COMMAND Vulkan::glslc)
|
|
list(APPEND SHADER_COMMAND "${SHADER_SOURCE}")
|
|
list(APPEND SHADER_COMMAND "-o")
|
|
list(APPEND SHADER_COMMAND "${CMAKE_CURRENT_BINARY_DIR}/${SHADER_NAME}.spv")
|
|
|
|
# Add product
|
|
list(APPEND SHADER_PRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/${SHADER_NAME}.spv")
|
|
|
|
endforeach()
|
|
|
|
add_custom_target(${TARGET_NAME} ALL
|
|
${SHADER_COMMAND}
|
|
COMMENT "Compiling Shaders [${TARGET_NAME}]"
|
|
SOURCES ${SHADER_SOURCE_FILES}
|
|
BYPRODUCTS ${SHADER_PRODUCTS}
|
|
)
|
|
endfunction()
|
|
|
|
add_shaders(kernels test.cl)
|