cmake_minimum_required(VERSION 3.18)
project(mctorch_cpp LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Locate pybind11 via the Python interpreter passed by setup.py (-DPYTHON_EXECUTABLE).
# This resolves correctly whether pybind11 is installed in a venv, conda env, or system Python.
if(DEFINED PYTHON_EXECUTABLE)
  execute_process(
    COMMAND "${PYTHON_EXECUTABLE}" -c "import pybind11; print(pybind11.get_cmake_dir())"
    OUTPUT_VARIABLE PYBIND11_CMAKE_DIR
    OUTPUT_STRIP_TRAILING_WHITESPACE
  )
  if(PYBIND11_CMAKE_DIR)
    list(APPEND CMAKE_PREFIX_PATH "${PYBIND11_CMAKE_DIR}")
  endif()
endif()
find_package(pybind11 CONFIG REQUIRED)
# CMAKE_PREFIX_PATH already includes torch's cmake dir, set by setup.py.
find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")
include_directories(${TORCH_INCLUDE_DIRS})

find_package(OpenMP REQUIRED COMPONENTS CXX)

# Outputs two extension modules:
#   mcts_libtorch  — callback-based full-MCTS-in-C++ (UCB/PUCT + virtual loss)
#   mctorch_native — arena-batched zero-copy MCTS for NN training loops
add_subdirectory(mcts_libtorch)
add_subdirectory(arena)
