cmake_minimum_required(VERSION 3.16) file(GLOB_RECURSE GRAPHICS_SOURCES CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp ) set(SHADER_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/shaders) set(SHADER_OUT_DIR ${CMAKE_BINARY_DIR}/shaders) file(GLOB_RECURSE SHADERS ${SHADER_SRC_DIR}/*.vert ${SHADER_SRC_DIR}/*.frag ) find_program(GLSLC glslc REQUIRED) set(SPIRV_SHADERS) foreach(SHADER ${SHADERS}) get_filename_component(FILE_NAME ${SHADER} NAME) set(SPIRV_FILE ${SHADER_OUT_DIR}/${FILE_NAME}.spv) add_custom_command( OUTPUT ${SPIRV_FILE} COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADER_OUT_DIR} COMMAND ${GLSLC} ${SHADER} -o ${SPIRV_FILE} DEPENDS ${SHADER} COMMENT "Compiling ${FILE_NAME} with glslc" VERBATIM ) list(APPEND SPIRV_SHADERS ${SPIRV_FILE}) endforeach() add_custom_target(Shaders ALL DEPENDS ${SPIRV_SHADERS}) add_library(deerith_graphics ${GRAPHICS_SOURCES}) target_include_directories(deerith_graphics PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ) target_compile_features(deerith_graphics PUBLIC cxx_std_20) find_package(Vulkan REQUIRED) find_package(glfw3 REQUIRED) find_package(glm REQUIRED) find_package(fmt REQUIRED) add_dependencies(deerith_graphics Shaders) target_link_libraries(deerith_graphics PUBLIC deerith::core PRIVATE Vulkan::Vulkan glfw glm::glm fmt::fmt ) add_library(deerith::graphics ALIAS deerith_graphics)