# 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_SOURCE_DIR}/src/util/native/lib)
set(PY_PKG_DIR_INCLUDE ${CMAKE_SOURCE_DIR}/src/util/native/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)
# ------------------------------------------------------------------
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_SOURCE_DIR}/src/util/native
)
target_link_libraries(robot_dynamics_core
    PUBLIC
        Eigen3::Eigen
)
target_compile_features(robot_dynamics_core PUBLIC cxx_std_17)

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.
# We want util/_robot_dynamics_native*.so so that:
#   from util import _robot_dynamics_native
# works.
install(
    TARGETS _robot_dynamics_native
    LIBRARY DESTINATION util
    RUNTIME DESTINATION util
)
