cmake_minimum_required(VERSION 3.20)
project(falsealpha LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE Release)
endif()

find_package(Threads REQUIRED)
file(GLOB CORE_SOURCES CONFIGURE_DEPENDS cpp/src/*.cpp)
list(REMOVE_ITEM CORE_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/cpp/src/bindings.cpp)
add_library(falsealpha_core STATIC ${CORE_SOURCES})
target_include_directories(falsealpha_core PUBLIC cpp/include)
target_link_libraries(falsealpha_core PUBLIC Threads::Threads)
target_compile_options(falsealpha_core PRIVATE -Wall -Wextra)

option(FALSEALPHA_BUILD_TESTS "Build the Catch2 test suite" OFF)

if(SKBUILD)
  set(PYBIND11_FINDPYTHON ON)
  find_package(pybind11 CONFIG REQUIRED)
  pybind11_add_module(_core cpp/src/bindings.cpp)
  target_link_libraries(_core PRIVATE falsealpha_core)
  install(TARGETS _core DESTINATION falsealpha)
endif()

if(FALSEALPHA_BUILD_TESTS)
  include(FetchContent)
  FetchContent_Declare(Catch2
    GIT_REPOSITORY https://github.com/catchorg/Catch2.git
    GIT_TAG v3.7.1)
  FetchContent_MakeAvailable(Catch2)
  file(GLOB TEST_SOURCES CONFIGURE_DEPENDS cpp/tests/*.cpp)
  add_executable(core_tests ${TEST_SOURCES})
  target_link_libraries(core_tests PRIVATE falsealpha_core Catch2::Catch2WithMain)
  target_compile_options(core_tests PRIVATE -Wall -Wextra -Werror)
  enable_testing()
  add_test(NAME core_tests COMMAND core_tests)
endif()
