

if(KOMPUTE_OPT_ENABLE_SPDLOG)
    find_package(spdlog REQUIRED)
    find_package(fmt REQUIRED)
endif()

find_package(Vulkan REQUIRED)

if(KOMPUTE_OPT_BUILD_SHADERS)
# all shaders are compiled into cpp files
    kompute_make(build_shaders 
        OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/include)
endif()

if(KOMPUTE_OPT_BUILD_SINGLE_HEADER)
# all headers are compiled into a single header
    kompute_make(build_single_header
        OUTPUT ${PROJECT_SOURCE_DIR}/single_include)
endif()

file(GLOB kompute_CPP
    "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp"
)

add_library(kompute
    ${kompute_CPP})

target_include_directories(
    kompute PUBLIC
    $<INSTALL_INTERFACE:include>
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)

target_link_libraries(
    kompute 
    Vulkan::Vulkan
)

if(KOMPUTE_OPT_ENABLE_SPDLOG)
    target_link_libraries(
        kompute 
        fmt::fmt
        spdlog::spdlog
    )
endif()

if(KOMPUTE_OPT_BUILD_SHADERS)
    add_dependencies(kompute
        build_shaders)
endif()

if(KOMPUTE_OPT_BUILD_SINGLE_HEADER)
    add_dependencies(kompute
        build_single_header)
endif()

add_library(kompute::kompute ALIAS kompute)

install(TARGETS kompute EXPORT KomputeTargets
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
    INCLUDES DESTINATION include)

install(DIRECTORY include/ DESTINATION include)

install(DIRECTORY ${PROJECT_SOURCE_DIR}/single_include/
    DESTINATION include)

install(EXPORT KomputeTargets
    FILE komputeConfig.cmake
    NAMESPACE kompute::
    DESTINATION lib/cmake/kompute)

