cmake_minimum_required(VERSION 3.20)
project(reduction_lab LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
option(ENABLE_SANITIZERS "Use address and undefined behavior sanitizers" OFF)
find_package(Threads REQUIRED)
add_library(reduction reduction.cpp)
target_compile_options(reduction PUBLIC -Wall -Wextra -Wpedantic -Werror)
target_link_libraries(reduction PUBLIC Threads::Threads)
if(ENABLE_SANITIZERS)
  target_compile_options(reduction PUBLIC -fsanitize=address,undefined -fno-omit-frame-pointer)
  target_link_options(reduction PUBLIC -fsanitize=address,undefined)
endif()
add_executable(reduction_tests tests.cpp)
target_link_libraries(reduction_tests PRIVATE reduction)
add_executable(reduction_bench benchmark.cpp)
target_link_libraries(reduction_bench PRIVATE reduction)
enable_testing()
add_test(NAME learner_correctness COMMAND reduction_tests)
