cmake_minimum_required(VERSION 3.14)

set(LOGGER_SOURCES Logger.cpp)

add_library(kp_logger ${LOGGER_SOURCES})

if(NOT KOMPUTE_OPT_LOG_LEVEL_DISABLED)
    target_link_libraries(kp_logger PUBLIC spdlog::spdlog)
endif()

if(${KOMPUTE_OPT_LOG_LEVEL} STREQUAL "Trace")
    set(KOMPUTE_OPT_LOG_LEVEL TRACE)
    message(STATUS "Using log level Trace")
elseif(${KOMPUTE_OPT_LOG_LEVEL} STREQUAL "Debug")
    set(KOMPUTE_OPT_LOG_LEVEL DEBUG)
    message(STATUS "Using log level Debug")
elseif(${KOMPUTE_OPT_LOG_LEVEL} STREQUAL "Info")
    set(KOMPUTE_OPT_LOG_LEVEL INFO)
    message(STATUS "Using log level Info")
elseif(${KOMPUTE_OPT_LOG_LEVEL} STREQUAL "Warn")
    set(KOMPUTE_OPT_LOG_LEVEL WARN)
    message(STATUS "Using log level Warn")
elseif(${KOMPUTE_OPT_LOG_LEVEL} STREQUAL "Error")
    set(KOMPUTE_OPT_LOG_LEVEL ERROR)
    message(STATUS "Using log level Error")
elseif(${KOMPUTE_OPT_LOG_LEVEL} STREQUAL "Critical")
    set(KOMPUTE_OPT_LOG_LEVEL CRITICAL)
    message(STATUS "Using log level Critical")
elseif(${KOMPUTE_OPT_LOG_LEVEL} STREQUAL "Off")
    set(KOMPUTE_OPT_LOG_LEVEL OFF)
    message(STATUS "Using log level Off")
elseif(${KOMPUTE_OPT_LOG_LEVEL} STREQUAL "Default")
    set(KOMPUTE_OPT_LOG_LEVEL $<IF:$<CONFIG:Debug>,DEBUG,INFO>)
    message(STATUS "Setting KOMPUTE_OPT_LOG_LEVEL to according to build type")
else()
    message(FATAL_ERROR "Log level '${KOMPUTE_OPT_LOG_LEVEL}' unknown, use -DKOMPUTE_OPT_LOG_LEVEL={Trace, Debug, Info, Warn, Error, Critical, Off, Default} to set it to a correct value.")
endif()

target_compile_definitions(kp_logger INTERFACE SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_${KOMPUTE_OPT_LOG_LEVEL})
