cmake_minimum_required(VERSION 3.16)
project(gomoku_engine CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE)
endif()

option(GOMOKU_NATIVE "Build with -march=native" ON)

set(GOMOKU_RELEASE_FLAGS -O3 -DNDEBUG)
if(GOMOKU_NATIVE)
    list(APPEND GOMOKU_RELEASE_FLAGS -march=native)
endif()
set(CMAKE_CXX_FLAGS_RELEASE "${GOMOKU_RELEASE_FLAGS}")
add_compile_options(-Wall -Wextra -Wshadow)

file(GLOB GOMOKU_CORE_SRC ${CMAKE_SOURCE_DIR}/engine/*.cpp)
list(REMOVE_ITEM GOMOKU_CORE_SRC ${CMAKE_SOURCE_DIR}/engine/main.cpp)

add_library(gomoku_core STATIC ${GOMOKU_CORE_SRC})
target_include_directories(gomoku_core PUBLIC ${CMAKE_SOURCE_DIR})

add_executable(gomoku_engine engine/main.cpp)
target_link_libraries(gomoku_engine PRIVATE gomoku_core)

enable_testing()
file(GLOB GOMOKU_TEST_SRC ${CMAKE_SOURCE_DIR}/tests/*.cpp)
add_executable(gomoku_tests ${GOMOKU_TEST_SRC})
target_link_libraries(gomoku_tests PRIVATE gomoku_core)
add_test(NAME gomoku_unit COMMAND gomoku_tests)
