cmake_minimum_required(VERSION 3.18)
project(ripple_hpc LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# Python + NumPy
find_package(Python COMPONENTS Interpreter Development.Module NumPy REQUIRED)

execute_process(
  COMMAND "${Python_EXECUTABLE}" -m pybind11 --cmakedir
  OUTPUT_VARIABLE _pybind11_cmake_dir
  OUTPUT_STRIP_TRAILING_WHITESPACE
)
list(APPEND CMAKE_PREFIX_PATH "${_pybind11_cmake_dir}")

# pybind11 (来自 pip 安装的 pybind11，会提供 cmake config)
find_package(pybind11 CONFIG REQUIRED)

# 通用编译宏：避免 numpy deprecated API
add_compile_definitions(NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION)

# 一个小函数：定义扩展并安装到 ripple/kernel
function(add_ripple_ext modname source)
  pybind11_add_module(${modname} MODULE ${source})
  target_link_libraries(${modname} PRIVATE Python::Module Python::NumPy)

  # 你如果有需要，也可以对每个模块加更细 compile options
  if (MSVC)
    target_compile_options(${modname} PRIVATE /O2 /DNDEBUG /bigobj /EHsc /utf-8)
  else()
    target_compile_options(${modname} PRIVATE -O3 -DNDEBUG -fvisibility=hidden)
  endif()

  # 安装到 python 包内：ripple/kernel
  install(TARGETS ${modname}
    LIBRARY DESTINATION ripple/kernel
    RUNTIME DESTINATION ripple/kernel
    ARCHIVE DESTINATION ripple/kernel
  )
endfunction()

# 源码路径（相对项目根）
add_ripple_ext(rdf_ext        ripple/kernel/rdf_ext.cpp)
add_ripple_ext(ssf_ext        ripple/kernel/ssf_ext.cpp)
add_ripple_ext(vhf_ext        ripple/kernel/vhf_ext.cpp)
add_ripple_ext(msd_ext        ripple/kernel/msd_ext.cpp)
add_ripple_ext(cmsd_ext       ripple/kernel/cmsd_ext.cpp)
add_ripple_ext(block_mcmc_ext ripple/kernel/block_mcmc_ext.cpp)
