cmake_minimum_required(VERSION 3.15)
project(blasttrace_cpp_core LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)

# Find Python interpreter and development modules
find_package(Python 3.10 REQUIRED COMPONENTS Interpreter Development.Module)

# Locate pybind11 cmake config
execute_process(
  COMMAND ${Python_EXECUTABLE} -m pybind11 --cmakedir
  OUTPUT_VARIABLE pybind11_DIR
  OUTPUT_STRIP_TRAILING_WHITESPACE
)

find_package(pybind11 REQUIRED)

# Compile C++ native module with symbol stripping and RTTI/symbol hiding
pybind11_add_module(blasttrace_cpp_core cpp/blast_core.cpp)

if(UNIX AND NOT APPLE)
    target_compile_options(blasttrace_cpp_core PRIVATE -O3 -fvisibility=hidden -fvisibility-inlines-hidden -g0)
    target_link_options(blasttrace_cpp_core PRIVATE -Wl,-s -Wl,--exclude-libs,ALL)
endif()

if(MSVC)
    target_compile_options(blasttrace_cpp_core PRIVATE /O2 /Gy /MD)
endif()
