add_library(rse_graphics) find_package(Vulkan REQUIRED) find_package(glfw3 REQUIRED) find_package(glm REQUIRED) find_package(Vulkan COMPONENTS glslc) find_program(glslc_executable NAMES glslc HINTS Vulkan::glslc) function(compile_shader) cmake_parse_arguments(PARSE_ARGV 1 arg "" "ENV;FORMAT" "SOURCES") foreach(source ${arg_SOURCES}) add_custom_command( OUTPUT ${source}.${arg_FORMAT} DEPENDS ${source} DEPFILE ${source}.d COMMAND ${glslc_executable} -o ${source}.${arg_FORMAT} ${CMAKE_CURRENT_SOURCE_DIR}/${source} ) endforeach() endfunction() target_include_directories(rse_graphics PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/third_party/vma/include ${CMAKE_SOURCE_DIR}/Utilities/include ${Vulkan_INCLUDE_DIR} ${glfw3_INCLUDE_DIR} ${glm_INCLUDE_DIR}) target_sources(rse_graphics PRIVATE src/window.cpp src/vulkanBase.cpp) target_link_libraries(rse_graphics PRIVATE rse_utilities ${Vulkan_LIBRARIES} glfw glm) compile_shader(rse_graphics ENV opengl FORMAT num SOURCES shaders/shader.vert shaders/shader.frag )