# arena (mctorch_native) — pybind11 extension for batched arena-MCTS
# Zero-copy TensorBridge, OpenMP parallel, PUCT formula.
# Requires: Torch, pybind11, OpenMP (provided by parent CMakeLists)

find_library(TORCH_PYTHON_LIB torch_python
    PATHS "${TORCH_INSTALL_PREFIX}/lib"
    NO_DEFAULT_PATH
)

# Core arena library
add_library(arena_core STATIC src/core/arena.cpp src/torchscript_search.cpp)
target_include_directories(arena_core PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/include
)
target_link_libraries(arena_core PUBLIC
    "${TORCH_LIBRARIES}"
    OpenMP::OpenMP_CXX
)
target_compile_options(arena_core PRIVATE ${TORCH_CXX_FLAGS})
# torchscript_search.cpp pulls in <torch/script.h> which is extremely template-heavy.
# /Zm2000 gives MSVC 20x the default compiler heap; /bigobj allows >64K symbol sections.
if(MSVC)
    target_compile_options(arena_core PRIVATE /Zm2000 /bigobj)
endif()
set_property(TARGET arena_core PROPERTY POSITION_INDEPENDENT_CODE ON)

# pybind11 Python extension
pybind11_add_module(mctorch_native bindings/py_module.cpp)
target_link_libraries(mctorch_native PRIVATE
    arena_core
    pybind11::module
    "${TORCH_PYTHON_LIB}"
)

message(STATUS "[mctorch_native] LibTorch ${Torch_VERSION}, OpenMP ${OpenMP_CXX_VERSION}")
