# 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()

if(NOT TARGET _robot_dynamics_native)
    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
    )
endif()
