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
)
