find_package(Vulkan REQUIRED) find_package(vma REQUIRED) find_package(glfw3 REQUIRED) find_package(stb REQUIRED) find_package(FreeType REQUIRED) find_package(Vulkan COMPONENTS glslc) find_program(glslc_executable NAMES glslc HINTS ${Vulkan_GLSLC_EXECUTABLE}/..) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror") file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/shaders) 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(graphics ENV opengl FORMAT num SOURCES shaders/shader.vert shaders/solid_objects.frag shaders/on_screen_text.frag ) add_library(graphics SHARED shaders/shader.vert.num shaders/solid_objects.frag.num shaders/on_screen_text.frag.num ) target_include_directories(graphics PRIVATE ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} ${Vulkan_INCLUDE_DIR} ${vma_INCLUDE_DIR} ${glfw3_INCLUDE_DIR} ${stb_INCLUDE_DIR} ${FreeType_INCLUDE_DIR} ) target_sources(graphics PRIVATE src/vma_port.cpp src/window.c src/vulkan_base.c src/vulkan_pipeline.c src/vulkan_commands.c src/vulkan_buffers.c src/vulkan_descriptors.c src/rse_graphics.c src/math.c src/mesh_controller.c src/vulkan_commons.c src/vulkan_image.c src/text_renderer.c ) target_link_libraries(graphics PRIVATE utilities ${Vulkan_LIBRARIES} ${glfw} ${freetype} )