cmake_minimum_required(VERSION 3.9) 
project(disc CXX)
set(CMAKE_CXX_STANDARD 17)

option(BUILD_UNITTESTS OFF "build unittests")
option(WITH_TBB OFF "use TBB/Parallel Sort")

##############################################################################
# Library
##############################################################################
add_library(${PROJECT_NAME} INTERFACE)

target_include_directories(${PROJECT_NAME} 
    INTERFACE 
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>
        $<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>
)

##############################################################################
# Dependencies
##############################################################################
find_package(OpenMP REQUIRED)
find_library(QUADMATH_LIBRARY NAMES quadmath)
find_package(Boost) 

if(WITH_TBB)
    set(CMAKE_MODULE_PATH "/usr/share/cmake/Modules;${CMAKE_MODULE_PATH}") 
    find_package(TBB REQUIRED)
endif()

if (Boost_FOUND)
    target_include_directories(${PROJECT_NAME} INTERFACE ${Boost_INCLUDES})
endif()

if (OpenMP_FOUND)
    find_library(atomic REQUIRED)
    target_link_libraries(${PROJECT_NAME} INTERFACE OpenMP::OpenMP_CXX atomic)
endif()

if (QUADMATH_LIBRARY)
    target_link_libraries(${PROJECT_NAME} INTERFACE quadmath)
    target_compile_definitions(${PROJECT_NAME} INTERFACE WITH_QUADMATH=1)
endif()

if(TBB_FOUND)
    target_compile_definitions(${PROJECT_NAME} INTERFACE WITH_EXECUTION_POLICIES=1)
    target_link_libraries(${PROJECT_NAME} INTERFACE ${TBB_LIBRARIES})
endif()

##############################################################################
# unittests
##############################################################################

if (BUILD_UNITTESTS)
    add_subdirectory(unittests)
endif()

##############################################################################
# installation
##############################################################################

install(TARGETS               ${PROJECT_NAME}
        EXPORT                ${PROJECT_NAME}_exports
        INCLUDES  DESTINATION include/${PROJECT_NAME}
)
install(EXPORT      ${PROJECT_NAME}_exports
        FILE        ${PROJECT_NAME}-config.cmake 
        NAMESPACE   ${PROJECT_NAME}::
        DESTINATION share/cmake
)


