set(LIB_NAME       ${PROJECT_NAME}ArmarXObjects)

armarx_component_set_name("${LIB_NAME}")
armarx_set_target("Library: ${LIB_NAME}")

armarx_build_if(Eigen3_FOUND "Eigen3 not available")
armarx_build_if(manif_FOUND "manif not available")

set(LIBS
    # ArmarXGui
    RemoteGui
    # RobotAPI
    RobotAPI::Core
    RobotAPIInterfaces
    aroncommon

    Eigen3::Eigen
    ${manif_LIBRARIES}
    armem_robot_state
)

set(LIB_FILES
    ObjectID.cpp
    ObjectInfo.cpp
    ObjectFinder.cpp
    ObjectPose.cpp
    ObjectPoseClient.cpp
    PoseManifoldGaussian.cpp
    ProvidedObjectPose.cpp
    Scene.cpp

    json_conversions.cpp
    ice_conversions.cpp
    aron_conversions/armarx.cpp
    aron_conversions/objpose.cpp

    plugins/ObjectPoseProviderPlugin.cpp
    plugins/ObjectPoseClientPlugin.cpp
    plugins/RequestedObjects.cpp

    predictions.cpp
    util.cpp
)
set(LIB_HEADERS
    ArmarXObjects.h

    ObjectID.h
    ObjectInfo.h
    ObjectFinder.h
    ObjectPose.h
    ObjectPoseClient.h
    PoseManifoldGaussian.h
    ProvidedObjectPose.h
    Scene.h

    forward_declarations.h
    json_conversions.h
    ice_conversions.h

    aron_conversions.h
    aron_conversions/armarx.h
    aron_conversions/objpose.h

    plugins/ObjectPoseProviderPlugin.h
    plugins/ObjectPoseClientPlugin.h
    plugins/RequestedObjects.h

    predictions.h
    util.h
)

armarx_add_library("${LIB_NAME}" "${LIB_FILES}" "${LIB_HEADERS}" "${LIBS}")

if(manif_FOUND)
    target_include_directories("${LIB_NAME}" SYSTEM PUBLIC ${manif_INCLUDE_DIR} ${manif_INCLUDE_DIRS})
endif()

add_library(${PROJECT_NAME}::ArmarXObjects ALIAS ${PROJECT_NAME}ArmarXObjects)


armarx_enable_aron_file_generation_for_target(
    TARGET_NAME
        "${LIB_NAME}"
    ARON_FILES
        aron/ObjectID.xml
        aron/ObjectPose.xml
        aron/ObjectType.xml
        aron/PoseManifoldGaussian.xml
)


# add unit tests
add_subdirectory(test)