cmake_minimum_required(VERSION 3.28)
project(build_script)

set(CMAKE_CXX_STANDARD 26)
set(CMAKE_POLICY_VERSION_MINIMUM 3.5)

# Taskflow has a deprecated declaration issue in its small_vector.hpp file
add_compile_options(-Wno-deprecated-declarations)

file(GLOB REQUIRED_CMAKE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/*.required.cmake")
foreach (cmake_file ${REQUIRED_CMAKE_FILES})
    include(${cmake_file})
endforeach ()

file(GLOB CMAKE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake/*.cmake")
foreach (cmake_file ${CMAKE_FILES})
    include(${cmake_file})
endforeach ()

include_directories(src/)

file(GLOB_RECURSE SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
file(GLOB_RECURSE HEADER_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h")
add_executable(${PROJECT_NAME} ${SRC_FILES} ${HEADER_FILES})

target_include_directories(${PROJECT_NAME} PUBLIC
        "${structops_SOURCE_DIR}/include"
        "${spdlog_SOURCE_DIR}/include"
        "${taskflow_SOURCE_DIR}"
)

target_link_libraries(${PROJECT_NAME} PUBLIC
        structopt
        spdlog
        Taskflow
)

# Structopt includes an outdated version of magic_enum that breaks some default defines
# This is needed to bypass it. Im not happy about it, but it is what it is
target_link_options(build_script PRIVATE -Wl,--allow-multiple-definition)

