# ensure correct project definition somewhere above this snippet:
# project(covalent-base LANGUAGES CXX)

find_package(pybind11 REQUIRED)
find_package(Eigen3 REQUIRED)

set(PY_PKG_DIR_LIB ${CMAKE_CURRENT_LIST_DIR}/lib)
set(PY_PKG_DIR_INCLUDE ${CMAKE_CURRENT_LIST_DIR}/include)

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)

# ------------------------------------------------------------------
# URDF-native kinematics extension (non-DH)
# ------------------------------------------------------------------
if(NOT TARGET robot_dynamics_core)
    add_library(robot_dynamics_core STATIC
        ${PY_PKG_DIR_INCLUDE}/robot_dynamics.cpp
    )
    set_target_properties(robot_dynamics_core PROPERTIES POSITION_INDEPENDENT_CODE ON)
    target_include_directories(robot_dynamics_core
        PUBLIC
            ${CMAKE_CURRENT_SOURCE_DIR}
            ${CMAKE_CURRENT_LIST_DIR}
    )
    target_link_libraries(robot_dynamics_core
        PUBLIC
            Eigen3::Eigen
    )
    target_compile_features(robot_dynamics_core PUBLIC cxx_std_17)
endif()

pybind11_add_module(_robot_dynamics_native
    ${PY_PKG_DIR_INCLUDE}/robot_dynamics_bindings.cpp
)

target_link_libraries(_robot_dynamics_native
    PRIVATE
        robot_dynamics_core
)

target_include_directories(_robot_dynamics_native
    PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}
)

target_compile_features(_robot_dynamics_native PRIVATE cxx_std_17)

# Tell scikit-build-core where this .so should land in the wheel.
# The Python imports expect: from reforge_core.util import _robot_dynamics_native
install(
    TARGETS _robot_dynamics_native
    LIBRARY DESTINATION reforge_core/util
    RUNTIME DESTINATION reforge_core/util
)
