# CMakeLists.txt
cmake_minimum_required(VERSION 3.12)
project(Aida)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# general compiler flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -fdiagnostics-color=always")

# debugging flags
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")

# optimization flags
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG")

if (NOT CMAKE_VERBOSE_MAKEFILE)
   set(CMAKE_VERBOSE_MAKEFILE ON)
endif()

if (NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE "Release")
endif()

# Include directories
include_directories(
    ${CMAKE_SOURCE_DIR}/include
    ${CMAKE_SOURCE_DIR}/src
    ${CMAKE_SOURCE_DIR}/../Persistence-Algebra/include
)

# Find Boost libraries
find_package(Boost REQUIRED timer chrono)

# Link Boost libraries
link_libraries(Boost::timer Boost::chrono)

# Collect source files
set(AIDA_SOURCES
    ${CMAKE_SOURCE_DIR}/src/aida_decompose.cpp
    ${CMAKE_SOURCE_DIR}/src/aida_functions.cpp
    ${CMAKE_SOURCE_DIR}/src/aida_helpers.cpp
    ${CMAKE_SOURCE_DIR}/src/aida_interface.cpp
    ${CMAKE_SOURCE_DIR}/src/config.cpp
    ${CMAKE_SOURCE_DIR}/src/option_parser.cpp
    ${CMAKE_SOURCE_DIR}/src/block.cpp
)

# Create static library
add_library(aida_static STATIC ${AIDA_SOURCES})
target_include_directories(aida_static PUBLIC
    ${CMAKE_SOURCE_DIR}/include
    ${CMAKE_SOURCE_DIR}/src
    ${CMAKE_SOURCE_DIR}/../Persistence-Algebra/include
)
target_link_libraries(aida_static PUBLIC Boost::timer Boost::chrono)

set_target_properties(aida_static PROPERTIES OUTPUT_NAME aida)

# Install libraries
install(TARGETS aida_static 
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
)

# Create executables with sources (they need different compile flags)
add_executable(aida ${CMAKE_SOURCE_DIR}/aida.cpp ${AIDA_SOURCES})
add_executable(aida_with_stats ${CMAKE_SOURCE_DIR}/aida.cpp ${AIDA_SOURCES})
add_executable(generate_decompositions ${CMAKE_SOURCE_DIR}/generate_decompositions.cpp)

target_link_libraries(generate_decompositions PRIVATE aida_static)

target_compile_options(aida PUBLIC -DAIDA_WITH_STATS=0)
target_compile_options(aida_with_stats PUBLIC -DAIDA_WITH_STATS=1)

install(TARGETS aida aida_with_stats generate_decompositions
    RUNTIME DESTINATION bin
)