cmake_minimum_required(VERSION 3.16)

project(grim_reaper VERSION 0.1.0 LANGUAGES CXX)

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

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

find_package(pybind11 REQUIRED)

pybind11_add_module(
    _core
    grim_reaper/src/binder.cpp
    grim_reaper/src/basic_ops_add.cpp
    grim_reaper/src/basic_ops_sub.cpp
    grim_reaper/src/basic_ops_mul.cpp
    grim_reaper/src/basic_ops_div.cpp
)

target_include_directories(
    _core
    PRIVATE
    grim_reaper/include
    grim_reaper/src
)

set_target_properties(
    _core
    PROPERTIES
    LIBRARY_OUTPUT_DIRECTORY
    ${CMAKE_SOURCE_DIR}/grim_reaper
)

install(
    TARGETS _core
    LIBRARY DESTINATION grim_reaper
)

if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
    target_compile_options(
        _core
        PRIVATE
        -O3
        -march=native
        -ffast-math
    )
endif()
