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) cmake_policy(SET CMP0116 NEW) function(compile_shader) cmake_parse_arguments(PARSE_ARGV 1 arg "" "ENV;FORMAT" "SOURCES") foreach(source ${arg_SOURCES}) message(${source}.${arg_FORMAT}) 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() compile_shader(rse_graphics ENV opengl FORMAT num SOURCES shaders/shader.vert shaders/shader.frag ) add_library(rse_graphics SHARED shaders/shader.vert.num shaders/shader.frag.num) target_include_directories(rse_graphics PRIVATE ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} ${Vulkan_INCLUDE_DIR} ${glfw3_INCLUDE_DIR} ${glm_INCLUDE_DIR} ) target_sources(rse_graphics PRIVATE src/window.cpp src/vulkan_base.cpp src/vulkan_pipeline.cpp src/vulkan_buffers.cpp src/vulkan_descriptors.cpp src/rse_graphics.cpp src/mesh_controller.cpp ) target_link_libraries(rse_graphics PRIVATE rse_utilities ${Vulkan_LIBRARIES} glfw glm )