From 9f0e8177f686be902e39a08942f618be0a8cf556 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Tue, 7 Jul 2026 15:00:10 +0200 Subject: [PATCH 01/32] cmake: remove cmake submodule and add get-jrl-cmakemodules.cmake --- .gitmodules | 3 -- cmake | 1 - cmake/get-jrl-cmakemodules.cmake | 53 ++++++++++++++++++++++++++++++++ pixi.toml | 2 ++ 4 files changed, 55 insertions(+), 4 deletions(-) delete mode 160000 cmake create mode 100644 cmake/get-jrl-cmakemodules.cmake diff --git a/.gitmodules b/.gitmodules index b312ac8b42..188396078e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "cmake"] - path = cmake - url = https://github.com/jrl-umi3218/jrl-cmakemodules [submodule "models/example-robot-data"] path = models/example-robot-data url = https://github.com/Gepetto/example-robot-data.git diff --git a/cmake b/cmake deleted file mode 160000 index 648efca10f..0000000000 --- a/cmake +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 648efca10ffc9081c633e5d23d8b069e89eee341 diff --git a/cmake/get-jrl-cmakemodules.cmake b/cmake/get-jrl-cmakemodules.cmake new file mode 100644 index 0000000000..1966aeacb9 --- /dev/null +++ b/cmake/get-jrl-cmakemodules.cmake @@ -0,0 +1,53 @@ +# Get jrl-cmakemodules package + +# Option 1: pass -DJRL_CMAKEMODULES_SOURCE_DIR=... to cmake command line +if(JRL_CMAKEMODULES_SOURCE_DIR) + message( + DEBUG + "JRL_CMAKEMODULES_SOURCE_DIR variable set, adding jrl-cmakemodules from source directory: ${JRL_CMAKEMODULES_SOURCE_DIR}" + ) + add_subdirectory(${JRL_CMAKEMODULES_SOURCE_DIR} jrl-cmakemodules) + return() +endif() + +# Option 2: use JRL_CMAKEMODULES_SOURCE_DIR environment variable (pixi might unset it, prefer option 1) +if(ENV{JRL_CMAKEMODULES_SOURCE_DIR}) + message( + DEBUG + "JRL_CMAKEMODULES_SOURCE_DIR environement variable set, adding jrl-cmakemodules from source directory: ${JRL_CMAKEMODULES_SOURCE_DIR}" + ) + add_subdirectory(${JRL_CMAKEMODULES_SOURCE_DIR} jrl-cmakemodules) + return() +endif() + +# Try to look for the installed package +message(DEBUG "Looking for jrl-cmakemodules using find_package().") +find_package(jrl-cmakemodules 1.2.0 CONFIG QUIET) + +# If we have the package, we are done. +if(jrl-cmakemodules_FOUND) + message(DEBUG "Found jrl-cmakemodules package via find_package().") + return() +else() + message(DEBUG "jrl-cmakemodules package not found using find_package().") +endif() + +# Fallback to FetchContent if not found +set(JRL_GIT_REPOSITORY "https://github.com/ahoarau/jrl-cmakemodules.git") +set(JRL_GIT_TAG "jrl-next") + +message( + DEBUG + "Fetching jrl-cmakemodules using FetchContent: + GIT_REPOSITORY: ${JRL_GIT_REPOSITORY} + GIT_TAG : ${JRL_GIT_TAG} +" +) + +include(FetchContent) +FetchContent_Declare( + jrl-cmakemodules + GIT_REPOSITORY ${JRL_GIT_REPOSITORY} + GIT_TAG ${JRL_GIT_TAG} +) +FetchContent_MakeAvailable(jrl-cmakemodules) diff --git a/pixi.toml b/pixi.toml index 95cf768f04..e5caec227e 100644 --- a/pixi.toml +++ b/pixi.toml @@ -12,6 +12,8 @@ preview = ["pixi-build"] ccache = ">=4.9.1" cxx-compiler = ">=1.7.0" cmake = ">=3.10" +jrl-cmakemodules = ">=2.0.0" +example-robot-data = ">=5.0.0" ninja = ">=1.11" pkg-config = ">=0.29.2" doxygen = ">=1.12.0" From 763a58d96fefe8763ce991c314a2ef034b3cdc0a Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Tue, 7 Jul 2026 17:05:33 +0200 Subject: [PATCH 02/32] port pinocchio_default and pinocchio_collision --- CMakeLists.txt | 1362 ++++++++++++++++++++---------------------------- 1 file changed, 565 insertions(+), 797 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dc95c6f58e..c7c1b32257 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,856 +1,624 @@ -# # Copyright (c) 2015-2025 CNRS INRIA -# Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. -# +# TODO: keep Wandercraft copyright ? +# Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. cmake_minimum_required(VERSION 3.22) -set(PROJECT_NAME pinocchio) -set(PROJECT_DESCRIPTION - "A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives" +project( + pinocchio + VERSION 0.1.0 + DESCRIPTION "A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives" + HOMEPAGE_URL "http://github.com/stack-of-tasks/pinocchio" + LANGUAGES CXX ) -set(PROJECT_URL "http://github.com/stack-of-tasks/pinocchio") -set(PROJECT_CUSTOM_HEADER_EXTENSION "hpp") -if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - set(PROJECT_USE_CMAKE_EXPORT TRUE) -endif() -set(PROJECT_USE_KEYWORD_LINK_LIBRARIES TRUE) -set(PROJECT_COMPATIBILITY_VERSION AnyNewerVersion) -set(PINOCCHIO_PROJECT_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}) -# To enable jrl-cmakemodules compatibility with workspace we must define the two following lines -set(PROJECT_AUTO_RUN_FINALIZE FALSE) -set(PROJECT_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}) -# Disable -Werror on Unix for now. -set(CXX_DISABLE_WERROR True) -set(CMAKE_VERBOSE_MAKEFILE True) +include(cmake/get-jrl-cmakemodules.cmake) + +jrl_configure_defaults() # ---------------------------------------------------- # --- OPTIONS --------------------------------------- -# Need to be set before including base.cmake # ---------------------------------------------------- -option(INSTALL_DOCUMENTATION "Generate and install the documentation" OFF) -option(PINOCCHIO_DOXYGEN_USE_MATHJAX "Avoid latex at build time" OFF) - -# Check if the submodule cmake have been initialized -set(JRL_CMAKE_MODULES "${CMAKE_CURRENT_LIST_DIR}/cmake") -if(EXISTS "${JRL_CMAKE_MODULES}/base.cmake") - message(STATUS "JRL cmakemodules found in 'cmake/' git submodule") -else() - find_package(jrl-cmakemodules QUIET CONFIG) - if(jrl-cmakemodules_FOUND) - get_property( - JRL_CMAKE_MODULES - TARGET jrl-cmakemodules::jrl-cmakemodules - PROPERTY INTERFACE_INCLUDE_DIRECTORIES - ) - message( - STATUS - "JRL cmakemodules found on system at ${JRL_CMAKE_MODULES}" - ) - else() - message(STATUS "JRL cmakemodules not found. Let's fetch it.") - include(FetchContent) - FetchContent_Declare( - "jrl-cmakemodules" - GIT_REPOSITORY "https://github.com/jrl-umi3218/jrl-cmakemodules.git" - ) - FetchContent_MakeAvailable("jrl-cmakemodules") - FetchContent_GetProperties( - "jrl-cmakemodules" - SOURCE_DIR JRL_CMAKE_MODULES - ) - endif() -endif() +jrl_option(INSTALL_DOCUMENTATION "Generate and install the documentation" OFF) +jrl_option(PINOCCHIO_DOXYGEN_USE_MATHJAX "Avoid latex at build time" OFF) +#TODO : remove intermediate option if(PINOCCHIO_DOXYGEN_USE_MATHJAX) set(DOXYGEN_USE_MATHJAX YES) endif() - -# ---------------------------------------------------- -# --- Policy ----------------------------------------- -# CMake Policy setup -# ---------------------------------------------------- -# Policy can be removed when cmake_minimum_required is updated. - -# We also set CMAKE_POLICY_DEFAULT_CMPXXXX because CMake modules can reset policy and redefine some -# macros like `find_dependency` that will not use our policy. - -# Use BoostConfig module distributed by boost library instead of using FindBoost module distributed -# by CMake (to remove in 3.30). This policy is not working when using clang-cl. -if(NOT WIN32 OR NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") - if(POLICY CMP0167) - cmake_policy(SET CMP0167 NEW) - set(CMAKE_POLICY_DEFAULT_CMP0167 NEW) - endif() -endif() -# install() DESTINATION paths are normalized (to remove in 3.31). -if(POLICY CMP0177) - cmake_policy(SET CMP0177 NEW) - set(CMAKE_POLICY_DEFAULT_CMP0177 NEW) -endif() -include("${JRL_CMAKE_MODULES}/base.cmake") - -compute_project_args(PROJECT_ARGS LANGUAGES CXX) -project(${PROJECT_NAME} ${PROJECT_ARGS}) - -set(INSTALL_PKG_CONFIG_FILE OFF CACHE BOOL "" FORCE) - -include("${JRL_CMAKE_MODULES}/tracy.cmake") -include("${JRL_CMAKE_MODULES}/python.cmake") -include("${JRL_CMAKE_MODULES}/boost.cmake") -include("${JRL_CMAKE_MODULES}/ide.cmake") -include("${JRL_CMAKE_MODULES}/apple.cmake") -include(CMakeDependentOption) - -# If needed, set CMake policy for APPLE systems -apply_default_apple_configuration() - -# Force C++ standard to be C++17 at least -check_minimal_cxx_standard(17 ENFORCE) - -# --- OPTIONS ---------------------------------------- -option(BUILD_BENCHMARK "Build the benchmarks" OFF) -option(BUILD_EXAMPLES "Build the examples" ON) -option(BUILD_UTILS "Build the utils" OFF) -option( - GENERATE_PYTHON_STUBS - "Generate the Python stubs associated to the Python library" - OFF -) -option( - BUILD_WITH_COMMIT_VERSION - "Build libraries by setting specific commit version" - OFF -) - -if(DEFINED BUILD_UNIT_TESTS) - message( - AUTHOR_WARNING - "BUILD_UNIT_TESTS is deprecated. Use BUILD_TESTING instead.\ +jrl_option(BUILD_BENCHMARK "Build the benchmarks" OFF) +jrl_option(BUILD_EXAMPLES "Build the examples" ON) +jrl_option(BUILD_UTILS "Build the utils" OFF) +jrl_option(GENERATE_PYTHON_STUBS "Generate the Python stubs associated to the Python library" OFF) +jrl_option(BUILD_WITH_COMMIT_VERSION "Build libraries by setting specific commit version" OFF) +# TODO : remove ? deprecated +jrl_option(BUILD_UNIT_TESTS "BUILD_UNIT_TESTS is deprecated. Use BUILD_TESTING instead.\ If you are manually building Pinocchio from source in an existing build folder,\ - we suggest that you delete your build folder and make a new one." - ) - set(BUILD_TESTING ${BUILD_UNIT_TESTS}) -endif(DEFINED BUILD_UNIT_TESTS) - -option( - BUILD_ADVANCED_TESTING - "Build the advanced tests (multiprecision, etc.) of Pinocchio" - OFF -) -option(PINOCCHIO_BUILD_MPFR_TESTING "Build MPFR dependent tests" OFF) - -# --- OPTIONAL DEPENDENCIES ------------------------- -option( - BUILD_WITH_URDF_SUPPORT - "Build the library with the URDF format support" - ON -) -option( - BUILD_WITH_SDF_SUPPORT - "Build the library with the SDF format support" - OFF -) -option( - BUILD_WITH_COLLISION_SUPPORT - "Build the library with the collision support (required coal)" - OFF -) -option( - BUILD_WITH_AUTODIFF_SUPPORT - "Build the library with the automatic differentiation support (via CppAD)" - OFF -) -option( - BUILD_WITH_CASADI_SUPPORT - "Build the library with the support of CASADI" - OFF -) + we suggest that you delete your build folder and make a new one." ON ) +jrl_option(BUILD_TESTING "build the tests" ON) +if (BUILD_UNIT_TESTS) + set(BUILD_TESTING ${BUILD_UNIT_TESTS}) +endif() +jrl_option(BUILD_ADVANCED_TESTING "Build the advanced tests (multiprecision, etc.) of Pinocchio" OFF) +jrl_option(PINOCCHIO_BUILD_MPFR_TESTING "Build MPFR dependent tests" OFF) +jrl_option(BUILD_WITH_URDF_SUPPORT "Build the library with the URDF format support" ON) +jrl_option(BUILD_WITH_SDF_SUPPORT "Build the library with the SDF format support" OFF) +jrl_option(BUILD_WITH_COLLISION_SUPPORT "Build the library with the collision support (required coal)" OFF) +jrl_option(BUILD_WITH_AUTODIFF_SUPPORT "Build the library with the automatic differentiation support (via CppAD)" OFF) +jrl_option( BUILD_WITH_CASADI_SUPPORT "Build the library with the support of CASADI" OFF) # cppadcodgen don't build well with CL if(NOT WIN32) - option( - BUILD_WITH_CODEGEN_SUPPORT - "Build the library with the support of code generation (via CppADCodeGen)" - OFF - ) + jrl_option(BUILD_WITH_CODEGEN_SUPPORT "Build the library with the support of code generation (via CppADCodeGen)" OFF) endif() -option( - BUILD_WITH_OPENMP_SUPPORT - "Build the library with the OpenMP support" - OFF -) -cmake_dependent_option( - BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT - "Build the Python interface with Boost.Multiprecision MPFR support" - OFF - BUILD_PYTHON_INTERFACE +jrl_option(BUILD_WITH_OPENMP_SUPPORT "Build the library with the OpenMP support" OFF) +# TODO : why not present with jrl v1 +jrl_option(BUILD_PYTHON_INTERFACE "Build the Python bindings" ON) +jrl_option(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT "Build the Python interface with Boost.Multiprecision MPFR support" OFF + CONDITION BUILD_PYTHON_INTERFACE + FALLBACK OFF ) -cmake_dependent_option( - BUILD_WITH_LIBPYTHON - "Build the library with Python format support" +jrl_option(BUILD_WITH_LIBPYTHON "Build the library with Python format support" ON - "BUILD_PYTHON_INTERFACE" - OFF + CONDITION BUILD_PYTHON_INTERFACE + FALLBACK OFF ) if(APPLE) - option( - BUILD_WITH_ACCELERATE_SUPPORT - "Build Pinocchio with the Accelerate support" - OFF - ) + jrl_option(BUILD_WITH_ACCELERATE_SUPPORT "Build Pinocchio with the Accelerate support" OFF) else(APPLE) set(BUILD_WITH_ACCELERATE_SUPPORT FALSE) -endif(APPLE) - -option(INITIALIZE_WITH_NAN "Initialize Eigen entries with NaN" OFF) -option( - ASSERT_ON_EXCEPTION - "Turns Pinocchio excpetions into asserts for debug purposes" - OFF -) - -option( - ENABLE_TEMPLATE_INSTANTIATION - "Template instantiation of the main library" - ON -) - -option( - PINOCCHIO_BUILD_WITH_TRACY - "Build with tracy profiler for performance analysis" - OFF -) - -option( - BUILD_WITH_RTSAN - "Build with the Realtime Sanitizer (clang >=20, linux/mac only)" - OFF -) - -option( - PINOCCHIO_INSTALL_DEPRECATED_HEADERS - "Use and install deprecated headers" - ON -) - +endif() +jrl_option(INITIALIZE_WITH_NAN "Initialize Eigen entries with NaN" OFF) +jrl_option(ASSERT_ON_EXCEPTION "Turns Pinocchio excpetions into asserts for debug purposes" OFF) +jrl_option(ENABLE_TEMPLATE_INSTANTIATION "Template instantiation of the main library" ON) +jrl_option(PINOCCHIO_BUILD_WITH_TRACY "Build with tracy profiler for performance analysis" OFF) +jrl_option( BUILD_WITH_RTSAN "Build with the Realtime Sanitizer (clang >=20, linux/mac only)" OFF) +jrl_option(PINOCCHIO_INSTALL_DEPRECATED_HEADERS "Use and install deprecated headers" ON) # PCH and ccache doesn't play well together so we deactivate # PCH use by default -option( - PINOCCHIO_BUILD_BINDING_WITH_PCH - "Use PCH to accelerate binding build" - OFF -) -option(PINOCCHIO_BUILD_VISUALIZERS "Build the pinocchio visualizers library" ON) - -set(PINOCCHIO_MODEL_DIR "${PROJECT_SOURCE_DIR}/models") -if(BUILD_BENCHMARK OR BUILD_EXAMPLES OR BUILD_TESTING) - # example-robot-data is required - if(EXAMPLE_ROBOT_DATA_MODEL_DIR) - file( - REAL_PATH "${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - EXAMPLE_ROBOT_DATA_MODEL_DIR - EXPAND_TILDE - ) - message( - STATUS - "Using provided example-robot-data at: ${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - ) - elseif( - EXISTS - "${CMAKE_CURRENT_LIST_DIR}/models/example-robot-data/CMakeLists.txt" - ) - set(EXAMPLE_ROBOT_DATA_MODEL_DIR - "${PINOCCHIO_MODEL_DIR}/example-robot-data/robots" - ) - else() - find_package(example-robot-data REQUIRED CONFIG) - get_target_property( - EXAMPLE_ROBOT_DATA_MODEL_DIR_DEF - example-robot-data::example-robot-data - INTERFACE_COMPILE_DEFINITIONS - ) - string( - REPLACE "EXAMPLE_ROBOT_DATA_MODEL_DIR=" - "" - EXAMPLE_ROBOT_DATA_MODEL_DIR_QUOTES - "${EXAMPLE_ROBOT_DATA_MODEL_DIR_DEF}" - ) - string( - REPLACE "\"" - "" - EXAMPLE_ROBOT_DATA_MODEL_DIR - "${EXAMPLE_ROBOT_DATA_MODEL_DIR_QUOTES}" - ) - message( - STATUS - "Using system example-robot-data at: ${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - ) - endif() -endif() - -if(BUILD_WITH_CODEGEN_SUPPORT) - set(BUILD_WITH_CPPAD_CODEGEN_SUPPORT TRUE) - set(BUILD_WITH_AUTODIFF_SUPPORT ON) -endif() -if(BUILD_WITH_AUTODIFF_SUPPORT) - set(BUILD_WITH_CPPAD_SUPPORT TRUE) -endif() -if(BUILD_WITH_LIBPYTHON) - set(BUILD_WITH_PYTHON_PARSER_SUPPORT TRUE) -endif() - -if(INITIALIZE_WITH_NAN) - message(STATUS "Initialize with NaN all the Eigen entries.") -endif(INITIALIZE_WITH_NAN) - -if(ENABLE_TEMPLATE_INSTANTIATION) - message(STATUS "Template instantiation of the main library") -endif(ENABLE_TEMPLATE_INSTANTIATION) - -macro(TAG_LIBRARY_VERSION target) - set_target_properties(${target} PROPERTIES SOVERSION ${PROJECT_VERSION}) -endmacro(TAG_LIBRARY_VERSION) +jrl_option(PINOCCHIO_BUILD_BINDING_WITH_PCH "Use PCH to accelerate binding build" OFF) +jrl_option(PINOCCHIO_BUILD_VISUALIZERS "Build the pinocchio visualizers library" ON) # ---------------------------------------------------- # --- DEPENDENCIES ----------------------------------- # ---------------------------------------------------- -set(CMAKE_MODULE_PATH - "${JRL_CMAKE_MODULES}/find-external/CppAD/" - ${CMAKE_MODULE_PATH} -) - -add_project_dependency(Eigen3 REQUIRED) - -if(BUILD_WITH_URDF_SUPPORT) - add_project_dependency(urdfdom_headers REQUIRED) - add_project_dependency(urdfdom REQUIRED) - set(urdfdom_VERSION ${urdfdom_headers_VERSION}) - - if(${urdfdom_VERSION} VERSION_GREATER "0.4.2") - check_minimal_cxx_standard(11 ENFORCE) - message( - STATUS - "Since urdfdom >= 1.0.0, the default C++ standard is C++11. The project is then compiled with C++11 standard." - ) - endif() -endif() - -if(BUILD_WITH_SDF_SUPPORT) - include(${JRL_CMAKE_MODULES}/sdformat.cmake) - search_for_sdformat(REQUIRED) - if(SDFormat_FOUND) - check_minimal_cxx_standard(11 REQUIRED) - include_directories(${SDFormat_INCLUDE_DIRS}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDFormat_CXX_FLAGS}") - endif() -endif() - -if(BUILD_WITH_URDF_SUPPORT OR BUILD_WITH_SDF_SUPPORT) - set(BUILD_WITH_PARSERS_SUPPORT TRUE) -else() - set(BUILD_WITH_PARSERS_SUPPORT FALSE) -endif() - -# -- tracy (optional) -if(PINOCCHIO_BUILD_WITH_TRACY) - # assume it is installed somewhere - add_project_dependency(Tracy REQUIRED) - set_target_properties( - Tracy::TracyClient - PROPERTIES POSITION_INDEPENDENT_CODE True - ) - if(${Tracy_FOUND}) - message(STATUS "Tracy found on your system at ${Tracy_DIR}") - else() - message( - FATAL_ERROR - "Pinocchio support for tracy is enabled, but tracy was not found on your system." - " Install it, or set the option PINOCCHIO_DOWNLOAD_TRACY to ON so we can fetch it." - ) - endif() -endif(PINOCCHIO_BUILD_WITH_TRACY) - -if(BUILD_WITH_AUTODIFF_SUPPORT) - # Check first CppADCodeGen - if(BUILD_WITH_CODEGEN_SUPPORT) - add_project_dependency(cppadcg 2.4.1 REQUIRED) - endif(BUILD_WITH_CODEGEN_SUPPORT) - - add_project_dependency( - cppad 20180000.0 REQUIRED - FIND_EXTERNAL "CppAD" - ) -endif(BUILD_WITH_AUTODIFF_SUPPORT) - -if(BUILD_WITH_CASADI_SUPPORT) - add_project_dependency(casadi 3.4.5 REQUIRED) - - # Normalize CasADi link target across versions. Prefer imported target (casadi::casadi), then - # legacy target (casadi) - if(NOT TARGET casadi::casadi AND TARGET casadi) - add_library(casadi::casadi ALIAS casadi) - endif() -endif(BUILD_WITH_CASADI_SUPPORT) - -if(BUILD_WITH_OPENMP_SUPPORT) - add_project_dependency(OpenMP REQUIRED) -endif() - -if(BUILD_WITH_EXTRA_SUPPORT) - add_project_dependency(Qhull COMPONENTS qhullcpp qhull_r REQUIRED) - message(STATUS "Found Qhull.") -endif() - -set_boost_default_options() -export_boost_default_options() -add_project_dependency(Boost REQUIRED COMPONENTS filesystem serialization) -if(Boost_VERSION_STRING VERSION_LESS 1.81) - if(BUILD_WITH_URDF_SUPPORT AND "${urdfdom_VERSION}" VERSION_GREATER "0.4.2") - check_minimal_cxx_standard(11 ENFORCE) - message( - STATUS - "Since urdfdom >= 1.0.0, the default C++ standard is C++11. The project is then compiled with C++11 standard." - ) - endif() -else() - # Boost.Math will be C++14 starting in July 2023 (Boost 1.82 release) - check_minimal_cxx_standard(14 ENFORCE) -endif() - -if(BUILD_PYTHON_INTERFACE) - message( - STATUS - "The Python bindings of Pinocchio will be compiled along the main library. If you want to disable this feature, please set the option BUILD_PYTHON_INTERFACE to OFF." - ) - - set(PYTHON_COMPONENTS Interpreter Development NumPy) - findpython(REQUIRED) - add_project_dependency(eigenpy 2.7.10 REQUIRED) - if(BUILD_STANDALONE_PYTHON_INTERFACE) - add_project_dependency(${PROJECT_NAME} REQUIRED CONFIG) - endif() +jrl_find_package(Eigen3 CONFIG REQUIRED EXPECTED_TARGETS Eigen3::Eigen) +jrl_find_package(Boost CONFIG REQUIRED COMPONENTS serialization filesystem + EXPECTED_TARGETS Boost::boost Boost::serialization Boost::filesystem +) - if(BUILD_WITH_URDF_SUPPORT) - # console_bridge is urdfdom dependency. - # - # We bind some enum of this library and then must link against it. - add_project_dependency(console_bridge REQUIRED) - endif() -else() - message( - STATUS - "Pinocchio won't be compiled with its Python bindings. If you want to enable this feature, please set the option BUILD_PYTHON_INTERFACE to ON." - ) -endif() +set(PINOCCHIO_MODEL_DIR "${PROJECT_SOURCE_DIR}/models") +jrl_find_package(example-robot-data CONFIG REQUIRED EXPECTED_TARGETS example-robot-data::example-robot-data) if(BUILD_WITH_COLLISION_SUPPORT) - add_project_dependency(coal REQUIRED) + jrl_find_package(coal REQUIRED) endif() +# ---------------------------------------------------- +# --- MAIN LIBRARY ----------------------------------- +# ---------------------------------------------------- -if(BUILD_WITH_ACCELERATE_SUPPORT) - if(NOT ${Eigen3_VERSION} VERSION_GREATER_EQUAL "3.4.90") - message( - FATAL_ERROR - "Your version of Eigen is too low. Should be at least 3.4.90. Current version is ${Eigen3_VERSION}." - ) - endif() - - set(CMAKE_MODULE_PATH - ${JRL_CMAKE_MODULES}/find-external/Accelerate - ${CMAKE_MODULE_PATH} - ) - # FIND_EXTERNAL "Accelerate". - # - # We don't export yet as there might be an issue on AMR64 platforms. - find_package(Accelerate REQUIRED) - message(STATUS "Build with Accelerate support framework.") - add_definitions(-DPINOCCHIO_WITH_ACCELERATE_SUPPORT) -endif() +add_library(pinocchio_headers INTERFACE) +target_compile_features(pinocchio_headers INTERFACE cxx_std_17) +jrl_target_generate_config_header(pinocchio_headers INTERFACE FILENAME pinocchio/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio) +jrl_target_generate_warning_header(pinocchio_headers INTERFACE FILENAME pinocchio/warning.hpp LIBRARY_NAME pinocchio) +jrl_target_generate_deprecated_header(pinocchio_headers INTERFACE FILENAME pinocchio/deprecated.hpp LIBRARY_NAME pinocchio) +jrl_target_generate_tracy_header(pinocchio_headers INTERFACE FILENAME pinocchio/tracy.hpp LIBRARY_NAME pinocchio) -if( - PINOCCHIO_BUILD_MPFR_TESTING - OR BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT +target_compile_definitions(pinocchio_headers INTERFACE + $<$:EIGEN_INITIALIZE_MATRICES_BY_NAN> ) - message(STATUS "Build with MPFR support") - set(CMAKE_MODULE_PATH - "${JRL_CMAKE_MODULES}/find-external/GMP" - "${JRL_CMAKE_MODULES}/find-external/MPFR" - ${CMAKE_MODULE_PATH} - ) - find_package(GMP REQUIRED 6.0.0) - find_package(MPFR REQUIRED 4.0.0) -endif() -# Sources definition -include(sources.cmake) - -# Dependency free headers -list( - APPEND ${PROJECT_NAME}_CORE_HEADERS - ${${PROJECT_NAME}_CORE_PUBLIC_HEADERS} - ${${PROJECT_NAME}_CORE_PRIVATE_HEADERS} - ${${PROJECT_NAME}_CORE_GENERATED_PUBLIC_HEADERS} +target_compile_definitions(pinocchio_headers INTERFACE + INTERFACE + BOOST_MPL_LIMIT_LIST_SIZE=30 + BOOST_MPL_LIMIT_VECTOR_SIZE=30 + BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + BOOST_FUSION_INVOKE_MAX_ARITY=12 + $ ) -# Casadi, cppad and cppadcg are still installed. -# User should link by himself with the right library to include them. -list( - APPEND ${PROJECT_NAME}_CORE_HEADERS - ${${PROJECT_NAME}_CASADI_PUBLIC_HEADERS} - ${${PROJECT_NAME}_CASADI_PRIVATE_HEADERS} - ${${PROJECT_NAME}_CPPAD_PUBLIC_HEADERS} - ${${PROJECT_NAME}_CPPAD_PRIVATE_HEADERS} - ${${PROJECT_NAME}_CPPADCG_PUBLIC_HEADERS} - ${${PROJECT_NAME}_CPPADCG_PRIVATE_HEADERS} +target_link_libraries( + pinocchio_headers + INTERFACE + Eigen3::Eigen + Boost::boost + Boost::serialization ) -# Header only part + deprecated -if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) - list( - APPEND ${PROJECT_NAME}_CORE_HEADERS - ${${PROJECT_NAME}_CORE_DEPRECATED_HEADERS} - ) - list( - APPEND ${PROJECT_NAME}_CORE_HEADERS - ${${PROJECT_NAME}_CPPADCG_DEPRECATED_HEADERS} - ) -endif() - -# Template instantiation sources -if(ENABLE_TEMPLATE_INSTANTIATION) - list( - APPEND ${PROJECT_NAME}_CORE_SOURCES - ${${PROJECT_NAME}_TEMPLATE_INSTANTIATION_SOURCES} - ) -endif() - -# OpenMP sources -if(BUILD_WITH_OPENMP_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PARALLEL_HEADERS - ${${PROJECT_NAME}_PARALLEL_PUBLIC_HEADERS} - ${${PROJECT_NAME}_PARALLEL_PRIVATE_HEADERS} - ) - - # OpenMP + deprecated - if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) - list( - APPEND ${PROJECT_NAME}_PARALLEL_HEADERS - ${${PROJECT_NAME}_PARALLEL_DEPRECATED_HEADERS} - ) - endif() - - # Bindings - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_SOURCES - ${${PROJECT_NAME}_BINDINGS_PYTHON_PARALLEL_SOURCES} - ) - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_PUBLIC_HEADERS - ${${PROJECT_NAME}_BINDINGS_PYTHON_PARALLEL_PUBLIC_HEADERS} - ) -endif() - -# Collision sources -if(BUILD_WITH_COLLISION_SUPPORT) - list( - APPEND ${PROJECT_NAME}_COLLISION_HEADERS - ${${PROJECT_NAME}_COLLISION_PUBLIC_HEADERS} - ${${PROJECT_NAME}_COLLISION_PRIVATE_HEADERS} - ) - - if(ENABLE_TEMPLATE_INSTANTIATION) - list( - APPEND ${PROJECT_NAME}_COLLISION_SOURCES - ${${PROJECT_NAME}_COLLISION_TEMPLATE_INSTANTIATION_SOURCES} - ) - endif() - - # Collision + OpenMP - if(BUILD_WITH_OPENMP_SUPPORT) - list( - APPEND ${PROJECT_NAME}_COLLISION_HEADERS - ${${PROJECT_NAME}_COLLISION_PARALLEL_PUBLIC_HEADERS} - ${${PROJECT_NAME}_COLLISION_PARALLEL_PRIVATE_HEADERS} - ) - endif() - - # Collision + Deprecated - if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) - list( - APPEND ${PROJECT_NAME}_COLLISION_HEADERS - ${${PROJECT_NAME}_COLLISION_DEPRECATED_HEADERS} - ) - endif() - - # Bindings - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_SOURCES - ${${PROJECT_NAME}_BINDINGS_GRAPH_GEOMETRY_SOURCES} - ) - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_SOURCES - ${${PROJECT_NAME}_BINDINGS_PYTHON_COLLISION_SOURCES} - ) - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_PUBLIC_HEADERS - ${${PROJECT_NAME}_BINDINGS_PYTHON_COLLISION_PUBLIC_HEADERS} - ) - if(BUILD_WITH_OPENMP_SUPPORT) - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_SOURCES - ${${PROJECT_NAME}_BINDINGS_PYTHON_COLLISION_PARALLEL_SOURCES} - ) - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_PUBLIC_HEADERS - ${${PROJECT_NAME}_BINDINGS_PYTHON_COLLISION_PARALLEL_PUBLIC_HEADERS} - ) - endif() -endif() - -# Dependencies free parsers -if(BUILD_WITH_PARSERS_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PARSERS_HEADERS - ${${PROJECT_NAME}_PARSERS_PUBLIC_HEADERS} - ${${PROJECT_NAME}_PARSERS_PRIVATE_HEADERS} - ) - - if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) - list( - APPEND ${PROJECT_NAME}_PARSERS_HEADERS - ${${PROJECT_NAME}_PARSERS_DEPRECATED_HEADERS} - ) - endif() - - # Collision + parsers sources - if(BUILD_WITH_COLLISION_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PARSERS_SOURCES - ${${PROJECT_NAME}_GEOMETRY_SOURCES} - ) - endif() -endif() - -# URDF parser sources -if(BUILD_WITH_URDF_SUPPORT) - list(APPEND ${PROJECT_NAME}_PARSERS_SOURCES ${${PROJECT_NAME}_URDF_SOURCES}) - list( - APPEND ${PROJECT_NAME}_PARSERS_HEADERS - ${${PROJECT_NAME}_URDF_PUBLIC_HEADERS} - ${${PROJECT_NAME}_URDF_PRIVATE_HEADERS} - ) - - # URDF parsers + deprecated - if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) - list( - APPEND ${PROJECT_NAME}_PARSERS_HEADERS - ${${PROJECT_NAME}_URDF_DEPRECATED_HEADERS} - ) - endif() -endif() - -# SDF parser sources -if(BUILD_WITH_SDF_SUPPORT) - list(APPEND ${PROJECT_NAME}_PARSERS_SOURCES ${${PROJECT_NAME}_SDF_SOURCES}) - list( - APPEND ${PROJECT_NAME}_PARSERS_HEADERS - ${${PROJECT_NAME}_SDF_PUBLIC_HEADERS} - ${${PROJECT_NAME}_SDF_PRIVATE_HEADERS} - ) - - # SDF parsers + deprecated - if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) - list( - APPEND ${PROJECT_NAME}_PARSERS_HEADERS - ${${PROJECT_NAME}_SDF_DEPRECATED_HEADERS} - ) - endif() -endif() - -# Python parser sources -if(BUILD_WITH_PYTHON_PARSER_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PYTHON_PARSER_HEADERS - ${${PROJECT_NAME}_PYTHON_PARSER_PUBLIC_HEADERS} - ) -endif() - -# Extra sources -if(BUILD_WITH_EXTRA_SUPPORT) - list(APPEND ${PROJECT_NAME}_EXTRA_SOURCES ${${PROJECT_NAME}_EXTRA_SOURCES}) - list( - APPEND ${PROJECT_NAME}_EXTRA_HEADERS - ${${PROJECT_NAME}_EXTRA_PUBLIC_HEADERS} - ${${PROJECT_NAME}_EXTRA_PRIVATE_HEADERS} - ) -endif() - -list( - APPEND ${PROJECT_NAME}_VISUALIZERS_HEADERS - ${${PROJECT_NAME}_VISUALIZERS_PUBLIC_HEADERS} - ${${PROJECT_NAME}_VISUALIZERS_PRIVATE_HEADERS} +target_include_directories( + pinocchio_headers + INTERFACE + $ + $ ) -# List headers to install -list(APPEND ${PROJECT_NAME}_HEADERS ${${PROJECT_NAME}_CORE_HEADERS}) - -if(BUILD_WITH_OPENMP_SUPPORT) - list(APPEND ${PROJECT_NAME}_HEADERS ${${PROJECT_NAME}_PARALLEL_HEADERS}) -endif() +# Dependency free headers +# Root, algorithm, common, containers, math, multibody, serialization, spatial, utils +jrl_target_headers(pinocchio_headers PUBLIC + HEADERS + include/pinocchio/algorithm/aba-derivatives.hpp + include/pinocchio/algorithm/aba.hpp + include/pinocchio/algorithm/center-of-mass-derivatives.hpp + include/pinocchio/algorithm/center-of-mass.hpp + include/pinocchio/algorithm/centroidal-derivatives.hpp + include/pinocchio/algorithm/centroidal.hpp + include/pinocchio/algorithm/check-base.hpp + include/pinocchio/algorithm/check-data.hpp + include/pinocchio/algorithm/check-model.hpp + include/pinocchio/algorithm/check.hpp + include/pinocchio/algorithm/cholesky.hpp + include/pinocchio/algorithm/compute-all-terms.hpp + include/pinocchio/algorithm/constrained-dynamics-derivatives.hpp + include/pinocchio/algorithm/constrained-dynamics.hpp + include/pinocchio/algorithm/constraint-cholesky-decl.hpp + include/pinocchio/algorithm/constraint-cholesky.hpp + include/pinocchio/algorithm/contact-dynamics.hpp + include/pinocchio/algorithm/contact-inverse-dynamics.hpp + include/pinocchio/algorithm/copy.hpp + include/pinocchio/algorithm/crba.hpp + include/pinocchio/algorithm/default-check.hpp + include/pinocchio/algorithm/delassus-operator.hpp + include/pinocchio/algorithm/delassus.hpp + include/pinocchio/algorithm/diagonal-preconditioner.hpp + include/pinocchio/algorithm/energy.hpp + include/pinocchio/algorithm/frames-derivatives.hpp + include/pinocchio/algorithm/frames.hpp + include/pinocchio/algorithm/fwd.hpp + include/pinocchio/algorithm/geometry.hpp + include/pinocchio/algorithm/impulse-dynamics-derivatives.hpp + include/pinocchio/algorithm/impulse-dynamics.hpp + include/pinocchio/algorithm/jacobian.hpp + include/pinocchio/algorithm/joint-configuration.hpp + include/pinocchio/algorithm/kinematics-derivatives.hpp + include/pinocchio/algorithm/kinematics.hpp + include/pinocchio/algorithm/loop-constrained-aba.hpp + include/pinocchio/algorithm/model.hpp + include/pinocchio/algorithm/preconditioner-base.hpp + include/pinocchio/algorithm/proximal.hpp + include/pinocchio/algorithm/pv.hpp + include/pinocchio/algorithm/regressor.hpp + include/pinocchio/algorithm/rnea-derivatives.hpp + include/pinocchio/algorithm/rnea-second-order-derivatives.hpp + include/pinocchio/algorithm/rnea.hpp + include/pinocchio/algorithm/solvers/admm-solver.hpp + include/pinocchio/algorithm/solvers/anderson-acceleration.hpp + include/pinocchio/algorithm/solvers/constraint-solver-base.hpp + include/pinocchio/algorithm/solvers/constraint-solver-utils.hpp + include/pinocchio/algorithm/solvers/fwd.hpp + include/pinocchio/algorithm/solvers/pgs-solver.hpp + include/pinocchio/algorithm/utils/force.hpp + include/pinocchio/algorithm/utils/motion.hpp + include/pinocchio/common/fwd.hpp + include/pinocchio/common.hpp + include/pinocchio/constraints/fwd.hpp + include/pinocchio/constraints.hpp + include/pinocchio/container/double-entry-container.hpp + include/pinocchio/container/eigen-storage.hpp + include/pinocchio/container/matrix-stack.hpp + include/pinocchio/context.hpp + include/pinocchio/eigen-common.hpp + include/pinocchio/fwd.hpp + include/pinocchio/geometry.hpp + include/pinocchio/geometry/fwd.hpp + include/pinocchio/macros.hpp + include/pinocchio/math/fwd.hpp + include/pinocchio/math/multiprecision-mpfr.hpp + include/pinocchio/math/multiprecision.hpp + include/pinocchio/math.hpp + include/pinocchio/multibody/fwd.hpp + include/pinocchio/multibody/joint/fwd.hpp + include/pinocchio/multibody/joint-motion-subspace.hpp + include/pinocchio/multibody/joint.hpp + include/pinocchio/multibody/liegroup/fwd.hpp + include/pinocchio/multibody/liegroup.hpp + include/pinocchio/multibody/pool/fwd.hpp + include/pinocchio/multibody/pool.hpp + include/pinocchio/multibody/sample-models.hpp + include/pinocchio/multibody/visitor.hpp + include/pinocchio/multibody.hpp + include/pinocchio/serialization/archive.hpp + include/pinocchio/serialization/fwd.hpp + include/pinocchio/serialization/eigen.hpp + include/pinocchio/serialization/serializable.hpp + include/pinocchio/serialization.hpp + include/pinocchio/spatial/fwd.hpp + include/pinocchio/spatial.hpp + include/pinocchio/unsupported.hpp + include/pinocchio/utils/alloca.hpp + include/pinocchio/utils/cast.hpp + include/pinocchio/utils/check.hpp + include/pinocchio/utils/eigen-helpers.hpp + include/pinocchio/utils/file-io.hpp + include/pinocchio/utils/openmp.hpp + include/pinocchio/utils/promote-static-eval.hpp + include/pinocchio/utils/reference.hpp + include/pinocchio/utils/shared-ptr.hpp + include/pinocchio/utils/size-in-bytes.hpp + include/pinocchio/utils/static-if.hpp + include/pinocchio/utils/std-vector.hpp + include/pinocchio/utils/string-generator.hpp + include/pinocchio/utils/string.hpp + include/pinocchio/utils/timer.hpp + include/pinocchio/utils/timer2.hpp + include/pinocchio/utils/version.hpp + BASE_DIRS include +) + +jrl_target_headers(pinocchio_headers PUBLIC + HEADERS + include/pinocchio/src/visualizers/base-visualizer.hxx + include/pinocchio/src/common/fwd.hxx + include/pinocchio/src/common/model-entity.hxx + include/pinocchio/src/common/data-entity.hxx + include/pinocchio/src/eigen-macros.hxx + include/pinocchio/src/context/generic.hxx + include/pinocchio/src/context/casadi.hxx + include/pinocchio/src/context/cppad.hxx + include/pinocchio/src/context/default.hxx + include/pinocchio/src/context/cppadcg.hxx + include/pinocchio/src/multibody/data.hxx + include/pinocchio/src/multibody/model-item.hxx + include/pinocchio/src/multibody/joint-motion-subspace-base.hxx + include/pinocchio/src/multibody/force-set.hxx + include/pinocchio/src/multibody/liegroup/vector-space.hxx + include/pinocchio/src/multibody/model.hxx + include/pinocchio/src/multibody/liegroup/cartesian-product.hxx + include/pinocchio/src/multibody/liegroup/liegroup-generic.hxx + include/pinocchio/src/multibody/liegroup/liegroup-base.hxx + include/pinocchio/src/multibody/fwd.hxx + include/pinocchio/src/multibody/joint-motion-subspace-generic.hxx + include/pinocchio/src/multibody/frame.hxx + include/pinocchio/src/multibody/sample-models.hxx + include/pinocchio/src/geometry/fwd.hxx + include/pinocchio/src/geometry/coal.hxx + include/pinocchio/src/geometry/instance-filter.hxx + include/pinocchio/src/geometry/geometry-object.hxx + include/pinocchio/src/geometry/geometry.hxx + include/pinocchio/src/geometry/geometry-object-filter.hxx + include/pinocchio/src/algorithm/delassus-operator-preconditioned.hxx + include/pinocchio/src/algorithm/crba.hxx + include/pinocchio/src/algorithm/kinematics.hxx + include/pinocchio/src/multibody/liegroup/liegroup-algo.hxx + include/pinocchio/src/math/matrix-inverse-code-generated.hxx + include/pinocchio/src/math/block-diagonal-matrix.hxx + include/pinocchio/src/math/quaternion.hxx + include/pinocchio/src/algorithm/contact-dynamics.hxx + include/pinocchio/src/math/matrix-block-element-base.hxx + include/pinocchio/src/math/matrix-inverse.hxx + include/pinocchio/src/math/block-diagonal-matrix-base.hxx + include/pinocchio/src/math/taylor-expansion.hxx + include/pinocchio/src/math/assign-operators.hxx + include/pinocchio/src/math/lanczos-decomposition.hxx + include/pinocchio/src/eigen-ref.hxx + include/pinocchio/src/macros.hxx + include/pinocchio/src/fwd.hxx + include/pinocchio/src/algorithm/regressor.hxx + include/pinocchio/src/algorithm/frames.hxx + include/pinocchio/src/math/alias.hxx + include/pinocchio/src/math/eigenvalues.hxx + include/pinocchio/src/multibody/visitor/joint-unary-visitor.hxx + include/pinocchio/src/multibody/visitor/joint-binary-visitor.hxx + include/pinocchio/src/multibody/visitor/fusion.hxx + include/pinocchio/src/multibody/liegroup/special-orthogonal.hxx + include/pinocchio/src/multibody/liegroup/special-euclidean.hxx + include/pinocchio/src/multibody/liegroup/cartesian-product-variant.hxx + include/pinocchio/src/multibody/liegroup/liegroup-map.hxx + include/pinocchio/src/multibody/liegroup/liegroup-collection.hxx + include/pinocchio/src/multibody/liegroup/liegroup-joint.hxx + include/pinocchio/src/multibody/liegroup/liegroup-variant-visitors.hxx + include/pinocchio/src/multibody/liegroup/fwd.hxx + include/pinocchio/src/multibody/liegroup/cartesian-product-variant-fwd.hxx + include/pinocchio/src/spatial/classic-acceleration.hxx + include/pinocchio/src/spatial/motion-dense.hxx + include/pinocchio/src/spatial/se3-base.hxx + include/pinocchio/src/spatial/cartesian-axis.hxx + include/pinocchio/src/spatial/symmetric3.hxx + include/pinocchio/src/spatial/spatial-axis.hxx + include/pinocchio/src/spatial/log-common.hxx + include/pinocchio/src/spatial/se3-tpl.hxx + include/pinocchio/src/spatial/motion-zero.hxx + include/pinocchio/src/spatial/log.hxx + include/pinocchio/src/spatial/inertia.hxx + include/pinocchio/src/spatial/se3-common.hxx + include/pinocchio/src/algorithm/check-model.hxx + include/pinocchio/src/algorithm/rnea.hxx + include/pinocchio/src/math/matrix-block-element.hxx + include/pinocchio/src/math/matrix-block-type.hxx + include/pinocchio/src/math/comparison-operators.hxx + include/pinocchio/src/math/multiprecision.hxx + include/pinocchio/src/algorithm/joint-configuration.hxx + include/pinocchio/src/algorithm/center-of-mass.hxx + include/pinocchio/src/spatial/se3-tpl-interpolate.hxx + include/pinocchio/src/spatial/force-base.hxx + include/pinocchio/src/algorithm/delassus-operator-cholesky-expression.hxx + include/pinocchio/src/algorithm/constraint-cholesky-decl.hxx + include/pinocchio/src/algorithm/default-check.hxx + include/pinocchio/src/spatial/motion-common.hxx + include/pinocchio/src/algorithm/jacobian.hxx + include/pinocchio/src/algorithm/kinematics-derivatives.hxx + include/pinocchio/src/serialization/symmetric3.hxx + include/pinocchio/src/algorithm/contact-inverse-dynamics.hxx + include/pinocchio/src/algorithm/diagonal-preconditioner.hxx + include/pinocchio/src/math/matrix-block-element-operations.hxx + include/pinocchio/src/math/fwd.hxx + include/pinocchio/src/math/matrix-info.hxx + include/pinocchio/src/spatial/motion-tpl.hxx + include/pinocchio/src/serialization/constraints-data.hxx + include/pinocchio/src/algorithm/rnea-second-order-derivatives.hxx + include/pinocchio/src/math/matrix-block.hxx + include/pinocchio/src/math/eigen-helpers.hxx + include/pinocchio/src/math/matrix-product.hxx + include/pinocchio/src/spatial/motion-ref.hxx + include/pinocchio/src/context.hxx + include/pinocchio/src/eigen-align.hxx + include/pinocchio/src/spatial/fwd.hxx + include/pinocchio/src/algorithm/delassus-operator-rigid-body-visitors.hxx + include/pinocchio/src/math/matrix-block-element-operation.hxx + include/pinocchio/src/container/aligned-vector.hxx + include/pinocchio/src/container/matrix-stack.hxx + include/pinocchio/src/container/double-entry-container.hxx + include/pinocchio/src/container/eigen-storage.hxx + include/pinocchio/src/algorithm/utils/force.hxx + include/pinocchio/src/spatial/act-on-set.hxx + include/pinocchio/src/spatial/force-dense.hxx + include/pinocchio/src/spatial/force-ref.hxx + include/pinocchio/src/spatial/explog-quaternion.hxx + include/pinocchio/src/spatial/force-common.hxx + include/pinocchio/src/spatial/motion-base.hxx + include/pinocchio/src/utils/timer.hxx + include/pinocchio/src/spatial/force-tpl.hxx + include/pinocchio/src/spatial/skew.hxx + include/pinocchio/src/serialization/inertia.hxx + include/pinocchio/src/serialization/vector.hxx + include/pinocchio/src/spatial/explog.hxx + include/pinocchio/src/serialization/force.hxx + include/pinocchio/src/serialization/joints-data.hxx + include/pinocchio/src/algorithm/utils/motion.hxx + include/pinocchio/src/serialization/block-diagonal-matrix.hxx + include/pinocchio/src/serialization/eigen.hxx + include/pinocchio/src/algorithm/constraint-cholesky-def.hxx + include/pinocchio/src/serialization/model.hxx + include/pinocchio/src/serialization/eigen-storage.hxx + include/pinocchio/src/algorithm/impulse-dynamics.hxx + include/pinocchio/src/serialization/motion.hxx + include/pinocchio/src/serialization/se3.hxx + include/pinocchio/src/algorithm/preconditioner-base.hxx + include/pinocchio/src/serialization/static-buffer.hxx + include/pinocchio/src/math/gram-schmidt-orthonormalisation.hxx + include/pinocchio/src/algorithm/constrained-dynamics.hxx + include/pinocchio/src/math/block-diagonal-matrix-inverse.hxx + include/pinocchio/src/algorithm/model.hxx + include/pinocchio/src/algorithm/rnea-derivatives.hxx + include/pinocchio/src/utils/check.hxx + include/pinocchio/src/algorithm/centroidal.hxx + include/pinocchio/src/math/multiprecision-mpfr.hxx + include/pinocchio/src/serialization/frame.hxx + include/pinocchio/src/serialization/double-entry-container.hxx + include/pinocchio/src/algorithm/delassus.hxx + include/pinocchio/src/algorithm/loop-constrained-aba.hxx + include/pinocchio/src/algorithm/fwd.hxx + include/pinocchio/src/math/arithmetic-operators.hxx + include/pinocchio/src/math/tridiagonal-matrix.hxx + include/pinocchio/src/math/block-diagonal-matrix-sum.hxx + include/pinocchio/src/math/tensor.hxx + include/pinocchio/src/serialization/matrix-block-element.hxx + include/pinocchio/src/serialization/fwd.hxx + include/pinocchio/src/algorithm/proximal.hxx + include/pinocchio/src/math/eigenvalues-tridiagonal-matrix.hxx + include/pinocchio/src/math/block-diagonal-matrix-expression.hxx + include/pinocchio/src/utils/promote-static-eval.hxx + include/pinocchio/src/multibody/pool/model.hxx + include/pinocchio/src/serialization/delassus.hxx + include/pinocchio/src/algorithm/pv.hxx + include/pinocchio/src/multibody/pool/fwd.hxx + include/pinocchio/src/math/rpy.hxx + include/pinocchio/src/utils/string.hxx + include/pinocchio/src/serialization/boost-blank.hxx + include/pinocchio/src/algorithm/delassus-operator-sparse.hxx + include/pinocchio/src/math/sincos.hxx + include/pinocchio/src/utils/file-io.hxx + include/pinocchio/src/utils/version.hxx + include/pinocchio/src/serialization/joints-motion-subspace.hxx + include/pinocchio/src/serialization/matrix-stack.hxx + include/pinocchio/src/algorithm/constrained-dynamics-derivatives.hxx + include/pinocchio/src/algorithm/delassus-operator-dense.hxx + include/pinocchio/src/utils/alloca.hxx + include/pinocchio/src/multibody/pool/geometry.hxx + include/pinocchio/src/math/matrix-block-element-plain.hxx + include/pinocchio/src/serialization/geometry.hxx + include/pinocchio/src/algorithm/energy.hxx + include/pinocchio/src/math/rotation.hxx + include/pinocchio/src/utils/string-generator.hxx + include/pinocchio/src/serialization/archive.hxx + include/pinocchio/src/math/triangular-matrix.hxx + include/pinocchio/src/math/matrix.hxx + include/pinocchio/src/math/sign.hxx + include/pinocchio/src/utils/size-in-bytes.hxx + include/pinocchio/src/utils/timer2.hxx + include/pinocchio/src/utils/cast.hxx + include/pinocchio/src/utils/eigen-helpers.hxx + include/pinocchio/src/utils/reference.hxx + include/pinocchio/src/utils/static-if.hxx + include/pinocchio/src/multibody/joint/joint-universal.hxx + include/pinocchio/src/multibody/joint/joint-helical.hxx + include/pinocchio/src/multibody/joint/joint-ellipsoid.hxx + include/pinocchio/src/math/details/matrix-inverse-9x9.hxx + include/pinocchio/src/math/details/matrix-inverse-12x12.hxx + include/pinocchio/src/math/details/matrix-inverse-11x11.hxx + include/pinocchio/src/utils/openmp.hxx + include/pinocchio/src/serialization/joints-motion.hxx + include/pinocchio/src/serialization/constraints-model.hxx + include/pinocchio/src/utils/eigen-fix.hxx + include/pinocchio/src/multibody/joint/joint-composite.hxx + include/pinocchio/src/math/details/matrix-inverse-4x4.hxx + include/pinocchio/src/math/details/matrix-inverse-3x3.hxx + include/pinocchio/src/math/details/matrix-inverse-6x6.hxx + include/pinocchio/src/math/details/matrix-inverse-10x10.hxx + include/pinocchio/src/math/details/matrix-inverse-5x5.hxx + include/pinocchio/src/multibody/joint/joint-revolute-unbounded.hxx + include/pinocchio/src/serialization/data.hxx + include/pinocchio/src/serialization/coal.hxx + include/pinocchio/src/serialization/joints-model.hxx + include/pinocchio/src/utils/std-vector.hxx + include/pinocchio/src/utils/shared-ptr.hxx + include/pinocchio/src/math/details/matrix-inverse-7x7.hxx + include/pinocchio/src/serialization/constraints-set.hxx + include/pinocchio/src/math/details/matrix-inverse-2x2.hxx + include/pinocchio/src/multibody/joint/joint-collection.hxx + include/pinocchio/src/serialization/serializable.hxx + include/pinocchio/src/math/details/matrix-inverse-8x8.hxx + include/pinocchio/src/algorithm/centroidal-derivatives.hxx + include/pinocchio/src/algorithm/delassus-operator-base.hxx + include/pinocchio/src/multibody/joint/joint-spherical.hxx + include/pinocchio/src/math/details/matrix-inverse-1x1.hxx + include/pinocchio/src/serialization/common.hxx + include/pinocchio/src/serialization/csv.hxx + include/pinocchio/src/algorithm/aba-derivatives.hxx + include/pinocchio/src/algorithm/aba.hxx + include/pinocchio/src/serialization/joints-transform.hxx + include/pinocchio/src/algorithm/compute-all-terms.hxx + include/pinocchio/src/algorithm/delassus-operator-rigid-body.hxx + include/pinocchio/src/algorithm/center-of-mass-derivatives.hxx + include/pinocchio/src/algorithm/check-base.hxx + include/pinocchio/src/algorithm/check-data.hxx + include/pinocchio/src/algorithm/impulse-dynamics-derivatives.hxx + include/pinocchio/src/algorithm/copy.hxx + include/pinocchio/src/algorithm/cholesky.hxx + include/pinocchio/src/algorithm/frames-derivatives.hxx + include/pinocchio/src/multibody/joint/joint-spherical-ZYX.hxx + include/pinocchio/src/multibody/joint/joint-planar.hxx + include/pinocchio/src/algorithm/geometry.hxx + include/pinocchio/src/multibody/joint/joint-revolute-unaligned.hxx + include/pinocchio/src/algorithm/solvers/anderson-acceleration.hxx + include/pinocchio/src/algorithm/solvers/constraint-solver-base.hxx + include/pinocchio/src/algorithm/solvers/pgs-solver.hxx + include/pinocchio/src/algorithm/solvers/admm-solver.hxx + include/pinocchio/src/algorithm/solvers/constraint-solver-utils.hxx + include/pinocchio/src/multibody/joint/joint-translation.hxx + include/pinocchio/src/multibody/joint/joint-prismatic-unaligned.hxx + include/pinocchio/src/multibody/joint/joint-mimic.hxx + include/pinocchio/src/multibody/joint/fwd.hxx + include/pinocchio/src/multibody/joint/joint-free-flyer.hxx + include/pinocchio/src/multibody/joint/joint-common-operations.hxx + include/pinocchio/src/multibody/joint/joint-prismatic.hxx + include/pinocchio/src/multibody/joint/joint-generic.hxx + include/pinocchio/src/multibody/joint/joint-revolute-unbounded-unaligned.h + include/pinocchio/src/multibody/joint/joint-helical-unaligned.hxx + include/pinocchio/src/multibody/joint/joint-revolute.hxx + include/pinocchio/src/multibody/joint/joint-data-base.hxx + include/pinocchio/src/multibody/joint/joint-basic-visitors.hxx + include/pinocchio/src/multibody/joint/joint-model-base.hxx + include/pinocchio/src/constraints/constraint-data-base.hxx + include/pinocchio/src/constraints/kinematics-constraint-model-base.hxx + include/pinocchio/src/constraints/baumgarte-corrector-parameters.hxx + include/pinocchio/src/constraints/point-anchor-constraint.hxx + include/pinocchio/src/constraints/constraint-model-common-parameters.hxx + include/pinocchio/src/constraints/constraint-collection-default.hxx + include/pinocchio/src/constraints/visitors/constraint-model-visitor.hxx + include/pinocchio/src/constraints/frame-constraint-data-base.hxx + include/pinocchio/src/constraints/point-constraint-data-base.hxx + include/pinocchio/src/constraints/binary-kinematics-constraint-model-base. + include/pinocchio/src/constraints/constraint-model-base.hxx + include/pinocchio/src/constraints/blank-constraint.hxx + include/pinocchio/src/constraints/constraint-ordering.hxx + include/pinocchio/src/constraints/fwd.hxx + include/pinocchio/src/constraints/jointwise-constraint-model-base.hxx + include/pinocchio/src/constraints/point-constraint-model-base.hxx + include/pinocchio/src/constraints/joint-limit-constraint.hxx + include/pinocchio/src/constraints/sets/second-order-cone-jordan-operation. + include/pinocchio/src/constraints/sets/full-space-cone.hxx + include/pinocchio/src/constraints/sets/orthant-cone.hxx + include/pinocchio/src/constraints/sets/orthant-cone-jordan-operation.hxx + include/pinocchio/src/constraints/sets/coulomb-friction-cone.hxx + include/pinocchio/src/constraints/sets/cone-base.hxx + include/pinocchio/src/constraints/sets/zero-cone-jordan-operation.hxx + include/pinocchio/src/constraints/sets/box-set.hxx + include/pinocchio/src/constraints/sets/zero-cone.hxx + include/pinocchio/src/constraints/sets/set-base.hxx + include/pinocchio/src/constraints/sets/jordan-operation-helper.hxx + include/pinocchio/src/constraints/constraint-data-generic.hxx + include/pinocchio/src/constraints/utils.hxx + include/pinocchio/src/constraints/frame-constraint-model-base.hxx + include/pinocchio/src/constraints/point-contact-constraint.hxx + include/pinocchio/src/constraints/frame-anchor-constraint.hxx + include/pinocchio/src/constraints/joint-friction-constraint.hxx + include/pinocchio/src/constraints/contact-info.hxx + include/pinocchio/src/constraints/constraint-model-generic.hxx + include/pinocchio/src/constraints/rigid-constraint-conversion.hxx + BASE_DIRS include +) + +# Target to link against all simple libraries +add_library(pinocchio INTERFACE) +add_library(pinocchio::pinocchio ALIAS pinocchio) + +add_library(pinocchio_default INTERFACE) +target_link_libraries(pinocchio_default INTERFACE pinocchio_headers) +target_link_libraries(pinocchio INTERFACE pinocchio_default) + +# List of exported targets +set(EXPORTED_TARGETS pinocchio pinocchio_default pinocchio_headers) if(BUILD_WITH_COLLISION_SUPPORT) - list(APPEND ${PROJECT_NAME}_HEADERS ${${PROJECT_NAME}_COLLISION_HEADERS}) -endif() - -if(BUILD_WITH_PARSERS_SUPPORT) - list(APPEND ${PROJECT_NAME}_HEADERS ${${PROJECT_NAME}_PARSERS_HEADERS}) -endif() + add_library(pinocchio_collision SHARED) -if(BUILD_WITH_PYTHON_PARSER_SUPPORT) - list( - APPEND ${PROJECT_NAME}_HEADERS - ${${PROJECT_NAME}_PYTHON_PARSER_HEADERS} + target_sources( + pinocchio_collision + PRIVATE + src/collision/collision.cpp + src/collision/distance.cpp ) -endif() -if(BUILD_WITH_EXTRA_SUPPORT) - list(APPEND ${PROJECT_NAME}_HEADERS ${${PROJECT_NAME}_EXTRA_HEADERS}) - list( - APPEND ${PROJECT_NAME}_BINDINGS_PYTHON_SOURCES - ${${PROJECT_NAME}_BINDINGS_PYTHON_EXTRA_SOURCES} + jrl_target_headers(pinocchio_collision PUBLIC + HEADERS + include/pinocchio/collision/broadphase-callbacks.hpp + include/pinocchio/collision/broadphase-manager-base.hpp + include/pinocchio/collision/broadphase-manager.hpp + include/pinocchio/collision/broadphase.hpp + include/pinocchio/collision/coal-pinocchio-conversions.hpp + include/pinocchio/collision/collision.hpp + include/pinocchio/collision/distance.hpp + include/pinocchio/collision/pool/broadphase-manager.hpp + include/pinocchio/collision/pool/fwd.hpp + include/pinocchio/collision/tree-broadphase-manager.hpp + BASE_DIRS include ) -endif() -list( - APPEND ${PROJECT_NAME}_HEADERS - ${${PROJECT_NAME}_VISUALIZERS_PUBLIC_HEADERS} -) - -list( - APPEND ${PROJECT_NAME}_HEADERS - ${${PROJECT_NAME}_BINDINGS_PYTHON_PUBLIC_HEADERS} -) - -# Define PINOCCHIO_WINDOWS_DLL_PATH environment variable on Windows -function(ADD_WINDOWS_DLL_PATH_TO_TEST TEST_NAME) - if(WIN32) - get_test_property(${TEST_NAME} ENVIRONMENT ENV_VARIABLES) - # TODO don't do this in the future - list( - APPEND ENV_VARIABLES - "PINOCCHIO_WINDOWS_DLL_PATH=$" - ) - set_tests_properties( - ${TEST_NAME} - PROPERTIES ENVIRONMENT "${ENV_VARIABLES}" - ) - endif() -endfunction() - -# --- MAIN LIBRARY ------------------------------------------------------------- -if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - add_subdirectory(src) -endif() - -# --- BINDINGS ----------------------------------------------------------------- -if(BUILD_PYTHON_INTERFACE) - add_subdirectory(bindings) -endif() - -# --- EXECUTABLES -------------------------------------------------------------- -add_subdirectory(utils) - -# --- UNIT TESTS --------------------------------------------------------------- -add_subdirectory(unittest) + jrl_target_headers(pinocchio_collision PUBLIC + HEADERS + include/pinocchio/src/collision/broadphase-callbacks.hxx + include/pinocchio/src/collision/broadphase-manager.hxx + include/pinocchio/src/collision/broadphase.hxx + include/pinocchio/src/collision/collision.hxx + include/pinocchio/src/collision/distance.hxx + include/pinocchio/src/collision/pool/broadphase-manager.hxx + include/pinocchio/src/collision/pool/fwd.hxx + include/pinocchio/src/collision/tree-broadphase-manager.hxx + BASE_DIRS include + ) -# --- CHECK EXAMPLES ----------------------------------------------------------- -if(BUILD_EXAMPLES) - add_subdirectory(examples) -endif() + target_link_libraries(pinocchio_collision + PUBLIC pinocchio_default coal::coal) -# --- BENCHMARKS --------------------------------------------------------------- -if(BUILD_BENCHMARK AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) - add_subdirectory(benchmark) + target_compile_definitions(pinocchio_collision PUBLIC BUILD_WITH_COLLISION_SUPPORT) + # DEPRECATED: Setup back compatibility define + target_compile_definitions(pinocchio_collision PUBLIC PINOCCHIO_WITH_HPP_FCL) + jrl_target_set_default_compile_options(pinocchio_collision PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_collision PRIVATE) + target_link_libraries(pinocchio INTERFACE pinocchio_collision) + list(APPEND EXPORTED_TARGETS pinocchio_collision) endif() -# --- PACKAGING ---------------------------------------------------------------- -# Export variables in CMake module and in parent scope for workspace compatibility -# PARENT_SCOPE_ONLY: If set: only export in parent scope -# CONDITION: Condition to setup the variable -# VAR_NAME: Variable name -# VAR_VALUE: Varible value -macro(EXPORT_VARIABLE) - set(options PARENT_SCOPE_ONLY) - set(oneValueArgs CONDITION VAR_NAME VAR_VALUE) - set(multiValueArgs) - cmake_parse_arguments( - ARGS - "${options}" - "${oneValueArgs}" - "${multiValueArgs}" - ${ARGN} - ) - - if(${ARGS_CONDITION}) - get_directory_property(has_parent PARENT_DIRECTORY) - if(has_parent) - set(${ARGS_VAR_NAME} ${ARGS_VAR_VALUE} PARENT_SCOPE) - else() - set(${ARGS_VAR_NAME} ${ARGS_VAR_VALUE}) - endif() - if(NOT ${ARGS_PARENT_SCOPE_ONLY}) - string( - APPEND PACKAGE_EXTRA_MACROS - "\nset(${ARGS_VAR_NAME} ${ARGS_VAR_VALUE})" - ) - endif() - endif() -endmacro() - -export_variable(CONDITION PINOCCHIO_BUILD_WITH_TRACY - VAR_NAME PINOCCHIO_USE_TRACY - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_URDF_SUPPORT - VAR_NAME PINOCCHIO_USE_URDFDOM - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_COLLISION_SUPPORT - VAR_NAME PINOCCHIO_USE_COAL - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_CPPAD_SUPPORT - VAR_NAME PINOCCHIO_USE_CPPAD - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_CPPAD_CODEGEN_SUPPORT - VAR_NAME PINOCCHIO_USE_CPPAD_CODEGEN - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_CASADI_SUPPORT - VAR_NAME PINOCCHIO_USE_CASADI - VAR_VALUE ON -) -export_variable(CONDITION BUILD_PYTHON_INTERFACE - VAR_NAME PINOCCHIO_WITH_PYTHON_INTERFACE - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_EXTRA_SUPPORT - VAR_NAME PINOCCHIO_USE_EXTRA - VAR_VALUE ON -) -export_variable(CONDITION BUILD_WITH_PYTHON_PARSER_SUPPORT - VAR_NAME PINOCCHIO_USE_PYTHON_PARSER - VAR_VALUE ON -) -export_variable(CONDITION TRUE - VAR_NAME pinocchio_VERSION - VAR_VALUE ${pinocchio_VERSION} - PARENT_SCOPE_ONLY +# ---------------------------------------------------- +# --- EXPORT ---------------------------------------- +# ---------------------------------------------------- +jrl_add_export_component(NAME pinocchio + TARGETS + ${EXPORTED_TARGETS} ) +jrl_export_package() -setup_project_finalize() +# Print summaries +jrl_print_dependencies_summary() +jrl_print_options_summary() From c0970346d73104a8bc78b572f77f8dfc1dc1fcb9 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Wed, 8 Jul 2026 15:58:28 +0200 Subject: [PATCH 03/32] cmake :port template instantiation --- CMakeLists.txt | 65 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c7c1b32257..ebe619074b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -549,7 +549,7 @@ jrl_target_headers(pinocchio_headers PUBLIC BASE_DIRS include ) -# Target to link against all simple libraries +# Target to link against all pinocchio libraries add_library(pinocchio INTERFACE) add_library(pinocchio::pinocchio ALIAS pinocchio) @@ -601,15 +601,76 @@ if(BUILD_WITH_COLLISION_SUPPORT) target_link_libraries(pinocchio_collision PUBLIC pinocchio_default coal::coal) - target_compile_definitions(pinocchio_collision PUBLIC BUILD_WITH_COLLISION_SUPPORT) + target_compile_definitions(pinocchio_collision PUBLIC PINOCCHIO_WITH_COLLISION) # DEPRECATED: Setup back compatibility define target_compile_definitions(pinocchio_collision PUBLIC PINOCCHIO_WITH_HPP_FCL) jrl_target_set_default_compile_options(pinocchio_collision PRIVATE) jrl_target_enforce_msvc_conformance(pinocchio_collision PRIVATE) + jrl_target_generate_config_header(pinocchio_collision INTERFACE FILENAME pinocchio/collision/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_collision) + target_link_libraries(pinocchio INTERFACE pinocchio_collision) list(APPEND EXPORTED_TARGETS pinocchio_collision) endif() +if(ENABLE_TEMPLATE_INSTANTIATION) + add_library(pinocchio_template_instantiation_default SHARED) + + target_sources(pinocchio_template_instantiation_default PRIVATE + src/algorithm/cholesky.cpp + src/algorithm/aba.cpp + src/algorithm/regressor.cpp + src/algorithm/contact-dynamics.cpp + src/algorithm/frames-derivatives.cpp + src/algorithm/impulse-dynamics.cpp + src/algorithm/model.cpp + src/algorithm/constrained-dynamics.cpp + src/algorithm/rnea-derivatives.cpp + src/algorithm/compute-all-terms.cpp + src/algorithm/jacobian.cpp + src/algorithm/energy.cpp + src/algorithm/centroidal-derivatives.cpp + src/algorithm/frames.cpp + src/algorithm/constrained-dynamics-derivatives.cpp + src/algorithm/center-of-mass.cpp + src/algorithm/geometry.cpp + src/algorithm/kinematics.cpp + src/algorithm/rnea.cpp + src/algorithm/centroidal.cpp + src/algorithm/aba-derivatives.cpp + src/algorithm/crba.cpp + src/algorithm/constraint-cholesky.cpp + src/algorithm/joint-configuration.cpp + src/algorithm/center-of-mass-derivatives.cpp + src/algorithm/solvers/admm-solver.cpp + src/algorithm/solvers/pgs-solver.cpp + src/algorithm/kinematics-derivatives.cpp + src/algorithm/constraints/utils.cpp + src/multibody/model.cpp + src/multibody/data.cpp + src/multibody/sample-models.cpp + ) + + target_link_libraries( + pinocchio_template_instantiation_default + PUBLIC pinocchio_headers) + + target_compile_definitions( + pinocchio_template_instantiation_default + PUBLIC PINOCCHIO_ENABLE_TEMPLATE_INSTANTIATION + ) + + jrl_target_set_default_compile_options(pinocchio_template_instantiation_default PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_template_instantiation_default PRIVATE) + + target_link_libraries( + pinocchio_default + INTERFACE pinocchio_template_instantiation_default + ) + + list(APPEND EXPORTED_TARGETS pinocchio_template_instantiation_default) + +endif() + # ---------------------------------------------------- # --- EXPORT ---------------------------------------- # ---------------------------------------------------- From e12b7013d6dd372b210a90162b25c6bea6394e2c Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Thu, 9 Jul 2026 10:54:09 +0200 Subject: [PATCH 04/32] cmake:Port unit test --- CMakeLists.txt | 149 ++++--- unittest/CMakeLists.txt | 382 ++++-------------- unittest/aba-derivatives.cpp | 7 +- unittest/aba.cpp | 7 +- unittest/admm-solver.cpp | 9 +- unittest/algo-check.cpp | 9 +- unittest/algorithm/utils/force.cpp | 6 +- unittest/algorithm/utils/motion.cpp | 6 +- unittest/all-joints.cpp | 13 +- unittest/alloca.cpp | 7 +- unittest/block-diagonal-matrix.cpp | 7 +- unittest/box-set.cpp | 9 +- unittest/broadphase.cpp | 7 +- unittest/cartesian-product-liegroups.cpp | 9 +- unittest/casadi/aba-derivatives.cpp | 7 +- unittest/casadi/aba.cpp | 7 +- unittest/casadi/algorithms.cpp | 7 +- unittest/casadi/basic.cpp | 8 +- .../constraint-dynamics-derivatives.cpp | 7 +- unittest/casadi/constraint-dynamics.cpp | 7 +- unittest/casadi/explog.cpp | 7 +- unittest/casadi/integrate-derivatives.cpp | 7 +- unittest/casadi/joints.cpp | 7 +- unittest/casadi/rnea-derivatives.cpp | 7 +- unittest/casadi/spatial.cpp | 8 +- unittest/center-of-mass-derivatives.cpp | 7 +- unittest/centroidal-derivatives.cpp | 9 +- unittest/centroidal.cpp | 9 +- unittest/cholesky.cpp | 7 +- unittest/classic-acceleration.cpp | 7 +- unittest/closed-loop-dynamics.cpp | 7 +- unittest/com.cpp | 7 +- unittest/compute-all-terms.cpp | 6 +- unittest/constrained-dynamics-derivatives.cpp | 7 +- unittest/constrained-dynamics.cpp | 9 +- unittest/constraint-cholesky.cpp | 9 +- unittest/constraint-jacobian.cpp | 9 +- unittest/constraint-variants.cpp | 9 +- unittest/contact-dynamics-derivatives.cpp | 9 +- unittest/contact-dynamics.cpp | 7 +- unittest/contact-inverse-dynamics.cpp | 6 +- unittest/contact-models.cpp | 9 +- unittest/copy.cpp | 7 +- unittest/coulomb-friction-cone.cpp | 9 +- unittest/cppad/algorithms.cpp | 9 +- unittest/cppad/basic.cpp | 7 +- unittest/cppad/derivatives.cpp | 7 +- unittest/cppad/joint-configurations.cpp | 9 +- unittest/cppad/joints.cpp | 7 +- unittest/cppad/spatial.cpp | 7 +- unittest/cppadcg/algorithms.cpp | 7 +- unittest/cppadcg/basic.cpp | 7 +- unittest/cppadcg/contact-dynamics.cpp | 9 +- unittest/cppadcg/joint-configurations.cpp | 9 +- unittest/crba.cpp | 9 +- unittest/csv.cpp | 7 +- unittest/data.cpp | 9 +- unittest/delassus-operations.cpp | 7 +- unittest/delassus-operator-dense.cpp | 7 +- unittest/delassus-operator-preconditioned.cpp | 7 +- unittest/delassus-operator-rigid-body.cpp | 9 +- unittest/delassus.cpp | 8 +- unittest/double-entry-container.cpp | 9 +- unittest/dynamic-allocations.cpp | 9 +- unittest/eigen-basic-op.cpp | 7 +- unittest/eigen-storage.cpp | 11 +- unittest/eigen-tensor.cpp | 7 +- unittest/eigenvalues.cpp | 7 +- unittest/energy.cpp | 7 +- unittest/explog.cpp | 10 +- unittest/finite-differences.cpp | 9 +- unittest/frame-anchor-constraint.cpp | 11 +- unittest/frames-derivatives.cpp | 7 +- unittest/frames.cpp | 10 +- unittest/full-space-cone.cpp | 9 +- unittest/fusion.cpp | 9 +- unittest/geometry-algorithms.cpp | 7 +- unittest/geometry-model.cpp | 7 +- unittest/geometry-object.cpp | 6 +- unittest/gram-schmidt-orthonormalisation.cpp | 7 +- unittest/impulse-dynamics-derivatives.cpp | 7 +- unittest/impulse-dynamics.cpp | 7 +- unittest/joint-composite.cpp | 9 +- unittest/joint-configurations.cpp | 9 +- unittest/joint-ellipsoid.cpp | 6 +- unittest/joint-free-flyer.cpp | 8 +- unittest/joint-friction-constraint.cpp | 11 +- unittest/joint-generic.cpp | 13 +- unittest/joint-helical.cpp | 2 + unittest/joint-jacobian.cpp | 9 +- unittest/joint-limit-constraint.cpp | 11 +- unittest/joint-mimic.cpp | 8 +- unittest/joint-motion-subspace.cpp | 9 +- unittest/joint-planar.cpp | 8 +- unittest/joint-prismatic.cpp | 2 + unittest/joint-revolute.cpp | 2 + unittest/joint-spherical.cpp | 2 + unittest/joint-translation.cpp | 8 +- unittest/joint-universal.cpp | 6 +- unittest/joint-visitors.cpp | 8 +- unittest/kinematics-derivatives.cpp | 9 +- unittest/kinematics.cpp | 7 +- unittest/lanczos-decomposition.cpp | 7 +- unittest/liegroups.cpp | 13 +- unittest/loop-constrained-aba.cpp | 7 +- unittest/macros.cpp | 9 +- unittest/matrix-block-element.cpp | 7 +- unittest/matrix-inverse.cpp | 7 +- unittest/matrix-product.cpp | 7 +- unittest/matrix-stack.cpp | 9 +- unittest/matrix.cpp | 6 +- unittest/mjcf.cpp | 9 +- unittest/model-configuration-converter.cpp | 6 +- unittest/model-graph.cpp | 8 +- unittest/model.cpp | 11 +- unittest/multiprecision-mpfr.cpp | 7 +- unittest/multiprecision.cpp | 7 +- unittest/openmp-exception.cpp | 9 +- unittest/orthant-cone-jordan-operation.cpp | 8 +- unittest/orthant-cone.cpp | 9 +- unittest/parallel-aba.cpp | 9 +- unittest/parallel-geometry.cpp | 7 +- unittest/parallel-rnea.cpp | 9 +- unittest/pgs-solver.cpp | 9 +- unittest/point-anchor-constraint.cpp | 11 +- unittest/point-contact-constraint.cpp | 11 +- unittest/preconditioner.cpp | 6 +- unittest/promote-static-eval.cpp | 9 +- unittest/promote-static-op.cpp | 9 +- unittest/pv-solver.cpp | 7 +- unittest/python_parser.cpp | 6 +- unittest/quaternion.cpp | 6 +- unittest/reachable-workspace.cpp | 8 +- unittest/reference.cpp | 9 +- unittest/regressor.cpp | 7 +- unittest/rigid-constraint-conversion.cpp | 9 +- unittest/rnea-derivatives.cpp | 7 +- unittest/rnea-second-order-derivatives.cpp | 7 +- unittest/rnea.cpp | 7 +- unittest/rotation.cpp | 6 +- unittest/rpy.cpp | 7 +- unittest/sample-models.cpp | 9 +- unittest/sdf.cpp | 6 +- .../second-order-cone-jordan-operation.cpp | 8 +- unittest/serialization-algorithm.cpp | 7 +- unittest/serialization-constraints.cpp | 8 +- unittest/serialization-math.cpp | 9 +- unittest/serialization-multibody-joint.cpp | 7 +- unittest/serialization-multibody.cpp | 9 +- unittest/serialization.cpp | 9 +- unittest/sincos.cpp | 6 +- unittest/size-in-bytes.cpp | 9 +- unittest/spatial.cpp | 8 +- unittest/srdf.cpp | 7 +- unittest/symmetric.cpp | 10 +- unittest/tree-broadphase.cpp | 7 +- unittest/tridiagonal-matrix.cpp | 7 +- unittest/urdf.cpp | 7 +- unittest/value.cpp | 6 +- unittest/vector.cpp | 7 +- unittest/version.cpp | 7 +- unittest/visitor.cpp | 9 +- unittest/visualizer.cpp | 6 +- unittest/zero-cone.cpp | 9 +- 164 files changed, 722 insertions(+), 1073 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ebe619074b..d1e9ad1a09 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,8 @@ cmake_minimum_required(VERSION 3.22) project( pinocchio VERSION 0.1.0 - DESCRIPTION "A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives" + DESCRIPTION + "A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives" HOMEPAGE_URL "http://github.com/stack-of-tasks/pinocchio" LANGUAGES CXX ) @@ -34,10 +35,11 @@ jrl_option(BUILD_WITH_COMMIT_VERSION "Build libraries by setting specific commit # TODO : remove ? deprecated jrl_option(BUILD_UNIT_TESTS "BUILD_UNIT_TESTS is deprecated. Use BUILD_TESTING instead.\ If you are manually building Pinocchio from source in an existing build folder,\ - we suggest that you delete your build folder and make a new one." ON ) + we suggest that you delete your build folder and make a new one." ON +) jrl_option(BUILD_TESTING "build the tests" ON) -if (BUILD_UNIT_TESTS) - set(BUILD_TESTING ${BUILD_UNIT_TESTS}) +if(BUILD_UNIT_TESTS) + set(BUILD_TESTING ${BUILD_UNIT_TESTS}) endif() jrl_option(BUILD_ADVANCED_TESTING "Build the advanced tests (multiprecision, etc.) of Pinocchio" OFF) jrl_option(PINOCCHIO_BUILD_MPFR_TESTING "Build MPFR dependent tests" OFF) @@ -51,9 +53,9 @@ if(NOT WIN32) jrl_option(BUILD_WITH_CODEGEN_SUPPORT "Build the library with the support of code generation (via CppADCodeGen)" OFF) endif() jrl_option(BUILD_WITH_OPENMP_SUPPORT "Build the library with the OpenMP support" OFF) -# TODO : why not present with jrl v1 +# TODO : why not present with jrl v1 jrl_option(BUILD_PYTHON_INTERFACE "Build the Python bindings" ON) -jrl_option(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT "Build the Python interface with Boost.Multiprecision MPFR support" +jrl_option(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT "Build the Python interface with Boost.Multiprecision MPFR support" OFF CONDITION BUILD_PYTHON_INTERFACE FALLBACK OFF @@ -82,18 +84,27 @@ jrl_option(PINOCCHIO_BUILD_VISUALIZERS "Build the pinocchio visualizers library" # ---------------------------------------------------- # --- DEPENDENCIES ----------------------------------- # ---------------------------------------------------- +# TODO why not neccessary in Simple +set(Boost_USE_DEBUG_RUNTIME OFF) jrl_find_package(Eigen3 CONFIG REQUIRED EXPECTED_TARGETS Eigen3::Eigen) jrl_find_package(Boost CONFIG REQUIRED COMPONENTS serialization filesystem EXPECTED_TARGETS Boost::boost Boost::serialization Boost::filesystem ) -set(PINOCCHIO_MODEL_DIR "${PROJECT_SOURCE_DIR}/models") -jrl_find_package(example-robot-data CONFIG REQUIRED EXPECTED_TARGETS example-robot-data::example-robot-data) - if(BUILD_WITH_COLLISION_SUPPORT) jrl_find_package(coal REQUIRED) endif() + +if(BUILD_TESTING) + jrl_find_package(Boost CONFIG REQUIRED COMPONENTS unit_test_framework + EXPECTED_TARGETS Boost::unit_test_framework + ) +endif() + +set(PINOCCHIO_MODEL_DIR "${PROJECT_SOURCE_DIR}/models") +jrl_find_package(example-robot-data CONFIG REQUIRED EXPECTED_TARGETS example-robot-data::example-robot-data) + # ---------------------------------------------------- # --- MAIN LIBRARY ----------------------------------- # ---------------------------------------------------- @@ -105,11 +116,14 @@ jrl_target_generate_warning_header(pinocchio_headers INTERFACE FILENAME pinocchi jrl_target_generate_deprecated_header(pinocchio_headers INTERFACE FILENAME pinocchio/deprecated.hpp LIBRARY_NAME pinocchio) jrl_target_generate_tracy_header(pinocchio_headers INTERFACE FILENAME pinocchio/tracy.hpp LIBRARY_NAME pinocchio) -target_compile_definitions(pinocchio_headers INTERFACE - $<$:EIGEN_INITIALIZE_MATRICES_BY_NAN> +target_compile_definitions( + pinocchio_headers + INTERFACE $<$:EIGEN_INITIALIZE_MATRICES_BY_NAN> ) -target_compile_definitions(pinocchio_headers INTERFACE +target_compile_definitions( + pinocchio_headers + INTERFACE INTERFACE BOOST_MPL_LIMIT_LIST_SIZE=30 BOOST_MPL_LIMIT_VECTOR_SIZE=30 @@ -120,10 +134,7 @@ target_compile_definitions(pinocchio_headers INTERFACE target_link_libraries( pinocchio_headers - INTERFACE - Eigen3::Eigen - Boost::boost - Boost::serialization + INTERFACE Eigen3::Eigen Boost::boost Boost::serialization ) target_include_directories( @@ -136,7 +147,7 @@ target_include_directories( # Dependency free headers # Root, algorithm, common, containers, math, multibody, serialization, spatial, utils jrl_target_headers(pinocchio_headers PUBLIC - HEADERS + HEADERS include/pinocchio/algorithm/aba-derivatives.hpp include/pinocchio/algorithm/aba.hpp include/pinocchio/algorithm/center-of-mass-derivatives.hpp @@ -246,7 +257,7 @@ jrl_target_headers(pinocchio_headers PUBLIC ) jrl_target_headers(pinocchio_headers PUBLIC - HEADERS + HEADERS include/pinocchio/src/visualizers/base-visualizer.hxx include/pinocchio/src/common/fwd.hxx include/pinocchio/src/common/model-entity.hxx @@ -565,13 +576,11 @@ if(BUILD_WITH_COLLISION_SUPPORT) target_sources( pinocchio_collision - PRIVATE - src/collision/collision.cpp - src/collision/distance.cpp + PRIVATE src/collision/collision.cpp src/collision/distance.cpp ) - jrl_target_headers(pinocchio_collision PUBLIC - HEADERS + jrl_target_headers(pinocchio_collision PUBLIC + HEADERS include/pinocchio/collision/broadphase-callbacks.hpp include/pinocchio/collision/broadphase-manager-base.hpp include/pinocchio/collision/broadphase-manager.hpp @@ -598,12 +607,20 @@ if(BUILD_WITH_COLLISION_SUPPORT) BASE_DIRS include ) - target_link_libraries(pinocchio_collision - PUBLIC pinocchio_default coal::coal) + target_link_libraries( + pinocchio_collision + PUBLIC pinocchio_default coal::coal + ) - target_compile_definitions(pinocchio_collision PUBLIC PINOCCHIO_WITH_COLLISION) + target_compile_definitions( + pinocchio_collision + PUBLIC PINOCCHIO_WITH_COLLISION + ) # DEPRECATED: Setup back compatibility define - target_compile_definitions(pinocchio_collision PUBLIC PINOCCHIO_WITH_HPP_FCL) + target_compile_definitions( + pinocchio_collision + PUBLIC PINOCCHIO_WITH_HPP_FCL + ) jrl_target_set_default_compile_options(pinocchio_collision PRIVATE) jrl_target_enforce_msvc_conformance(pinocchio_collision PRIVATE) jrl_target_generate_config_header(pinocchio_collision INTERFACE FILENAME pinocchio/collision/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_collision) @@ -615,44 +632,47 @@ endif() if(ENABLE_TEMPLATE_INSTANTIATION) add_library(pinocchio_template_instantiation_default SHARED) - target_sources(pinocchio_template_instantiation_default PRIVATE - src/algorithm/cholesky.cpp - src/algorithm/aba.cpp - src/algorithm/regressor.cpp - src/algorithm/contact-dynamics.cpp - src/algorithm/frames-derivatives.cpp - src/algorithm/impulse-dynamics.cpp - src/algorithm/model.cpp - src/algorithm/constrained-dynamics.cpp - src/algorithm/rnea-derivatives.cpp - src/algorithm/compute-all-terms.cpp - src/algorithm/jacobian.cpp - src/algorithm/energy.cpp - src/algorithm/centroidal-derivatives.cpp - src/algorithm/frames.cpp - src/algorithm/constrained-dynamics-derivatives.cpp - src/algorithm/center-of-mass.cpp - src/algorithm/geometry.cpp - src/algorithm/kinematics.cpp - src/algorithm/rnea.cpp - src/algorithm/centroidal.cpp - src/algorithm/aba-derivatives.cpp - src/algorithm/crba.cpp - src/algorithm/constraint-cholesky.cpp - src/algorithm/joint-configuration.cpp - src/algorithm/center-of-mass-derivatives.cpp - src/algorithm/solvers/admm-solver.cpp - src/algorithm/solvers/pgs-solver.cpp - src/algorithm/kinematics-derivatives.cpp - src/algorithm/constraints/utils.cpp - src/multibody/model.cpp - src/multibody/data.cpp - src/multibody/sample-models.cpp + target_sources( + pinocchio_template_instantiation_default + PRIVATE + src/algorithm/cholesky.cpp + src/algorithm/aba.cpp + src/algorithm/regressor.cpp + src/algorithm/contact-dynamics.cpp + src/algorithm/frames-derivatives.cpp + src/algorithm/impulse-dynamics.cpp + src/algorithm/model.cpp + src/algorithm/constrained-dynamics.cpp + src/algorithm/rnea-derivatives.cpp + src/algorithm/compute-all-terms.cpp + src/algorithm/jacobian.cpp + src/algorithm/energy.cpp + src/algorithm/centroidal-derivatives.cpp + src/algorithm/frames.cpp + src/algorithm/constrained-dynamics-derivatives.cpp + src/algorithm/center-of-mass.cpp + src/algorithm/geometry.cpp + src/algorithm/kinematics.cpp + src/algorithm/rnea.cpp + src/algorithm/centroidal.cpp + src/algorithm/aba-derivatives.cpp + src/algorithm/crba.cpp + src/algorithm/constraint-cholesky.cpp + src/algorithm/joint-configuration.cpp + src/algorithm/center-of-mass-derivatives.cpp + src/algorithm/solvers/admm-solver.cpp + src/algorithm/solvers/pgs-solver.cpp + src/algorithm/kinematics-derivatives.cpp + src/algorithm/constraints/utils.cpp + src/multibody/model.cpp + src/multibody/data.cpp + src/multibody/sample-models.cpp ) target_link_libraries( pinocchio_template_instantiation_default - PUBLIC pinocchio_headers) + PUBLIC pinocchio_headers + ) target_compile_definitions( pinocchio_template_instantiation_default @@ -668,7 +688,14 @@ if(ENABLE_TEMPLATE_INSTANTIATION) ) list(APPEND EXPORTED_TARGETS pinocchio_template_instantiation_default) +endif() +# ---------------------------------------------------- +# --- UNIT TESTS --------------------------------------- +# ---------------------------------------------------- +if(BUILD_TESTING) + enable_testing() + add_subdirectory(unittest) endif() # ---------------------------------------------------- diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index 4ae98a10c2..5571583aef 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -3,252 +3,75 @@ # Copyright (c) 2018-2026 INRIA # Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. # +# TODO test link with pinocchio + +add_library(pinocchio-tests-resources INTERFACE) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/serialization-data) +target_compile_definitions( + pinocchio-tests-resources + INTERFACE + TEST_SERIALIZATION_FOLDER=\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\" + PINOCCHIO_MODEL_DIR=\"${PINOCCHIO_MODEL_DIR}\" +) -# --- MACROS ------------------------------------------------------------------ -# --- MACROS ------------------------------------------------------------------ -# --- MACROS ------------------------------------------------------------------ - -function(ADD_TEST_CFLAGS target) - if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - get_cpp_test_name(${target} ${CMAKE_CURRENT_SOURCE_DIR} test_name) - foreach(ARG ${ARGN}) - set_property( - TARGET ${test_name} - APPEND_STRING - PROPERTY COMPILE_FLAGS "${ARG} " - ) - endforeach() - endif() -endfunction() +add_custom_target(pinocchio-tests) + +# ---------------------------------------------------- +# --- MACROS ---------------------------------------- +# ---------------------------------------------------- set(PINOCCHIO_UNIT_TEST_HEADERS ${PROJECT_SOURCE_DIR}/unittest/constraints/init_constraints.hpp ${PROJECT_SOURCE_DIR}/unittest/constraints/jacobians-checker.hpp ) - -# Compute flags outside the macro to avoid recomputing it for each tests -cxx_flags_by_compiler_frontend(MSVC _USE_MATH_DEFINES OUTPUT TEST_PRIVATE_DEFINITIONS) - -function(GET_CPP_TEST_NAME name src_dir full_test_name) - string(REPLACE "${PINOCCHIO_UNIT_TEST_DIR}" "" prefix_name "${src_dir}") - string(REGEX REPLACE "[/]" "-" prefix_name "${prefix_name}-") - - set(${full_test_name} - "${PROJECT_NAME}-test-cpp${prefix_name}${name}" - PARENT_SCOPE +# TODO rename in pinocchio_add_test +function(add_pinocchio_unit_test name) + set(test_name "pinocchio-test-cpp-${name}") + add_executable(${test_name} ${name}.cpp) + target_link_libraries( + ${test_name} + PRIVATE + Boost::unit_test_framework + pinocchio + pinocchio-tests-resources + example-robot-data::example-robot-data ) -endfunction() - -set(PINOCCHIO_UNIT_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}) - -function(ADD_PINOCCHIO_UNIT_TEST name) - if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - set(options - HEADER_ONLY - PARSERS - EXTRA - COLLISION - CPPAD - PARALLEL - VISUALIZERS - PYTHON_PARSER - PARSERS_OPTIONAL - EXTRA_OPTIONAL - COLLISION_OPTIONAL - PARALLEL_OPTIONAL - ) - set(oneValueArgs) - set(multiValueArgs PACKAGES) - cmake_parse_arguments( - unit_test - "${options}" - "${oneValueArgs}" - "${multiValueArgs}" - ${ARGN} - ) - - set(PKGS ${unit_test_PACKAGES}) - get_cpp_test_name(${name} ${CMAKE_CURRENT_SOURCE_DIR} TEST_NAME) - add_unit_test(${TEST_NAME} ${name}.cpp) + jrl_target_set_default_compile_options(${test_name} PRIVATE) + jrl_target_enforce_msvc_conformance(${test_name} PRIVATE) - set(MODULE_NAME "${NAME}Test") - string(REPLACE "-" "_" MODULE_NAME ${MODULE_NAME}) - target_compile_definitions( - ${TEST_NAME} - PRIVATE - ${TEST_PRIVATE_DEFINITIONS} - BOOST_TEST_DYN_LINK - BOOST_TEST_MODULE=${MODULE_NAME} - PINOCCHIO_MODEL_DIR=\"${PINOCCHIO_MODEL_DIR}\" - ) - - # There is no RPATH in Windows, then we must use the PATH to find the DLL - if(WIN32) - string(REPLACE ";" "\\\;" _PATH "$ENV{PATH}") - set(ENV_VARIABLES - "PATH=${_PATH}\\\;${PROJECT_BINARY_DIR}/src\\\;${PROJECT_BINARY_DIR}/bindings/python/pinocchio" - ) - set_tests_properties( - ${TEST_NAME} - PROPERTIES ENVIRONMENT "${ENV_VARIABLES}" - ) - endif() - - set_target_properties(${TEST_NAME} PROPERTIES LINKER_LANGUAGE CXX) - target_include_directories( - ${TEST_NAME} - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} - ) - - if(unit_test_HEADER_ONLY) - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_headers) - else() - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_default) - endif() - - if( - unit_test_PARSERS - OR (unit_test_PARSERS_OPTIONAL AND TARGET ${PROJECT_NAME}_parsers) - ) - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_parsers) - endif() - - if( - unit_test_PARALLEL - OR (unit_test_PARALLEL_OPTIONAL AND TARGET ${PROJECT_NAME}_parallel) - ) - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_parallel) - endif() - - if( - unit_test_COLLISION - OR (unit_test_COLLISION_OPTIONAL AND TARGET ${PROJECT_NAME}_collision) - ) - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_collision) - if( - unit_test_PARALLE - OR ( - unit_test_PARALLEL_OPTIONAL - AND TARGET ${PROJECT_NAME}_parallel - ) - ) - target_link_libraries( - ${TEST_NAME} - PUBLIC ${PROJECT_NAME}_collision_parallel - ) - endif() - endif() - - if(unit_test_CPPAD) - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_cppad) - endif() - - if( - unit_test_EXTRA - OR (unit_test_EXTRA_OPTIONAL AND TARGET ${PROJECT_NAME}_extra) - ) - target_link_libraries(${TEST_NAME} PUBLIC ${PROJECT_NAME}_extra) - endif() - - if(unit_test_VISUALIZERS) - target_link_libraries( - ${TEST_NAME} - PUBLIC ${PROJECT_NAME}_visualizers - ) - endif() - - if(unit_test_PYTHON_PARSER) - target_link_libraries( - ${TEST_NAME} - PUBLIC ${PROJECT_NAME}_python_parser - ) - add_windows_dll_path_to_test(${TEST_NAME}) - get_test_property(${TEST_NAME} ENVIRONMENT ENV_VARIABLES) - compute_pythonpath(PYTHON_ENV_VARIABLES "bindings/python") - list(APPEND ENV_VARIABLES ${PYTHON_ENV_VARIABLES}) - if(WIN32) - # This line is mandatory because of Github action. The test run well on Windows + Conda. - # This hide something wrong. Maybe the test is linking against the wrong Python library or - # call the wrong interpreter. - get_filename_component(_PYTHONHOME ${PYTHON_EXECUTABLE} PATH) - list(APPEND ENV_VARIABLES "PYTHONHOME=${_PYTHONHOME}") - endif() - set_tests_properties( - ${TEST_NAME} - PROPERTIES ENVIRONMENT "${ENV_VARIABLES}" - ) - endif() - - modernize_target_link_libraries( - ${TEST_NAME} - SCOPE PRIVATE - TARGETS Boost::unit_test_framework - LIBRARIES ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} - ) - - modernize_target_link_libraries( - ${TEST_NAME} - SCOPE PRIVATE - TARGETS Boost::filesystem - LIBRARIES ${Boost_FILESYSTEM_LIBRARY} - INCLUDE_DIRS ${Boost_INCLUDE_DIRS} - ) - - if(PKGS) - target_link_libraries(${TEST_NAME} PRIVATE ${PKGS}) - endif() - if(TARGET example-robot-data::example-robot-data) - target_link_libraries( - ${TEST_NAME} - PRIVATE example-robot-data::example-robot-data - ) - else() - target_compile_definitions( - ${TEST_NAME} - PRIVATE - "EXAMPLE_ROBOT_DATA_MODEL_DIR=\"${EXAMPLE_ROBOT_DATA_MODEL_DIR}\"" - ) - endif() - endif() + add_test(NAME ${test_name} COMMAND ${test_name}) + add_dependencies(pinocchio-tests ${test_name}) endfunction() -macro(ADD_PINOCCHIO_PARALLEL_UNIT_TEST NAME) - if(BUILD_WITH_OPENMP_SUPPORT) - add_pinocchio_unit_test(${ARGV} PARALLEL) - endif() -endmacro() - -# Find Boost.UnitTestFramework -find_package(Boost COMPONENTS unit_test_framework) - +# CPP tests # Header only -add_pinocchio_unit_test(alloca HEADER_ONLY) -add_pinocchio_unit_test(double-entry-container HEADER_ONLY) -add_pinocchio_unit_test(macros HEADER_ONLY) -add_pinocchio_unit_test(reference HEADER_ONLY) -add_pinocchio_unit_test(eigen-storage HEADER_ONLY) -add_pinocchio_unit_test(matrix-stack HEADER_ONLY) -add_pinocchio_unit_test(size-in-bytes HEADER_ONLY) +add_pinocchio_unit_test(alloca) +add_pinocchio_unit_test(double-entry-container) +add_pinocchio_unit_test(macros) +add_pinocchio_unit_test(reference) +add_pinocchio_unit_test(eigen-storage) +add_pinocchio_unit_test(matrix-stack) +add_pinocchio_unit_test(size-in-bytes) # Math components -add_pinocchio_unit_test(eigen-basic-op HEADER_ONLY) -add_pinocchio_unit_test(matrix HEADER_ONLY) -add_pinocchio_unit_test(block-diagonal-matrix HEADER_ONLY) -add_pinocchio_unit_test(matrix-block-element HEADER_ONLY) -add_pinocchio_unit_test(eigen-tensor HEADER_ONLY) -add_pinocchio_unit_test(sincos HEADER_ONLY) -add_pinocchio_unit_test(quaternion HEADER_ONLY) -add_pinocchio_unit_test(rpy HEADER_ONLY) -add_pinocchio_unit_test(rotation HEADER_ONLY) -add_pinocchio_unit_test(vector HEADER_ONLY) -add_pinocchio_unit_test(matrix-inverse HEADER_ONLY) -add_pinocchio_unit_test(matrix-product HEADER_ONLY) -add_pinocchio_unit_test(eigenvalues HEADER_ONLY) -add_pinocchio_unit_test(tridiagonal-matrix HEADER_ONLY) -add_pinocchio_unit_test(lanczos-decomposition HEADER_ONLY) -add_pinocchio_unit_test(gram-schmidt-orthonormalisation HEADER_ONLY) -add_pinocchio_unit_test(promote-static-eval HEADER_ONLY) +add_pinocchio_unit_test(eigen-basic-op) +add_pinocchio_unit_test(matrix) +add_pinocchio_unit_test(block-diagonal-matrix) +add_pinocchio_unit_test(matrix-block-element) +add_pinocchio_unit_test(eigen-tensor) +add_pinocchio_unit_test(sincos) +add_pinocchio_unit_test(quaternion) +add_pinocchio_unit_test(rpy) +add_pinocchio_unit_test(rotation) +add_pinocchio_unit_test(vector) +add_pinocchio_unit_test(matrix-inverse) +add_pinocchio_unit_test(matrix-product) +add_pinocchio_unit_test(eigenvalues) +add_pinocchio_unit_test(tridiagonal-matrix) +add_pinocchio_unit_test(lanczos-decomposition) +add_pinocchio_unit_test(gram-schmidt-orthonormalisation) +add_pinocchio_unit_test(promote-static-eval) # Derivatives algo add_pinocchio_unit_test(kinematics-derivatives) @@ -271,9 +94,11 @@ add_pinocchio_unit_test(rnea-second-order-derivatives) add_pinocchio_unit_test(spatial) add_pinocchio_unit_test(symmetric) add_pinocchio_unit_test(aba) -add_pinocchio_parallel_unit_test(parallel-aba) +# TODO handle paralle +#add_pinocchio_parallel_unit_test(parallel-aba) add_pinocchio_unit_test(rnea) -add_pinocchio_parallel_unit_test(parallel-rnea) +# TODO handle paralle +#add_pinocchio_parallel_unit_test(parallel-rnea) add_pinocchio_unit_test(crba) add_pinocchio_unit_test(centroidal) add_pinocchio_unit_test(com) @@ -294,7 +119,8 @@ add_pinocchio_unit_test(contact-inverse-dynamics) add_pinocchio_unit_test(closed-loop-dynamics) add_pinocchio_unit_test(loop-constrained-aba) add_pinocchio_unit_test(impulse-dynamics) -add_pinocchio_unit_test(sample-models COLLISION_OPTIONAL) +# TODO handle collision +#add_pinocchio_unit_test(sample-models COLLISION_OPTIONAL) add_pinocchio_unit_test(kinematics) add_pinocchio_unit_test(delassus) add_pinocchio_unit_test(delassus-operations) @@ -304,56 +130,47 @@ add_pinocchio_unit_test(delassus-operator-dense) add_pinocchio_unit_test(delassus-operator-rigid-body) add_pinocchio_unit_test(preconditioner) add_pinocchio_unit_test(pv-solver) -add_pinocchio_parallel_unit_test(openmp-exception) -add_pinocchio_unit_test( - mjcf - PARSERS - COLLISION_OPTIONAL -) +# TODO handle parallel ut +# add_pinocchio_parallel_unit_test(openmp-exception) if(BUILD_WITH_URDF_SUPPORT) add_pinocchio_unit_test( urdf - PARSERS - COLLISION_OPTIONAL ) - add_pinocchio_unit_test(value PARSERS) + add_pinocchio_unit_test(value) if(BUILD_WITH_COLLISION_SUPPORT) - add_pinocchio_unit_test(geometry-object COLLISION) + add_pinocchio_unit_test(geometry-object) add_pinocchio_unit_test( geometry-model - PARSERS - COLLISION ) add_pinocchio_unit_test( geometry-algorithms - PARSERS - COLLISION ) add_pinocchio_unit_test( broadphase - PARSERS - COLLISION ) add_pinocchio_unit_test( tree-broadphase - PARSERS - COLLISION ) - add_pinocchio_parallel_unit_test(parallel-geometry PARSERS COLLISION) + # TODO handle parallel + #add_pinocchio_parallel_unit_test(parallel-geometry) add_pinocchio_unit_test( srdf - PARSERS - COLLISION ) endif() endif() if(BUILD_WITH_SDF_SUPPORT) - add_pinocchio_unit_test(sdf PARSERS) + add_pinocchio_unit_test(sdf) endif() +# TODO handle parsers ut +# add_pinocchio_unit_test( +# mjcf +# PARSERS +# COLLISION_OPTIONAL +# ) if(BUILD_WITH_EXTRA_SUPPORT) add_pinocchio_unit_test( @@ -393,7 +210,8 @@ add_pinocchio_unit_test(joint-universal) add_pinocchio_unit_test(joint-visitors) # Main corpus -add_pinocchio_unit_test(model COLLISION_OPTIONAL) +# TODO : Collision check +#add_pinocchio_unit_test(model) add_pinocchio_unit_test(data) add_pinocchio_unit_test(joint-motion-subspace) add_pinocchio_unit_test(compute-all-terms) @@ -406,17 +224,18 @@ add_pinocchio_unit_test(explog) add_pinocchio_unit_test(finite-differences) add_pinocchio_unit_test(visitor) add_pinocchio_unit_test(algo-check) -add_pinocchio_unit_test(model-graph PARSERS) -add_pinocchio_unit_test(model-configuration-converter PARSERS) +# TODO : parsers +#add_pinocchio_unit_test(model-graph) +#add_pinocchio_unit_test(model-configuration-converter) # Warning ignore with pragma doesn't work for a part of this test, so we ignore two warning globally -cxx_flags_by_compiler_frontend( - GNU -Wno-maybe-uninitialized -Wuse-after-free=0 - OUTPUT LIEGROUPS_OPTIONS - FILTER -) add_pinocchio_unit_test(liegroups) -add_test_cflags(liegroups ${LIEGROUPS_OPTIONS}) +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options( + pinocchio-test-cpp-liegroups + PRIVATE -Wno-maybe-uninitialized -Wuse-after-free=0 + ) +endif() add_pinocchio_unit_test(cartesian-product-liegroups) add_pinocchio_unit_test(regressor) @@ -439,42 +258,13 @@ add_pinocchio_unit_test(second-order-cone-jordan-operation) add_pinocchio_unit_test(orthant-cone-jordan-operation) # Serialization -make_directory("${CMAKE_CURRENT_BINARY_DIR}/serialization-data") add_pinocchio_unit_test(serialization) -add_test_cflags( - serialization - "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) add_pinocchio_unit_test(serialization-math) -add_test_cflags( - serialization-math - "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) -add_pinocchio_unit_test(serialization-multibody COLLISION_OPTIONAL) -add_test_cflags( - serialization-multibody - "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) +add_pinocchio_unit_test(serialization-multibody) add_pinocchio_unit_test(serialization-multibody-joint) -add_test_cflags( - serialization-multibody-joint - "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) add_pinocchio_unit_test(serialization-algorithm) -add_test_cflags( - serialization-algorithm - "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) add_pinocchio_unit_test(serialization-constraints) -add_test_cflags( - serialization-constraints - "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) - add_pinocchio_unit_test(csv) -add_test_cflags( - csv "-DTEST_SERIALIZATION_FOLDER=\\\"${CMAKE_CURRENT_BINARY_DIR}/serialization-data\\\"" -) add_subdirectory(algorithm) diff --git a/unittest/aba-derivatives.cpp b/unittest/aba-derivatives.cpp index b73a9ce9c8..706b23f0f7 100644 --- a/unittest/aba-derivatives.cpp +++ b/unittest/aba-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2020 CNRS INRIA // +#define BOOST_TEST_MODULE aba_derivatives + #include "pinocchio/algorithm/jacobian.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/algorithm/kinematics-derivatives.hpp" @@ -11,10 +13,9 @@ #include "pinocchio/algorithm/aba-derivatives.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_aba_derivatives) { @@ -535,5 +536,3 @@ BOOST_AUTO_TEST_CASE(test_optimized_aba_derivatives_fext) BOOST_CHECK(aba_partial_dtau.isApprox(aba_partial_dtau_ref)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/aba.cpp b/unittest/aba.cpp index b021cc57f0..4ece96de91 100644 --- a/unittest/aba.cpp +++ b/unittest/aba.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2021 CNRS INRIA // +#define BOOST_TEST_MODULE aba + #include "pinocchio/algorithm/kinematics.hpp" #include "pinocchio/algorithm/aba.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -12,10 +14,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include template void test_joint_methods(const pinocchio::JointModelBase & jmodel) @@ -381,5 +382,3 @@ BOOST_AUTO_TEST_CASE(test_roto_inertia_effects) BOOST_CHECK((data.Minv * data_ref.M).isIdentity()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/admm-solver.cpp b/unittest/admm-solver.cpp index 38d90e4c3f..19d8d97121 100644 --- a/unittest/admm-solver.cpp +++ b/unittest/admm-solver.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE admm_solver + #include "pinocchio/algorithm/constraint-cholesky.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/constraints.hpp" @@ -9,9 +11,10 @@ #include "pinocchio/algorithm/aba.hpp" #include "pinocchio/algorithm/crba.hpp" -#include #include +#include + using namespace pinocchio; template @@ -133,8 +136,6 @@ struct TestBoxTpl std::size_t n_iter; }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(ball) { Model model; @@ -1459,5 +1460,3 @@ BOOST_AUTO_TEST_CASE(test_copy_result) result_copy.x.setZero(); BOOST_CHECK(result_assigned.x.isApprox(expected_x)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/algo-check.cpp b/unittest/algo-check.cpp index 1f8a54428e..a4fbcd5d56 100644 --- a/unittest/algo-check.cpp +++ b/unittest/algo-check.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2022 CNRS INRIA // +#define BOOST_TEST_MODULE algo_check + #include #include #include "pinocchio/multibody/sample-models.hpp" @@ -12,9 +14,10 @@ using namespace pinocchio; -#include #include +#include + // Dummy checker. struct Check1 : public AlgorithmCheckerBase { @@ -24,8 +27,6 @@ struct Check1 : public AlgorithmCheckerBase } }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_check) { using namespace boost::fusion; @@ -56,5 +57,3 @@ BOOST_AUTO_TEST_CASE(test_check) BOOST_CHECK(!model_mimic.check(MimicChecker())); BOOST_CHECK(model_mimic.check(data_mimic)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/algorithm/utils/force.cpp b/unittest/algorithm/utils/force.cpp index eb767682f9..541ee9e161 100644 --- a/unittest/algorithm/utils/force.cpp +++ b/unittest/algorithm/utils/force.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE force + #include #include @@ -9,8 +11,6 @@ using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_force) { using namespace pinocchio; @@ -58,5 +58,3 @@ BOOST_AUTO_TEST_CASE(test_force) changeReferenceFrame(placement, f_sol_w, WORLD, LOCAL_WORLD_ALIGNED).isApprox(f_in)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/algorithm/utils/motion.cpp b/unittest/algorithm/utils/motion.cpp index fe3d8c2255..28954f9746 100644 --- a/unittest/algorithm/utils/motion.cpp +++ b/unittest/algorithm/utils/motion.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE motion + #include #include @@ -11,8 +13,6 @@ using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_motion) { using namespace pinocchio; @@ -60,5 +60,3 @@ BOOST_AUTO_TEST_CASE(test_motion) changeReferenceFrame(placement, m_sol_w, WORLD, LOCAL_WORLD_ALIGNED).isApprox(m_in)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/all-joints.cpp b/unittest/all-joints.cpp index bcd9e4386d..69326baa7d 100644 --- a/unittest/all-joints.cpp +++ b/unittest/all-joints.cpp @@ -3,12 +3,15 @@ // Copyright(c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE all_joints + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/liegroup.hpp" -#include #include +#include + using namespace pinocchio; template @@ -177,8 +180,6 @@ struct init> } }; -BOOST_AUTO_TEST_SUITE(joint_model_base_test) - template struct TestJointModel { @@ -218,7 +219,7 @@ struct TestJointModelTransform : TestJointModel } }; -BOOST_AUTO_TEST_CASE(isEqual) +BOOST_AUTO_TEST_CASE(all_joints_isEqual) { typedef JointCollectionDefault::JointModelVariant JointModelVariant; boost::mpl::for_each(TestJointModelIsEqual()); @@ -276,7 +277,7 @@ struct TestJointModelCast : TestJointModel } }; -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(all_joints_cast) { typedef JointCollectionDefault::JointModelVariant JointModelVariant; boost::mpl::for_each(TestJointModelCast()); @@ -310,5 +311,3 @@ BOOST_AUTO_TEST_CASE(test_disp) TestJointModelDisp()(JointModel()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/alloca.cpp b/unittest/alloca.cpp index 070b3d8682..402424c2ae 100644 --- a/unittest/alloca.cpp +++ b/unittest/alloca.cpp @@ -2,15 +2,16 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE alloca + #include #include "pinocchio/eigen-common.hpp" #include "pinocchio/utils/alloca.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include template typename PINOCCHIO_EIGEN_PLAIN_TYPE(MatrixLikeInput) @@ -51,5 +52,3 @@ BOOST_AUTO_TEST_CASE(macro) BOOST_CHECK(map.cols() == cols); BOOST_CHECK(map.isZero(0.)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/block-diagonal-matrix.cpp b/unittest/block-diagonal-matrix.cpp index 5b7a0462c4..454da3b31d 100644 --- a/unittest/block-diagonal-matrix.cpp +++ b/unittest/block-diagonal-matrix.cpp @@ -2,12 +2,13 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE block_diagonal_matrix + #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; typedef Eigen::Matrix M11; @@ -703,5 +704,3 @@ BOOST_AUTO_TEST_CASE(test_nested_block_diagonal_copy) bdm_copy.blocks()[1].nested_blocks()[0].map.data() != bdm.blocks()[1].nested_blocks()[0].map.data()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/box-set.cpp b/unittest/box-set.cpp index c874872765..8c94e58a10 100644 --- a/unittest/box-set.cpp +++ b/unittest/box-set.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE box_set + #include "pinocchio/constraints.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_proj) { @@ -82,5 +83,3 @@ BOOST_AUTO_TEST_CASE(test_scaled_proj) BOOST_CHECK(fabs((x - proj_x).dot(proj_x)) <= 1e-12); // orthogonal projection } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/broadphase.cpp b/unittest/broadphase.cpp index add50e9b72..58065b9146 100644 --- a/unittest/broadphase.cpp +++ b/unittest/broadphase.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2022 INRIA // +#define BOOST_TEST_MODULE broadphase + #include #include "pinocchio/algorithm/geometry.hpp" @@ -16,12 +18,11 @@ #include #include + #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_broadphase_with_empty_models) { Model model; @@ -170,5 +171,3 @@ BOOST_AUTO_TEST_CASE(test_collisions) == computeCollisions(model, data, geom_model, geom_data, q_rand)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cartesian-product-liegroups.cpp b/unittest/cartesian-product-liegroups.cpp index 14f65b0471..d3193da6ca 100644 --- a/unittest/cartesian-product-liegroups.cpp +++ b/unittest/cartesian-product-liegroups.cpp @@ -2,13 +2,16 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE cartesian_product_liegroups + #include "pinocchio/multibody/liegroup.hpp" #include -#include #include #include +#include + using namespace pinocchio; namespace pinocchio @@ -129,8 +132,6 @@ struct TestCartesianProduct } }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_cartesian_product_with_liegroup_variant) { boost::mpl::for_each( @@ -162,5 +163,3 @@ BOOST_AUTO_TEST_CASE(test_cartesian_product_vs_cartesian_product_variant) TestCartesianProduct::test( cartesian_product_ref, cartesian_product); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/aba-derivatives.cpp b/unittest/casadi/aba-derivatives.cpp index 8875e42770..4b6d0a43c1 100644 --- a/unittest/casadi/aba-derivatives.cpp +++ b/unittest/casadi/aba-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE aba_derivatives + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/autodiff/casadi-algo.hpp" @@ -13,10 +15,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_aba_derivatives_casadi_algo) { @@ -52,5 +53,3 @@ BOOST_AUTO_TEST_CASE(test_aba_derivatives_casadi_algo) BOOST_CHECK(ad_casadi.ddq_dv.isApprox(data.ddq_dv)); BOOST_CHECK(ad_casadi.ddq_dtau.isApprox(data.Minv)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/aba.cpp b/unittest/casadi/aba.cpp index d852348f69..f33ef6dccb 100644 --- a/unittest/casadi/aba.cpp +++ b/unittest/casadi/aba.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE aba + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/autodiff/casadi-algo.hpp" @@ -14,10 +16,9 @@ #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_aba) { @@ -217,5 +218,3 @@ BOOST_AUTO_TEST_CASE(test_aba_casadi_algo) BOOST_CHECK(ad_casadi.ddq_dv.isApprox(data.ddq_dv)); BOOST_CHECK(ad_casadi.ddq_dtau.isApprox(data.Minv)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/algorithms.cpp b/unittest/casadi/algorithms.cpp index a2fc1b965c..5a191f62f5 100644 --- a/unittest/casadi/algorithms.cpp +++ b/unittest/casadi/algorithms.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2021 INRIA // +#define BOOST_TEST_MODULE algorithms + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/multibody.hpp" @@ -17,12 +19,11 @@ #include "pinocchio/multibody/sample-models.hpp" -#include #include #include "casadi-utils.hpp" -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_jacobian) { @@ -683,5 +684,3 @@ BOOST_AUTO_TEST_CASE(test_kinetic_energy) jac_fd = fd_hess_ambda(q2, q2); std::cout << jac_fd << '\n'; } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/basic.cpp b/unittest/casadi/basic.cpp index 9be872c2e3..068fc57c49 100644 --- a/unittest/casadi/basic.cpp +++ b/unittest/casadi/basic.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE basic + #include #include @@ -9,13 +11,11 @@ #include -#include - #include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_basic) { @@ -158,5 +158,3 @@ BOOST_AUTO_TEST_CASE(test_max) casadi::SX max_x_0 = pinocchio::math::max(x, 0.); casadi::SX max_0_y = pinocchio::math::max(0., y); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/constraint-dynamics-derivatives.cpp b/unittest/casadi/constraint-dynamics-derivatives.cpp index 8c1ae63d1f..7c10ae712e 100644 --- a/unittest/casadi/constraint-dynamics-derivatives.cpp +++ b/unittest/casadi/constraint-dynamics-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE constraint_dynamics_derivatives + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/autodiff/casadi-algo.hpp" @@ -11,10 +13,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_constraintDynamicsDerivatives_casadi_algo) { @@ -74,5 +75,3 @@ BOOST_AUTO_TEST_CASE(test_constraintDynamicsDerivatives_casadi_algo) BOOST_CHECK(ad_casadi.dlambda_dv.isApprox(data.dlambda_dv, 1e1 * prec)); BOOST_CHECK(ad_casadi.dlambda_dtau.isApprox(data.dlambda_dtau, 1e1 * prec)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/constraint-dynamics.cpp b/unittest/casadi/constraint-dynamics.cpp index 974541a892..250fac9702 100644 --- a/unittest/casadi/constraint-dynamics.cpp +++ b/unittest/casadi/constraint-dynamics.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE constraint_dynamics + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/autodiff/casadi-algo.hpp" @@ -11,10 +13,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_constraintDynamics_casadi_algo) { @@ -76,5 +77,3 @@ BOOST_AUTO_TEST_CASE(test_constraintDynamics_casadi_algo) BOOST_CHECK(ad_casadi.dlambda_dv.isApprox(data.dlambda_dv, 1e2 * prec)); BOOST_CHECK(ad_casadi.dlambda_dtau.isApprox(data.dlambda_dtau, 1e2 * prec)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/explog.cpp b/unittest/casadi/explog.cpp index 11681e2b2e..796dd9ffaa 100644 --- a/unittest/casadi/explog.cpp +++ b/unittest/casadi/explog.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2021 INRIA // +#define BOOST_TEST_MODULE explog + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" @@ -11,10 +13,9 @@ #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_squaredDistance) { @@ -182,5 +183,3 @@ BOOST_AUTO_TEST_CASE(test_Jlog6) std::cout << hess_cdM_eval(DMVector{M0_dm, M1_dm})[0]; std::cout << hess_cdM_eval(DMVector{M2_dm, M2_dm})[0]; } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/integrate-derivatives.cpp b/unittest/casadi/integrate-derivatives.cpp index 8172423a7d..29710b67a4 100644 --- a/unittest/casadi/integrate-derivatives.cpp +++ b/unittest/casadi/integrate-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE integrate_derivatives + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -11,10 +13,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_integrate) { @@ -75,5 +76,3 @@ BOOST_AUTO_TEST_CASE(test_integrate) BOOST_CHECK(q_plus.isApprox(q_int_vec)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/joints.cpp b/unittest/casadi/joints.cpp index 515d55f2e8..4d90d19715 100644 --- a/unittest/casadi/joints.cpp +++ b/unittest/casadi/joints.cpp @@ -2,16 +2,17 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE joints + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/liegroup.hpp" #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_jointRX_motion_space) { @@ -535,5 +536,3 @@ BOOST_AUTO_TEST_CASE(test_all_joints) TestADOnJoints()(pinocchio::JointModel()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/rnea-derivatives.cpp b/unittest/casadi/rnea-derivatives.cpp index 042bc30c31..9dd53eedcb 100644 --- a/unittest/casadi/rnea-derivatives.cpp +++ b/unittest/casadi/rnea-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE rnea_derivatives + #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -12,10 +14,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_rnea_derivatives) { @@ -176,5 +177,3 @@ BOOST_AUTO_TEST_CASE(test_rnea_derivatives) static_cast>(dtau_da_res_direct).data(), model.nv, model.nv); BOOST_CHECK(dtau_da_ref.isApprox(dtau_da_res_direct_map)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/casadi/spatial.cpp b/unittest/casadi/spatial.cpp index 4c78cbbdbb..5dd39f95b3 100644 --- a/unittest/casadi/spatial.cpp +++ b/unittest/casadi/spatial.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019 INRIA // +#define BOOST_TEST_MODULE spatial + #include #include @@ -11,12 +13,10 @@ #include -#include - #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_se3) { @@ -152,5 +152,3 @@ BOOST_AUTO_TEST_CASE(test_log3_firstorder_derivatives) BOOST_CHECK(grad0 == grad0); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/center-of-mass-derivatives.cpp b/unittest/center-of-mass-derivatives.cpp index 3cbbe9b148..7cca014b85 100644 --- a/unittest/center-of-mass-derivatives.cpp +++ b/unittest/center-of-mass-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2021 CNRS INRIA // +#define BOOST_TEST_MODULE center_of_mass_derivatives + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/center-of-mass.hpp" @@ -9,10 +11,9 @@ #include "pinocchio/algorithm/compute-all-terms.hpp" #include "pinocchio/algorithm/center-of-mass-derivatives.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_kinematics_derivatives_vcom) { @@ -67,5 +68,3 @@ BOOST_AUTO_TEST_CASE(test_kinematics_derivatives_vcom) BOOST_CHECK(dvcom_dq.isApprox(dvcom_dqn, sqrt(alpha))); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/centroidal-derivatives.cpp b/unittest/centroidal-derivatives.cpp index b2a88aac5d..5118dd23e6 100644 --- a/unittest/centroidal-derivatives.cpp +++ b/unittest/centroidal-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2021 INRIA // +#define BOOST_TEST_MODULE centroidal_derivatives + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -11,9 +13,10 @@ #include "pinocchio/algorithm/aba-derivatives.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include +#include + template static void addJointAndBody( pinocchio::Model & model, @@ -43,8 +46,6 @@ static void addJointAndBody( model.addBodyFrame(name + "_body", idx); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_centroidal_derivatives) { pinocchio::Model model; @@ -275,5 +276,3 @@ BOOST_AUTO_TEST_CASE(test_retrieve_centroidal_derivatives_fromABA) BOOST_CHECK(dhdot_dv.isApprox(dhdot_dv_ref)); BOOST_CHECK(dhdot_da.isApprox(dhdot_da_ref)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/centroidal.cpp b/unittest/centroidal.cpp index d4f445028c..889e60312e 100644 --- a/unittest/centroidal.cpp +++ b/unittest/centroidal.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2019 CNRS INRIA // +#define BOOST_TEST_MODULE centroidal + #include "pinocchio/algorithm/crba.hpp" #include "pinocchio/algorithm/centroidal.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -11,11 +13,12 @@ #include "pinocchio/multibody/sample-models.hpp" -#include #include #include "utils/model-generator.hpp" +#include + template static void addJointAndBody( pinocchio::Model & model, @@ -45,8 +48,6 @@ static void addJointAndBody( model.addBodyFrame(name + "_body", idx); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_ccrba) { pinocchio::Model model; @@ -436,5 +437,3 @@ BOOST_AUTO_TEST_CASE(test_computeCentroidalMomentum_computeCentroidalMomentumTim BOOST_CHECK(data.dhg.isApprox(dhg_ref, sqrt(eps))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cholesky.cpp b/unittest/cholesky.cpp index 9d640c8549..badc5e5fd1 100644 --- a/unittest/cholesky.cpp +++ b/unittest/cholesky.cpp @@ -9,6 +9,8 @@ * */ +#define BOOST_TEST_MODULE cholesky + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/crba.hpp" @@ -19,10 +21,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_cholesky) { @@ -278,5 +279,3 @@ BOOST_AUTO_TEST_CASE(test_Minv_from_cholesky) cholesky::computeMinv(model, data_bis); BOOST_CHECK(data_bis.Minv.isApprox(Minv_ref)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/classic-acceleration.cpp b/unittest/classic-acceleration.cpp index fb3bb5563d..2841f320a8 100644 --- a/unittest/classic-acceleration.cpp +++ b/unittest/classic-acceleration.cpp @@ -2,16 +2,17 @@ // Copyright(c) 2019 INRIA // +#define BOOST_TEST_MODULE classic_acceleration + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/kinematics.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_classic_acceleration) { @@ -138,5 +139,3 @@ BOOST_AUTO_TEST_CASE(test_classic_acceleration_with_placement) BOOST_CHECK(classic_acc_B_other_signature.isApprox(classic_acc_B)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/closed-loop-dynamics.cpp b/unittest/closed-loop-dynamics.cpp index e0f9f24cbe..037ee0917a 100644 --- a/unittest/closed-loop-dynamics.cpp +++ b/unittest/closed-loop-dynamics.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020-2022 INRIA // +#define BOOST_TEST_MODULE closed_loop_dynamics + #include "pinocchio/spatial.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -11,10 +13,9 @@ #include "pinocchio/algorithm/contact-dynamics.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; using namespace Eigen; @@ -141,5 +142,3 @@ BOOST_AUTO_TEST_CASE(closed_loop_constraint_6D_LOCAL) BOOST_CHECK( constraint_acceleration_error_ref.isApprox(constraint_acceleration_error_fd, math::sqrt(dt))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/com.cpp b/unittest/com.cpp index 27450be783..174eaed54d 100644 --- a/unittest/com.cpp +++ b/unittest/com.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2019 CNRS INRIA // +#define BOOST_TEST_MODULE com + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/jacobian.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" @@ -10,10 +12,9 @@ #include "pinocchio/algorithm/center-of-mass.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_com) { @@ -283,5 +284,3 @@ BOOST_AUTO_TEST_CASE(test_subtree_com_jacobian) BOOST_CHECK(Jcom3.isApprox(Jcom1)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/compute-all-terms.cpp b/unittest/compute-all-terms.cpp index 30472d0bf5..75d6fe044f 100644 --- a/unittest/compute-all-terms.cpp +++ b/unittest/compute-all-terms.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2021 CNRS INRIA // +#define BOOST_TEST_MODULE compute_all_terms + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -16,8 +18,6 @@ using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - void run_test(const Model & model, const Eigen::VectorXd & q, const Eigen::VectorXd & v) { pinocchio::Data data(model); @@ -95,5 +95,3 @@ BOOST_AUTO_TEST_CASE(test_against_algo) run_test(model, q, v); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/constrained-dynamics-derivatives.cpp b/unittest/constrained-dynamics-derivatives.cpp index f222aa920b..fc0c4a744e 100644 --- a/unittest/constrained-dynamics-derivatives.cpp +++ b/unittest/constrained-dynamics-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019 INRIA // +#define BOOST_TEST_MODULE constrained_dynamics_derivatives + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/jacobian.hpp" @@ -11,10 +13,9 @@ #include "pinocchio/algorithm/contact-dynamics.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace Eigen; using namespace pinocchio; @@ -346,5 +347,3 @@ BOOST_AUTO_TEST_CASE(test_FD_with_contact_varying_gamma) BOOST_CHECK(dlambda_dq_anal.isApprox(dlambda_dq, std::sqrt(eps))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/constrained-dynamics.cpp b/unittest/constrained-dynamics.cpp index 477c01bffb..0be8ed1e03 100644 --- a/unittest/constrained-dynamics.cpp +++ b/unittest/constrained-dynamics.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2023 INRIA // +#define BOOST_TEST_MODULE constrained_dynamics + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/constraints.hpp" @@ -20,9 +22,10 @@ #include -#include #include +#include + #define KP 0 #define KD 0 @@ -76,8 +79,6 @@ pinocchio::Motion computeAcceleration( return res; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - // BOOST_AUTO_TEST_CASE(contact_models) // { // using namespace pinocchio; @@ -1849,5 +1850,3 @@ BOOST_AUTO_TEST_CASE(test_contact_ABA_3D) BOOST_CHECK(prox_settings2.iter == 0); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/constraint-cholesky.cpp b/unittest/constraint-cholesky.cpp index a212502ffb..d6bf94a1af 100644 --- a/unittest/constraint-cholesky.cpp +++ b/unittest/constraint-cholesky.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2025 INRIA // +#define BOOST_TEST_MODULE constraint_cholesky + #include "pinocchio/math.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -13,9 +15,10 @@ #include "pinocchio/algorithm/constraint-cholesky.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include +#include + namespace pinocchio { @@ -107,8 +110,6 @@ namespace pinocchio } // namespace cholesky } // namespace pinocchio -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(UDUt_solver) { const Eigen::Index size = 100; @@ -2163,5 +2164,3 @@ BOOST_AUTO_TEST_CASE(constraint_cholesky_check_resize) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/constraint-jacobian.cpp b/unittest/constraint-jacobian.cpp index 7a3e19bce0..bb9e2b216b 100644 --- a/unittest/constraint-jacobian.cpp +++ b/unittest/constraint-jacobian.cpp @@ -2,20 +2,21 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE constraint_jacobian + #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/jacobian.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(constraint_jacobian_operations) { @@ -116,5 +117,3 @@ BOOST_AUTO_TEST_CASE(constraint_jacobian_operations) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/constraint-variants.cpp b/unittest/constraint-variants.cpp index 38314d7280..e3d7dda061 100644 --- a/unittest/constraint-variants.cpp +++ b/unittest/constraint-variants.cpp @@ -2,20 +2,21 @@ // Copyright (c) 2023-2024 INRIA // +#define BOOST_TEST_MODULE constraint_variants + #include "pinocchio/multibody.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "constraints/init_constraints.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(constraint_variants) { Model model; @@ -145,5 +146,3 @@ BOOST_AUTO_TEST_CASE(constraint_visitors) BOOST_CHECK(output_matrix2 == output_matrix_ref); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/contact-dynamics-derivatives.cpp b/unittest/contact-dynamics-derivatives.cpp index 88ef0d944a..a2743634ee 100644 --- a/unittest/contact-dynamics-derivatives.cpp +++ b/unittest/contact-dynamics-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020-2025 INRIA // +#define BOOST_TEST_MODULE contact_dynamics_derivatives + #include "pinocchio/spatial.hpp" #include "pinocchio/algorithm/frames.hpp" @@ -17,7 +19,6 @@ #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include #ifdef PINOCCHIO_WITH_SDFORMAT @@ -26,11 +27,11 @@ #endif // PINOCCHIO_WITH_SDFORMAT +#include + #define KP 10. #define KD 2 * math::sqrt(KP) -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - using namespace Eigen; using namespace pinocchio; @@ -2643,5 +2644,3 @@ BOOST_AUTO_TEST_CASE(test_constraint_dynamics_derivatives_cassie_proximal) } #endif // PINOCCHIO_WITH_SDFORMAT - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/contact-dynamics.cpp b/unittest/contact-dynamics.cpp index 2379fa075c..8d92a672dd 100644 --- a/unittest/contact-dynamics.cpp +++ b/unittest/contact-dynamics.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2020 CNRS INRIA // +#define BOOST_TEST_MODULE contact_dynamics + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/jacobian.hpp" @@ -11,10 +13,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_FD) { @@ -371,5 +372,3 @@ BOOST_AUTO_TEST_CASE(timings_fd_llt) } timer.toc(std::cout, NBT); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/contact-inverse-dynamics.cpp b/unittest/contact-inverse-dynamics.cpp index 481cefb680..b22dcdb690 100644 --- a/unittest/contact-inverse-dynamics.cpp +++ b/unittest/contact-inverse-dynamics.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE contact_inverse_dynamics + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/constraints.hpp" @@ -71,8 +73,6 @@ void makeIsotropic( } } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_contact_inverse_dynamics_3D) { #ifdef NDEBUG @@ -178,5 +178,3 @@ BOOST_AUTO_TEST_CASE(test_contact_inverse_dynamics_3D) BOOST_CHECK(std::abs(constraint_velocity_projected.dot(x_sol)) <= 1e-10); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/contact-models.cpp b/unittest/contact-models.cpp index b220711fa5..41a9f6cf31 100644 --- a/unittest/contact-models.cpp +++ b/unittest/contact-models.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2024 INRIA // +#define BOOST_TEST_MODULE contact_models + #include "pinocchio/spatial.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -10,9 +12,10 @@ #include "pinocchio/algorithm/jacobian.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -41,8 +44,6 @@ bool within(const typename Matrix::Scalar & elt, const Eigen::MatrixBase return false; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(contact_models) { pinocchio::Model model; @@ -500,5 +501,3 @@ BOOST_AUTO_TEST_CASE(contact_models_sparsity_and_jacobians) BOOST_CHECK(J_clm_LWA.isApprox(J_clm_LWA_sparse)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/copy.cpp b/unittest/copy.cpp index 2d91f846dc..3785f890b4 100644 --- a/unittest/copy.cpp +++ b/unittest/copy.cpp @@ -2,16 +2,17 @@ // Copyright(c) 2018-2020 CNRS INRIA // +#define BOOST_TEST_MODULE copy + #include "pinocchio/algorithm/copy.hpp" #include "pinocchio/algorithm/kinematics.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_data_copy) { @@ -59,5 +60,3 @@ BOOST_AUTO_TEST_CASE(test_data_copy) BOOST_CHECK(data.a_gf[i] == data_ref.a_gf[i]); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/coulomb-friction-cone.cpp b/unittest/coulomb-friction-cone.cpp index 23707285a9..de95c81d2b 100644 --- a/unittest/coulomb-friction-cone.cpp +++ b/unittest/coulomb-friction-cone.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2022-2024 INRIA // +#define BOOST_TEST_MODULE coulomb_friction_cone + #include "pinocchio/constraints.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; Eigen::Vector3d positiveRandomScaling() { @@ -122,5 +123,3 @@ BOOST_AUTO_TEST_CASE(test_weighted_projection) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppad/algorithms.cpp b/unittest/cppad/algorithms.cpp index 69703cf0e0..06a904ce41 100644 --- a/unittest/cppad/algorithms.cpp +++ b/unittest/cppad/algorithms.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2022 CNRS INRIA // +#define BOOST_TEST_MODULE algorithms + #include "pinocchio/autodiff/cppad.hpp" #include "pinocchio/multibody.hpp" @@ -16,17 +18,16 @@ #include -#include #include +#include + #ifdef _WIN32 #define DLL_EXT ".dll" #else #define DLL_EXT ".so" #endif -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_mass_matrix) { using CppAD::AD; @@ -409,5 +410,3 @@ BOOST_AUTO_TEST_CASE(test_JSIM_jit) BOOST_CHECK(M.isApprox(data.M)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppad/basic.cpp b/unittest/cppad/basic.cpp index 497d319ead..27a12c1092 100644 --- a/unittest/cppad/basic.cpp +++ b/unittest/cppad/basic.cpp @@ -2,13 +2,14 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE basic + #include "pinocchio/autodiff/cppad.hpp" #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_example1_cppad) { @@ -251,5 +252,3 @@ BOOST_AUTO_TEST_CASE(test_atan2) pinocchio::math::atan2(y, x); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppad/derivatives.cpp b/unittest/cppad/derivatives.cpp index 68c8ab8af6..f3108ae507 100644 --- a/unittest/cppad/derivatives.cpp +++ b/unittest/cppad/derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE derivatives + #include "pinocchio/autodiff/cppad.hpp" #include "pinocchio/multibody.hpp" @@ -14,10 +16,9 @@ #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_rnea_derivatives) { @@ -277,5 +278,3 @@ BOOST_AUTO_TEST_CASE(test_aba_derivatives) BOOST_CHECK(ddq_dtau_mat.isApprox(data.Minv)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppad/joint-configurations.cpp b/unittest/cppad/joint-configurations.cpp index 260d27437d..aa3e4e2726 100644 --- a/unittest/cppad/joint-configurations.cpp +++ b/unittest/cppad/joint-configurations.cpp @@ -2,18 +2,19 @@ // Copyright (c) 2020 CNRS INRIA // +#define BOOST_TEST_MODULE joint_configurations + #include "pinocchio/autodiff/cppad.hpp" #include "pinocchio/multibody.hpp" #include "../utils/model-generator.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_joint_configuration) { @@ -144,5 +145,3 @@ BOOST_AUTO_TEST_CASE(test_joint_configuration) BOOST_CHECK(results_J1[0].isIdentity()); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppad/joints.cpp b/unittest/cppad/joints.cpp index df04a2fe84..a28ecc67bb 100644 --- a/unittest/cppad/joints.cpp +++ b/unittest/cppad/joints.cpp @@ -2,15 +2,16 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE joints + #include "pinocchio/autodiff/cppad.hpp" #include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/liegroup.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_jointRX_motion_space) { @@ -309,5 +310,3 @@ BOOST_AUTO_TEST_CASE(test_all_joints) TestADOnJoints()(pinocchio::JointModel()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppad/spatial.cpp b/unittest/cppad/spatial.cpp index a1ada830c8..a18c9221fd 100644 --- a/unittest/cppad/spatial.cpp +++ b/unittest/cppad/spatial.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE spatial + #include "pinocchio/autodiff/cppad.hpp" #include "pinocchio/spatial.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include template Eigen::Matrix @@ -277,5 +278,3 @@ BOOST_AUTO_TEST_CASE(test_explog) BOOST_CHECK(Jlog6.isApprox(Jlog6_analytic)); BOOST_CHECK(Jlog6_fd.isApprox(Jlog6, pinocchio::math::sqrt(eps))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppadcg/algorithms.cpp b/unittest/cppadcg/algorithms.cpp index a323fbb0e0..f1ae61fcc1 100644 --- a/unittest/cppadcg/algorithms.cpp +++ b/unittest/cppadcg/algorithms.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE algorithms + #include "pinocchio/codegen/cppadcg.hpp" #include "pinocchio/multibody.hpp" @@ -12,10 +14,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_crba_code_generation) { @@ -238,5 +239,3 @@ BOOST_AUTO_TEST_CASE(test_crba_code_generation_pointer) BOOST_CHECK(jac.middleCols(nq + nv, nv).isApprox(data.M)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppadcg/basic.cpp b/unittest/cppadcg/basic.cpp index cde394a510..6be7457c02 100644 --- a/unittest/cppadcg/basic.cpp +++ b/unittest/cppadcg/basic.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE basic + #include "pinocchio/codegen/cppadcg.hpp" #include "pinocchio/multibody.hpp" @@ -9,10 +11,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_simple_cppadcg) { @@ -227,5 +228,3 @@ BOOST_AUTO_TEST_CASE(test_dynamic_link) BOOST_CHECK( Eigen::Map(jac.data()).isApprox(Eigen::Map(jac_ref.data()))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppadcg/contact-dynamics.cpp b/unittest/cppadcg/contact-dynamics.cpp index 59ba96cf9a..848610a765 100644 --- a/unittest/cppadcg/contact-dynamics.cpp +++ b/unittest/cppadcg/contact-dynamics.cpp @@ -2,18 +2,19 @@ // Copyright (c) 2021 INRIA // +#define BOOST_TEST_MODULE contact_dynamics + #include "pinocchio/codegen/cppadcg.hpp" #include "pinocchio/codegen/cppadcg-algo.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_constraint_dynamics_code_generation) { @@ -59,5 +60,3 @@ BOOST_AUTO_TEST_CASE(test_constraint_dynamics_code_generation) BOOST_CHECK(data.ddq.isApprox(cg_constraintDynamics.ddq)); BOOST_CHECK(data.lambda_c.isApprox(cg_constraintDynamics.lambda_c)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/cppadcg/joint-configurations.cpp b/unittest/cppadcg/joint-configurations.cpp index f01693dc84..6e62d1e18c 100644 --- a/unittest/cppadcg/joint-configurations.cpp +++ b/unittest/cppadcg/joint-configurations.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020 CNRS INRIA // +#define BOOST_TEST_MODULE joint_configurations + #include "pinocchio/codegen/cppadcg.hpp" #include "pinocchio/codegen/cppadcg-algo.hpp" @@ -9,15 +11,14 @@ #include "../utils/model-generator.hpp" -#include #include +#include + using namespace pinocchio; bool DELETE_CODEGEN_LIBS_AFTER_TEST = false; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_joint_configuration_code_generation) { typedef double Scalar; @@ -90,5 +91,3 @@ BOOST_AUTO_TEST_CASE(test_joint_configuration_code_generation) std::remove("cg_dDifference_eval_.dylib"); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/crba.cpp b/unittest/crba.cpp index 2865a4935d..50a68a32be 100644 --- a/unittest/crba.cpp +++ b/unittest/crba.cpp @@ -10,6 +10,8 @@ * */ +#define BOOST_TEST_MODULE crba + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/crba.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -21,11 +23,12 @@ #include -#include #include #include "utils/model-generator.hpp" +#include + template static void addJointAndBody( pinocchio::Model & model, @@ -55,8 +58,6 @@ static void addJointAndBody( model.addBodyFrame(name + "_body", idx); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_crba) { pinocchio::Model model; @@ -244,5 +245,3 @@ BOOST_AUTO_TEST_CASE(test_crba_malloc) } #endif - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/csv.cpp b/unittest/csv.cpp index b5a8eddc48..e0faf45a3e 100644 --- a/unittest/csv.cpp +++ b/unittest/csv.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE csv + #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -19,5 +20,3 @@ BOOST_AUTO_TEST_CASE(test_random_matrix) const Eigen::MatrixXd matrix = Eigen::MatrixXd::Random(mat_size, mat_size); toCSVfile(TEST_SERIALIZATION_FOLDER "/test.csv", matrix); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/data.cpp b/unittest/data.cpp index e35899a107..58b0e614db 100644 --- a/unittest/data.cpp +++ b/unittest/data.cpp @@ -2,19 +2,20 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE data + #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/check.hpp" -#include #include #include "utils/model-generator.hpp" -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_empty_model) { @@ -188,5 +189,3 @@ BOOST_AUTO_TEST_CASE(test_mimic_subtree) Data data_man_mimic(man_mimic); BOOST_CHECK(data_man_mimic.mimic_subtree_joint[0] == 0); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/delassus-operations.cpp b/unittest/delassus-operations.cpp index da2be6dd26..f4331911bd 100644 --- a/unittest/delassus-operations.cpp +++ b/unittest/delassus-operations.cpp @@ -2,11 +2,12 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE delassus_operations + #include #include // to avoid C99 warnings -#include #include #include @@ -14,7 +15,7 @@ #include "utils.hpp" -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; using namespace pinocchio::unittest; @@ -833,5 +834,3 @@ BOOST_AUTO_TEST_CASE(delassus_cholesky_expression_unsafe) expected_mat += compliance.asDiagonal(); BOOST_CHECK(res.isApprox(expected_mat * rhs, 1e-6)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/delassus-operator-dense.cpp b/unittest/delassus-operator-dense.cpp index f3b33f9b8a..7751b8191e 100644 --- a/unittest/delassus-operator-dense.cpp +++ b/unittest/delassus-operator-dense.cpp @@ -2,16 +2,17 @@ // Copyright (c) 2024-2026 INRIA // +#define BOOST_TEST_MODULE delassus_operator_dense + #include #include #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -228,5 +229,3 @@ BOOST_AUTO_TEST_CASE(test_copy) delassus.updateCompliance(compliance); BOOST_CHECK(!delassus_assigned.getCompliance().isApprox(compliance)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/delassus-operator-preconditioned.cpp b/unittest/delassus-operator-preconditioned.cpp index a48373d6ba..ee06ad5c54 100644 --- a/unittest/delassus-operator-preconditioned.cpp +++ b/unittest/delassus-operator-preconditioned.cpp @@ -1,10 +1,11 @@ +#define BOOST_TEST_MODULE delassus_operator_preconditioned + #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -86,5 +87,3 @@ BOOST_AUTO_TEST_CASE(delassus_dense_preconditioned) Eigen::VectorXd res_apply2 = damped_preconditioned_compliant_matrix * rhs; BOOST_CHECK(res.isApprox(res_apply2)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/delassus-operator-rigid-body.cpp b/unittest/delassus-operator-rigid-body.cpp index cc5e8e8581..c38f52edb0 100644 --- a/unittest/delassus-operator-rigid-body.cpp +++ b/unittest/delassus-operator-rigid-body.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2026 INRIA // +#define BOOST_TEST_MODULE delassus_operator_rigid_body + #include #include @@ -18,9 +20,10 @@ #include "utils/model-generator.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -40,8 +43,6 @@ const DelassusAccessor & access(const Delassus & delassus) return static_cast &>(delassus); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(default_constructor_shared_ptr) { typedef PointContactConstraintModelTpl ConstraintModel; @@ -1633,5 +1634,3 @@ BOOST_AUTO_TEST_CASE(test_copy) delassus.updateCompliance(compliance_value); BOOST_CHECK(access(delassus_assigned).m_compliance.isConstant(new_compliance_value, 0)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/delassus.cpp b/unittest/delassus.cpp index 67e4cf7bb2..4f7a0da48a 100644 --- a/unittest/delassus.cpp +++ b/unittest/delassus.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2023 KU Leuven // +#define BOOST_TEST_MODULE delassus + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/constraints.hpp" @@ -12,9 +14,10 @@ #include "pinocchio/algorithm/delassus.hpp" #include "pinocchio/algorithm/compute-all-terms.hpp" -#include #include +#include + namespace pinocchio { template @@ -55,7 +58,6 @@ namespace pinocchio using namespace pinocchio; double mu = 1e-4; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) BOOST_AUTO_TEST_CASE(contact_6D) { @@ -870,5 +872,3 @@ BOOST_AUTO_TEST_CASE(contact_3D_6D_ancestor_6D4) -H_inverse.topLeftCorner(constraint_chol.constraintDim(), constraint_chol.constraintDim()), 1e-7)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/double-entry-container.cpp b/unittest/double-entry-container.cpp index d76a5814d5..66bccd51b0 100644 --- a/unittest/double-entry-container.cpp +++ b/unittest/double-entry-container.cpp @@ -2,15 +2,16 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE double_entry_container + #include "pinocchio/container/double-entry-container.hpp" #include "pinocchio/container/matrix-stack.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_all_std_vector) { @@ -147,5 +148,3 @@ BOOST_AUTO_TEST_CASE(test_all_matrix_stack) BOOST_CHECK(container.values()[size_t(id)].isConstant(double(id), double(0))); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/dynamic-allocations.cpp b/unittest/dynamic-allocations.cpp index af274c25b4..1c1b84d3fa 100644 --- a/unittest/dynamic-allocations.cpp +++ b/unittest/dynamic-allocations.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE dynamic_allocations + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/constraints.hpp" @@ -30,16 +32,15 @@ #include "pinocchio/algorithm/impulse-dynamics-derivatives.hpp" #include "pinocchio/algorithm/regressor.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -using namespace pinocchio; #include +using namespace pinocchio; + #if !(defined(__has_feature) && __has_feature(realtime_sanitizer)) #error "rtsan not enabled. Please enable rtsan with -fsanitize=realtime" #endif -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - bool hasMimicJoints(const Model & model) { return !model.mimicked_joints.empty(); @@ -577,5 +578,3 @@ BOOST_AUTO_TEST_CASE(dynamic_allocations_spatial_operations) log6(M); }(); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/eigen-basic-op.cpp b/unittest/eigen-basic-op.cpp index 7818f18d70..13cbae2e32 100644 --- a/unittest/eigen-basic-op.cpp +++ b/unittest/eigen-basic-op.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2019-2025 INRIA // +#define BOOST_TEST_MODULE eigen_basic_op + #include "pinocchio/utils/std-vector.hpp" #include "pinocchio/math.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_matrix_matrix_product) { @@ -85,5 +86,3 @@ BOOST_AUTO_TEST_CASE(test_eigen_helpers_on_std_vector) BOOST_CHECK(val.isIdentity(0)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/eigen-storage.cpp b/unittest/eigen-storage.cpp index f1c677196a..43b14dcca9 100644 --- a/unittest/eigen-storage.cpp +++ b/unittest/eigen-storage.cpp @@ -2,19 +2,20 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE eigen_storage + #include "pinocchio/container/eigen-storage.hpp" -#include #include +#include + using namespace pinocchio; typedef internal::EigenStorageTpl EigenStorageMatrix; typedef internal::EigenStorageTpl EigenStorageRowMatrix; typedef internal::EigenStorageTpl EigenStorageVector; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(eigen_storage_default) { EigenStorageMatrix storage_matrix; @@ -66,7 +67,7 @@ BOOST_AUTO_TEST_CASE(eigen_storage_matrix) BOOST_CHECK(storage.const_map().topLeftCorner(rows, cols).isOnes(0.)); } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(eigen_storage_cast) { const Eigen::Index rows = 10, cols = 20; @@ -154,5 +155,3 @@ BOOST_AUTO_TEST_CASE(eigen_storage_vector) // storage.conservativeResize(1,new_size); // will not pass } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/eigen-tensor.cpp b/unittest/eigen-tensor.cpp index 42eb255c21..032b7d9726 100644 --- a/unittest/eigen-tensor.cpp +++ b/unittest/eigen-tensor.cpp @@ -2,12 +2,13 @@ // Copyright (c) 2019 INRIA // +#define BOOST_TEST_MODULE eigen_tensor + #include "pinocchio/math.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_emulate_tensors) { @@ -53,5 +54,3 @@ BOOST_AUTO_TEST_CASE(test_emulate_tensors) for (std::size_t i = 0; i < rank; ++i) BOOST_CHECK(tensor1.dimension(i) == new_dims[i]); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/eigenvalues.cpp b/unittest/eigenvalues.cpp index 0d8951d19d..fc4f1d6874 100644 --- a/unittest/eigenvalues.cpp +++ b/unittest/eigenvalues.cpp @@ -2,17 +2,18 @@ // Copyright (c) 2022 INRIA // +#define BOOST_TEST_MODULE eigenvalues + #include #include -#include #include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -76,5 +77,3 @@ BOOST_AUTO_TEST_CASE(test_random_matrix) BOOST_CHECK(test_eigen_vec); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/energy.cpp b/unittest/energy.cpp index 6af6554df4..08da109353 100644 --- a/unittest/energy.cpp +++ b/unittest/energy.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2020 CNRS INRIA // +#define BOOST_TEST_MODULE energy + #include "pinocchio/algorithm/energy.hpp" #include "pinocchio/algorithm/crba.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -11,11 +13,10 @@ #include "pinocchio/multibody/sample-models.hpp" #include -#include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_kinetic_energy) { @@ -189,5 +190,3 @@ BOOST_AUTO_TEST_CASE(test_against_rnea) BOOST_CHECK(tau_fd.isApprox(tau_ref, sqrt(eps))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/explog.cpp b/unittest/explog.cpp index e12c08cfe1..ab9b0f6468 100644 --- a/unittest/explog.cpp +++ b/unittest/explog.cpp @@ -3,15 +3,15 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE explog + #include "pinocchio/spatial.hpp" #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - -BOOST_AUTO_TEST_CASE(exp) +BOOST_AUTO_TEST_CASE(explog_exp) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -86,7 +86,7 @@ BOOST_AUTO_TEST_CASE(renorm_rotation) } } -BOOST_AUTO_TEST_CASE(log) +BOOST_AUTO_TEST_CASE(explog_log) { SE3 M(SE3::Identity()); Motion v(Motion::Random()); @@ -634,5 +634,3 @@ BOOST_AUTO_TEST_CASE(test_Jlog6_robustness) BOOST_CHECK(res.isIdentity()); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/finite-differences.cpp b/unittest/finite-differences.cpp index 9e0770e2cf..3c9841dc0d 100644 --- a/unittest/finite-differences.cpp +++ b/unittest/finite-differences.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2019 CNRS INRIA // +#define BOOST_TEST_MODULE finite_differences + #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -9,9 +11,10 @@ #include "pinocchio/algorithm/jacobian.hpp" #include -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -279,8 +282,6 @@ struct FiniteDiffJoint } }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_S_finit_diff) { boost::mpl::for_each(FiniteDiffJoint()); @@ -309,5 +310,3 @@ BOOST_AUTO_TEST_CASE(test_jacobian_vs_finit_diff) Jrh_finite_diff = finiteDiffJacobian(model, data, q, idx); BOOST_CHECK(Jrh_finite_diff.isApprox(Jrh, sqrt(1e-8))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/frame-anchor-constraint.cpp b/unittest/frame-anchor-constraint.cpp index fb1b24462f..550f555a9c 100644 --- a/unittest/frame-anchor-constraint.cpp +++ b/unittest/frame-anchor-constraint.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE frame_anchor_constraint + #include "pinocchio/spatial.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -18,9 +20,10 @@ #include -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -49,8 +52,6 @@ bool within(const typename Matrix::Scalar & elt, const Eigen::MatrixBase return false; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(basic_constructor) { Model model; @@ -546,7 +547,7 @@ BOOST_AUTO_TEST_CASE(contact_models_sparsity_and_jacobians) } } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(frame_anchor_constraint_cast) { pinocchio::Model model; pinocchio::buildModels::humanoidRandom(model, true); @@ -789,5 +790,3 @@ BOOST_AUTO_TEST_CASE(compliance) BOOST_CHECK(compliance == compliance_ref); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/frames-derivatives.cpp b/unittest/frames-derivatives.cpp index e3056a548e..4f4551d7a6 100644 --- a/unittest/frames-derivatives.cpp +++ b/unittest/frames-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE frames_derivatives + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/jacobian.hpp" @@ -11,10 +13,9 @@ #include "pinocchio/algorithm/frames.hpp" #include "pinocchio/algorithm/frames-derivatives.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_frames_derivatives_velocity) { @@ -466,5 +467,3 @@ BOOST_AUTO_TEST_CASE(test_kinematics_derivatives_acceleration) BOOST_CHECK(a_partial_dv_local_other.isApprox(a_partial_dv_local)); BOOST_CHECK(a_partial_da_local_other.isApprox(a_partial_da_local)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/frames.cpp b/unittest/frames.cpp index 265805e2db..97b8c7c8ee 100644 --- a/unittest/frames.cpp +++ b/unittest/frames.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2024 CNRS INRIA // +#define BOOST_TEST_MODULE frames + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -14,19 +16,18 @@ #include -#include #include #include "utils/model-generator.hpp" +#include + template inline bool isFinite(const Eigen::MatrixBase & x) { return ((x - x).array() == (x - x).array()).all(); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(frame_basic) { using namespace pinocchio; @@ -52,7 +53,7 @@ BOOST_AUTO_TEST_CASE(frame_basic) BOOST_CHECK(frame1 == frame2); } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(frames_cast) { using namespace pinocchio; Frame frame("toto", 0, 0, SE3::Random(), OP_FRAME); @@ -718,4 +719,3 @@ BOOST_AUTO_TEST_CASE(test_supported_inertia_and_force) Force force_free(data_free.f[joint_id]); BOOST_CHECK(force_fix.isApprox(force_free)); } -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/full-space-cone.cpp b/unittest/full-space-cone.cpp index 46dccbecf1..0daff340a8 100644 --- a/unittest/full-space-cone.cpp +++ b/unittest/full-space-cone.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE full_space_cone + #include "pinocchio/constraints.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_proj) { @@ -37,5 +38,3 @@ BOOST_AUTO_TEST_CASE(test_proj) BOOST_CHECK(fabs((x - proj_x).dot(proj_x)) <= 1e-12); // orthogonal projection } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/fusion.cpp b/unittest/fusion.cpp index ab35c2f054..8358a5c01e 100644 --- a/unittest/fusion.cpp +++ b/unittest/fusion.cpp @@ -7,11 +7,12 @@ // #include "pinocchio/multibody/joint.hpp" // #include "pinocchio/multibody/model.hpp" +#define BOOST_TEST_MODULE fusion + #include #include "pinocchio/tools/timer.hpp" -#include #include struct TestObj @@ -137,6 +138,8 @@ typedef boost::variant CRTPVariant; #include #include +#include + namespace bf = boost::fusion; struct Launcher : public boost::static_visitor @@ -208,8 +211,6 @@ namespace boost } // namespace fusion } // namespace boost -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_fusion) { CRTPDerived d; @@ -235,5 +236,3 @@ BOOST_AUTO_TEST_CASE(test_fusion) bf::vector arg2 = bf::append2(boost::ref(i), boost::ref(k), arg); // bf::push_front(bf::push_front(arg1,boost::ref(k)),boost::ref(j)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/geometry-algorithms.cpp b/unittest/geometry-algorithms.cpp index 3edb10989e..d65220e503 100644 --- a/unittest/geometry-algorithms.cpp +++ b/unittest/geometry-algorithms.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2022 CNRS INRIA // +#define BOOST_TEST_MODULE geometry_algorithms + #include #include "pinocchio/multibody.hpp" @@ -15,6 +17,7 @@ #include #include + #include using namespace pinocchio; @@ -30,8 +33,6 @@ GeometryPositionsMap_t fillPinocchioGeometryPositions( std::vector getBodiesList(); -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_simple_boxes) { using namespace pinocchio; @@ -346,5 +347,3 @@ BOOST_AUTO_TEST_CASE(test_compute_body_radius) BOOST_CHECK(radius >= 0.); } #endif // if defined(PINOCCHIO_WITH_URDFDOM) - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/geometry-model.cpp b/unittest/geometry-model.cpp index 5d65d731cb..828c0aaa8f 100644 --- a/unittest/geometry-model.cpp +++ b/unittest/geometry-model.cpp @@ -2,18 +2,19 @@ // Copyright (c) 2015-2022 CNRS INRIA // +#define BOOST_TEST_MODULE geometry_model + #include "pinocchio/multibody.hpp" #include "pinocchio/geometry.hpp" #include "pinocchio/parsers/urdf.hpp" #include #include + #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(manage_collision_pairs) { std::string filename = @@ -212,5 +213,3 @@ BOOST_AUTO_TEST_CASE(test_clone) BOOST_CHECK(geom_model_clone != geom_model); BOOST_CHECK(geom_model_copy == geom_model); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/geometry-object.cpp b/unittest/geometry-object.cpp index a7168f8a85..2360e19f9d 100644 --- a/unittest/geometry-object.cpp +++ b/unittest/geometry-object.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2022 INRIA // +#define BOOST_TEST_MODULE geometry_object + #include "pinocchio/geometry.hpp" #include @@ -10,8 +12,6 @@ using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_clone) { coal::Sphere * sphere_ptr = new coal::Sphere(0.5); @@ -24,5 +24,3 @@ BOOST_AUTO_TEST_CASE(test_clone) sphere_ptr->radius = 1.; BOOST_CHECK(geom_obj_clone != geom_obj); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/gram-schmidt-orthonormalisation.cpp b/unittest/gram-schmidt-orthonormalisation.cpp index f5a4b7c87c..965b607138 100644 --- a/unittest/gram-schmidt-orthonormalisation.cpp +++ b/unittest/gram-schmidt-orthonormalisation.cpp @@ -2,16 +2,17 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE gram_schmidt_orthonormalisation + #include #include #include // to avoid C99 warnings -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -54,5 +55,3 @@ BOOST_AUTO_TEST_CASE(test_orthonormalization) BOOST_CHECK(isOrthonormal(mat, prec)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/impulse-dynamics-derivatives.cpp b/unittest/impulse-dynamics-derivatives.cpp index ea8e7e6932..3ee2fca865 100644 --- a/unittest/impulse-dynamics-derivatives.cpp +++ b/unittest/impulse-dynamics-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020-2021 CNRS INRIA // +#define BOOST_TEST_MODULE impulse_dynamics_derivatives + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/constraints.hpp" @@ -10,10 +12,9 @@ #include "pinocchio/algorithm/impulse-dynamics-derivatives.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace Eigen; using namespace pinocchio; @@ -351,5 +352,3 @@ BOOST_AUTO_TEST_CASE(test_impulse_dynamics_derivatives_LOCAL_WORLD_ALIGNED_fd) Eigen::MatrixXd::Identity(model.nv, model.nv) + data.ddq_dv, sqrt(alpha))); BOOST_CHECK(impulse_partial_dv_fd.isApprox(data.dlambda_dv, sqrt(alpha))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/impulse-dynamics.cpp b/unittest/impulse-dynamics.cpp index fe1bd44ee2..6209b8a932 100644 --- a/unittest/impulse-dynamics.cpp +++ b/unittest/impulse-dynamics.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020 CNRS INRIA // +#define BOOST_TEST_MODULE impulse_dynamics + #include "pinocchio/constraints.hpp" #include "pinocchio/algorithm/frames.hpp" #include "pinocchio/algorithm/jacobian.hpp" @@ -12,10 +14,9 @@ #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_sparse_impulse_dynamics_empty) { @@ -456,5 +457,3 @@ BOOST_AUTO_TEST_CASE(test_sparse_impulse_dynamics_in_contact_6D_3D) constraint_id += cmodel.residualSize(); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-composite.cpp b/unittest/joint-composite.cpp index d58d39d15e..44910f3ca3 100644 --- a/unittest/joint-composite.cpp +++ b/unittest/joint-composite.cpp @@ -2,13 +2,16 @@ // Copyright (c) 2016 CNRS // +#define BOOST_TEST_MODULE joint_composite + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/kinematics.hpp" #include -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -206,8 +209,6 @@ struct TestJointComposite } }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_basic) { typedef boost::variant< @@ -354,5 +355,3 @@ BOOST_AUTO_TEST_CASE(checkJointNames) BOOST_CHECK(jmodel_composite.getJointId("penultinum_joint") == 1); BOOST_CHECK_THROW(jmodel_composite.getJointId("wrong_name"), std::invalid_argument); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-configurations.cpp b/unittest/joint-configurations.cpp index da16172b40..f349150077 100644 --- a/unittest/joint-configurations.cpp +++ b/unittest/joint-configurations.cpp @@ -2,17 +2,18 @@ // Copyright (c) 2016-2020 CNRS INRIA // +#define BOOST_TEST_MODULE joint_configurations + #include "utils/model-generator.hpp" #include "pinocchio/math.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(integration_test) { @@ -549,5 +550,3 @@ BOOST_AUTO_TEST_CASE(integrateCoeffWiseJacobian_test) } BOOST_CHECK(jac.isApprox(jac_fd, sqrt(eps))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-ellipsoid.cpp b/unittest/joint-ellipsoid.cpp index 5336e3628a..579832e018 100644 --- a/unittest/joint-ellipsoid.cpp +++ b/unittest/joint-ellipsoid.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE joint_ellipsoid + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/joint.hpp" @@ -222,8 +224,6 @@ SE3::Vector3 computeTranslationAccelerations( return a; } -BOOST_AUTO_TEST_SUITE(JointEllipsoid) - /// @brief Test the rotationnal equivalence between JointModelEllipsoid and JointModelSphericalZYX BOOST_AUTO_TEST_CASE(vsSphericalZYX) { @@ -555,5 +555,3 @@ BOOST_AUTO_TEST_CASE(testBiaisVsSdotTimesVelocity) BOOST_CHECK(jdata.c.toVector().isApprox(Sdot * v, 1e-12)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-free-flyer.cpp b/unittest/joint-free-flyer.cpp index c35f0cd702..54e7ae2ea8 100644 --- a/unittest/joint-free-flyer.cpp +++ b/unittest/joint-free-flyer.cpp @@ -3,15 +3,15 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE joint_free_flyer + #include "pinocchio/multibody/joint.hpp" #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(JointFreeFlyer) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(joint_free_flyer_spatial) { Motion v(Motion::Random()); @@ -20,5 +20,3 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(Sv == v); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-friction-constraint.cpp b/unittest/joint-friction-constraint.cpp index 0b9b21c2d8..609d885895 100644 --- a/unittest/joint-friction-constraint.cpp +++ b/unittest/joint-friction-constraint.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE joint_friction_constraint + #include "pinocchio/constraints.hpp" #include "pinocchio/algorithm/jacobian.hpp" @@ -11,15 +13,14 @@ // Helpers #include "constraints/jacobians-checker.hpp" -#include #include +#include + using namespace pinocchio; typedef JointFrictionConstraintModel::EigenIndexVector EigenIndexVector; typedef JointFrictionConstraintModel::BooleanVector BooleanVector; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(constraint_empty_constructor) { pinocchio::Model model; @@ -90,7 +91,7 @@ BOOST_AUTO_TEST_CASE(constraint_constructor) } } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(joint_friction_constraint_cast) { pinocchio::Model model; pinocchio::buildModels::humanoidRandom(model, true); @@ -318,5 +319,3 @@ BOOST_AUTO_TEST_CASE(compliance) BOOST_CHECK(compliance == compliance_ref); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-generic.cpp b/unittest/joint-generic.cpp index 1c8a751bcc..3060f3b519 100644 --- a/unittest/joint-generic.cpp +++ b/unittest/joint-generic.cpp @@ -2,14 +2,17 @@ // Copyright (c) 2016-2019 CNRS INRIA // +#define BOOST_TEST_MODULE joint_generic + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/liegroup.hpp" #include "pinocchio/multibody.hpp" #include -#include #include +#include + using namespace pinocchio; template @@ -385,8 +388,6 @@ namespace pinocchio } // namespace pinocchio -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_joint_from_joint_composite) { typedef JointCollectionDefault JointCollection; @@ -428,7 +429,7 @@ BOOST_AUTO_TEST_CASE(test_empty_model) BOOST_CHECK(jmodel.idx_v() == -1); } -BOOST_AUTO_TEST_CASE(isEqual) +BOOST_AUTO_TEST_CASE(joint_generic_isEqual) { JointModelRX joint_revolutex; JointModelRY joint_revolutey; @@ -448,7 +449,7 @@ BOOST_AUTO_TEST_CASE(isEqual) BOOST_CHECK(jmodely != jmodelx); } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(joint_generic_cast) { JointModelRX joint_revolutex; @@ -508,5 +509,3 @@ BOOST_AUTO_TEST_CASE(test_operator_equal) { boost::mpl::for_each(TestJointOperatorEqual()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-helical.cpp b/unittest/joint-helical.cpp index 4990488b6e..0ab2d619fc 100644 --- a/unittest/joint-helical.cpp +++ b/unittest/joint-helical.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2022 CNRS INRIA // +#define BOOST_TEST_MODULE joint_helical + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/aba.hpp" diff --git a/unittest/joint-jacobian.cpp b/unittest/joint-jacobian.cpp index fbdc992137..dde018764f 100644 --- a/unittest/joint-jacobian.cpp +++ b/unittest/joint-jacobian.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2020 CNRS INRIA // +#define BOOST_TEST_MODULE joint_jacobian + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -13,10 +15,11 @@ #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include #include "utils/model-generator.hpp" +#include + template inline bool isFinite(const Eigen::MatrixBase & x) { @@ -72,8 +75,6 @@ void test_jacobian_impl(const pinocchio::Model & model, pinocchio::JointIndex jo BOOST_CHECK(data_fk.J.isApprox(data.J)); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_jacobian) { pinocchio::Model model; @@ -345,5 +346,3 @@ BOOST_AUTO_TEST_CASE(test_timings) timer.toc(std::cout, NBT); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-limit-constraint.cpp b/unittest/joint-limit-constraint.cpp index 90625dbc2a..9aece05d87 100644 --- a/unittest/joint-limit-constraint.cpp +++ b/unittest/joint-limit-constraint.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE joint_limit_constraint + #include "pinocchio/constraints.hpp" #include "pinocchio/algorithm/jacobian.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" @@ -13,16 +15,15 @@ #include -#include #include +#include + // TODO: refacto using namespace pinocchio; typedef JointLimitConstraintModel::EigenIndexVector EigenIndexVector; typedef JointLimitConstraintModel::BooleanVector BooleanVector; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(constraint_empty_constructor) { Model model; @@ -146,7 +147,7 @@ BOOST_AUTO_TEST_CASE(constraint_constructor) } } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(joint_limit_constraint_cast) { Model model; buildModelWithAllJoints(model); @@ -653,5 +654,3 @@ BOOST_AUTO_TEST_CASE(compliance) BOOST_CHECK(compliance.size() < compliance_full_ref.size()); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-mimic.cpp b/unittest/joint-mimic.cpp index bd488ed9e5..8d5f17ad20 100644 --- a/unittest/joint-mimic.cpp +++ b/unittest/joint-mimic.cpp @@ -2,15 +2,16 @@ // Copyright (c) 2019 INRIA // +#define BOOST_TEST_MODULE joint_mimic + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/multibody/liegroup.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; typedef Eigen::Matrix Matrix6x; @@ -279,4 +280,3 @@ BOOST_AUTO_TEST_CASE(test_joint_generic_cast) BOOST_CHECK(jmodel_generic.id() == jmodel.id()); } -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-motion-subspace.cpp b/unittest/joint-motion-subspace.cpp index 5316418ee6..4bc2525c66 100644 --- a/unittest/joint-motion-subspace.cpp +++ b/unittest/joint-motion-subspace.cpp @@ -2,15 +2,16 @@ // Copyright (c) 2015-2019 CNRS INRIA // +#define BOOST_TEST_MODULE joint_motion_subspace + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_ForceSet) { @@ -427,5 +428,3 @@ BOOST_AUTO_TEST_CASE(test_joint_constraint_operations) typedef JointCollectionDefault::JointModelVariant Variant; boost::mpl::for_each(TestJointConstraint()); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-planar.cpp b/unittest/joint-planar.cpp index 86a555958a..2299de0673 100644 --- a/unittest/joint-planar.cpp +++ b/unittest/joint-planar.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE joint_planar + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/aba.hpp" @@ -29,9 +31,7 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointPlanar) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(joint_planar_spatial) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -139,5 +139,3 @@ BOOST_AUTO_TEST_CASE(vsFreeFlyer) BOOST_CHECK(jacobian_planar.isApprox(jacobian_expected)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-prismatic.cpp b/unittest/joint-prismatic.cpp index 88e678d398..fcd7fa0a59 100644 --- a/unittest/joint-prismatic.cpp +++ b/unittest/joint-prismatic.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE joint_prismatic + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/aba.hpp" diff --git a/unittest/joint-revolute.cpp b/unittest/joint-revolute.cpp index 0caea809ff..2e8c490de3 100644 --- a/unittest/joint-revolute.cpp +++ b/unittest/joint-revolute.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE joint_revolute + #include "pinocchio/math.hpp" #include "pinocchio/multibody/joint.hpp" diff --git a/unittest/joint-spherical.cpp b/unittest/joint-spherical.cpp index 0e38391180..d10065365e 100644 --- a/unittest/joint-spherical.cpp +++ b/unittest/joint-spherical.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE joint_spherical + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/aba.hpp" diff --git a/unittest/joint-translation.cpp b/unittest/joint-translation.cpp index cf50ace84f..a71fa3932b 100644 --- a/unittest/joint-translation.cpp +++ b/unittest/joint-translation.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. // +#define BOOST_TEST_MODULE joint_translation + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -30,9 +32,7 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointTranslation) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(joint_translation_spatial) { typedef TransformTranslationTpl TransformTranslation; typedef SE3::Vector3 Vector3; @@ -148,5 +148,3 @@ BOOST_AUTO_TEST_CASE(vsFreeFlyer) jacobian_expected << jacobian_ff.col(0), jacobian_ff.col(1), jacobian_ff.col(2); BOOST_CHECK(jacobian_translation.isApprox(jacobian_expected)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-universal.cpp b/unittest/joint-universal.cpp index 2c903a6d0a..c7b7da4360 100644 --- a/unittest/joint-universal.cpp +++ b/unittest/joint-universal.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2023 INRIA // +#define BOOST_TEST_MODULE joint_universal + #include "pinocchio/multibody/joint.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/aba.hpp" @@ -29,8 +31,6 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointUniversal) - BOOST_AUTO_TEST_CASE(vsRXRY) { typedef SE3::Vector3 Vector3; @@ -207,5 +207,3 @@ BOOST_AUTO_TEST_CASE(vsRandomAxis) BOOST_CHECK(jacobianUniversal.isApprox(jacobianRandomAxis)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-visitors.cpp b/unittest/joint-visitors.cpp index ff6d30d2d2..8a8823a4fa 100644 --- a/unittest/joint-visitors.cpp +++ b/unittest/joint-visitors.cpp @@ -1,13 +1,15 @@ // // Copyright (c) 2024-2025 INRIA // + +#define BOOST_TEST_MODULE joint_visitors + #include "pinocchio/multibody/joint.hpp" -#include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_check_joint_type) { @@ -21,5 +23,3 @@ BOOST_AUTO_TEST_CASE(test_check_joint_type) BOOST_CHECK(check_joint_type_within_sequence(jmodel_rx) == true); BOOST_CHECK(check_joint_type_within_sequence(jmodel_px) == false); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/kinematics-derivatives.cpp b/unittest/kinematics-derivatives.cpp index 815a1d97d5..9dd9599c91 100644 --- a/unittest/kinematics-derivatives.cpp +++ b/unittest/kinematics-derivatives.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2018-2026 INRIA // +#define BOOST_TEST_MODULE kinematics_derivatives + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/jacobian.hpp" #include "pinocchio/algorithm/frames.hpp" @@ -10,9 +12,10 @@ #include "pinocchio/algorithm/kinematics-derivatives.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include +#include + template bool isZero( const Eigen::Tensor & tensor3, @@ -32,8 +35,6 @@ bool isZero( return is_zero; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_kinematics_derivatives_all) { using namespace Eigen; @@ -1231,5 +1232,3 @@ BOOST_AUTO_TEST_CASE(test_kinematics_hessians_joint_0) getJointKinematicHessian(model, data, joint_id, LOCAL_WORLD_ALIGNED); isZero(kinematic_hessian_lwa, 0.); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/kinematics.cpp b/unittest/kinematics.cpp index bc66680e11..3abe3c6067 100644 --- a/unittest/kinematics.cpp +++ b/unittest/kinematics.cpp @@ -2,17 +2,18 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE kinematics + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/kinematics.hpp" #include "pinocchio/algorithm/crba.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include #include "utils/model-generator.hpp" -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_kinematics_constant_vector_input) { @@ -365,5 +366,3 @@ BOOST_AUTO_TEST_CASE(test_kinematics_mimic) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/lanczos-decomposition.cpp b/unittest/lanczos-decomposition.cpp index 84db5045f6..a42146b7b9 100644 --- a/unittest/lanczos-decomposition.cpp +++ b/unittest/lanczos-decomposition.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE lanczos_decomposition + #include "pinocchio/math.hpp" #include "pinocchio/constraints.hpp" @@ -10,10 +12,9 @@ #include "pinocchio/algorithm/crba.hpp" #include "pinocchio/algorithm/diagonal-preconditioner.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -318,5 +319,3 @@ BOOST_AUTO_TEST_CASE(test_delassus_preconditioned) checkDecomposition(lanczos_decomposition, matrix_preconditioned); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/liegroups.cpp b/unittest/liegroups.cpp index aca9b531d1..35baa5582b 100644 --- a/unittest/liegroups.cpp +++ b/unittest/liegroups.cpp @@ -2,17 +2,20 @@ // Authors: Joseph Mirabel (joseph.mirabel@laas.fr) // +#define BOOST_TEST_MODULE liegroups + #include #include "pinocchio/multibody/liegroup.hpp" #include "pinocchio/multibody/joint.hpp" -#include #include #include #include +#include + #define EIGEN_VECTOR_IS_APPROX(Va, Vb, precision) \ BOOST_CHECK_MESSAGE( \ (Va).isApprox(Vb, precision), "check " #Va ".isApprox(" #Vb ") failed " \ @@ -658,8 +661,6 @@ struct LieGroup_TangentMap } }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_all) { typedef boost::variant< @@ -697,7 +698,7 @@ BOOST_AUTO_TEST_CASE(Jdifference) boost::mpl::for_each(LieGroup_Jdifference()); } -BOOST_AUTO_TEST_CASE(dIntegrateTransport) +BOOST_AUTO_TEST_CASE(liegroups_dIntegrateTransport) { typedef double Scalar; static constexpr int Options = 0; @@ -801,7 +802,7 @@ BOOST_AUTO_TEST_CASE(JintegrateCoeffWise) } } -BOOST_AUTO_TEST_CASE(tangentMap) +BOOST_AUTO_TEST_CASE(liegroups_tangentMap) { typedef double Scalar; static constexpr int Options = 0; @@ -1033,5 +1034,3 @@ BOOST_AUTO_TEST_CASE(test_liegroup_variant_comparison) test_liegroup_variant_not_equal( VectorSpaceOperationTpl<1, double>(), VectorSpaceOperationTpl(2)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/loop-constrained-aba.cpp b/unittest/loop-constrained-aba.cpp index 6c3b57defd..2331ead024 100644 --- a/unittest/loop-constrained-aba.cpp +++ b/unittest/loop-constrained-aba.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE loop_constrained_aba + #include #include "pinocchio/spatial.hpp" @@ -11,10 +13,9 @@ #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/algorithm/loop-constrained-aba.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; using namespace Eigen; @@ -892,5 +893,3 @@ BOOST_AUTO_TEST_CASE(test_coupled_3D_6D_loops) BOOST_CHECK(data_ref.ddq.isApprox(data.ddq, 1e-10)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/macros.cpp b/unittest/macros.cpp index f2e654d570..2f5edc1736 100644 --- a/unittest/macros.cpp +++ b/unittest/macros.cpp @@ -2,11 +2,14 @@ // Copyright (c) 2021-2024 CNRS INRIA // +#define BOOST_TEST_MODULE macros + #include "pinocchio/macros.hpp" -#include #include +#include + std::string expected_msg; bool check_exception_msg(const std::exception & exception) @@ -15,8 +18,6 @@ bool check_exception_msg(const std::exception & exception) return expected_msg == exception.what(); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - void function_1(std::vector v, size_t size) { PINOCCHIO_CHECK_ARGUMENT_SIZE(v.size(), size); @@ -61,5 +62,3 @@ BOOST_AUTO_TEST_CASE(test_check_arguments) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/matrix-block-element.cpp b/unittest/matrix-block-element.cpp index 7902157a9b..8cfc0b11b6 100644 --- a/unittest/matrix-block-element.cpp +++ b/unittest/matrix-block-element.cpp @@ -2,13 +2,14 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE matrix_block_element + #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; typedef Eigen::Matrix M11; @@ -421,5 +422,3 @@ BOOST_AUTO_TEST_CASE(test_nested_block_diagonal_block_element) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/matrix-inverse.cpp b/unittest/matrix-inverse.cpp index c0cf6165aa..b2499a7033 100644 --- a/unittest/matrix-inverse.cpp +++ b/unittest/matrix-inverse.cpp @@ -2,15 +2,16 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE matrix_inverse + #include #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -117,5 +118,3 @@ BOOST_AUTO_TEST_CASE(test_matrix_inverse_on_dynamic_matrix) test_matrix_inverse_on_dynamic_matrix_impl<11>(); test_matrix_inverse_on_dynamic_matrix_impl<12>(); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/matrix-product.cpp b/unittest/matrix-product.cpp index 0d65398f85..25b92d8849 100644 --- a/unittest/matrix-product.cpp +++ b/unittest/matrix-product.cpp @@ -2,12 +2,13 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE matrix_product + #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -73,5 +74,3 @@ BOOST_AUTO_TEST_CASE(test_col_major_small) test(rows, cols, inner_dim); test(rows, cols, inner_dim); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/matrix-stack.cpp b/unittest/matrix-stack.cpp index b18d56c19f..dc26f251c7 100644 --- a/unittest/matrix-stack.cpp +++ b/unittest/matrix-stack.cpp @@ -2,12 +2,15 @@ // Copyright (c) 202-2026 INRIA // +#define BOOST_TEST_MODULE matrix_stack + #include -#include #include #include "pinocchio/container/matrix-stack.hpp" +#include + // #define ALIGNMENT_VALUE 128 #define ALIGNMENT_VALUE 8 @@ -32,8 +35,6 @@ const T & as_const(T & value) return value; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(print_info) { std::cout << "sizeof(Scalar): " << sizeof(Scalar) << std::endl; @@ -451,5 +452,3 @@ BOOST_AUTO_TEST_CASE(matrix_stack_empty_matrix) BOOST_CHECK(matrix_stack[2].rows() == 4); BOOST_CHECK(matrix_stack[2].cols() == 3); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/matrix.cpp b/unittest/matrix.cpp index 4bc4dd1070..544d1ca3d1 100644 --- a/unittest/matrix.cpp +++ b/unittest/matrix.cpp @@ -2,14 +2,14 @@ // Copyright (c) 2024-2026 INRIA // +#define BOOST_TEST_MODULE matrix + #include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_isSymmetric) @@ -102,5 +102,3 @@ BOOST_AUTO_TEST_CASE(test_remap) BOOST_CHECK(re_mapped == input_map); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/mjcf.cpp b/unittest/mjcf.cpp index c7b14cb487..d3f532d53e 100644 --- a/unittest/mjcf.cpp +++ b/unittest/mjcf.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2024 CNRS INRIA // +#define BOOST_TEST_MODULE mjcf + #include #include @@ -17,9 +19,10 @@ #include "pinocchio/multibody/joint.hpp" -#include #include +#include + typedef ::pinocchio::mjcf::details::MjcfVisitor MjcfVisitor; namespace @@ -96,8 +99,6 @@ static bool comparePropertyTrees( return true; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - // /// @brief Test for the inertia conversion from mjcf to pinocchio inertia // /// @param BOOST_AUTO_TEST_CASE(convert_inertia_fullinertia) @@ -1730,5 +1731,3 @@ BOOST_AUTO_TEST_CASE(test_site_attached_to_fixed_body) BOOST_CHECK(site_2.placement.rotation().isIdentity()); BOOST_CHECK(site_2.placement.translation().isApprox(Eigen::Vector3d(0, 0, -1.))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/model-configuration-converter.cpp b/unittest/model-configuration-converter.cpp index 6a615b5d1f..9320a0ae65 100644 --- a/unittest/model-configuration-converter.cpp +++ b/unittest/model-configuration-converter.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2025 INRIA // -#include +#define BOOST_TEST_MODULE model_configuration_converter #include "pinocchio/multibody.hpp" @@ -11,7 +11,7 @@ #include "pinocchio/parsers/graph.hpp" -BOOST_AUTO_TEST_SUITE(ModelConfigurationConverter) +#include // TODO: factorize /// function isApprox better to avoid problem with zero precision @@ -652,5 +652,3 @@ BOOST_AUTO_TEST_CASE(test_convert_tangent) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/model-graph.cpp b/unittest/model-graph.cpp index 9fc94b3529..4c186b90b5 100644 --- a/unittest/model-graph.cpp +++ b/unittest/model-graph.cpp @@ -2,15 +2,18 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE model_graph + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/crba.hpp" #include "pinocchio/algorithm/frames.hpp" #include "pinocchio/parsers/graph.hpp" -#include #include +#include + pinocchio::graph::ModelGraph buildReversableModelGraph(const pinocchio::graph::JointVariant & joint) { using namespace pinocchio::graph; @@ -51,8 +54,6 @@ bool SE3isApprox( && (s1.translation() - s2.translation()).isZero(prec); } -BOOST_AUTO_TEST_SUITE(ModelGraphTest) - /// @brief test if vertex are added to the graph BOOST_AUTO_TEST_CASE(test_add_vertex) { @@ -1620,4 +1621,3 @@ BOOST_AUTO_TEST_CASE(test_build_geometry_model) BOOST_CHECK(cap2->radius == 3); } #endif -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/model.cpp b/unittest/model.cpp index 86e32e2b22..de409ceb8a 100644 --- a/unittest/model.cpp +++ b/unittest/model.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2018-2025 INRIA // +#define BOOST_TEST_MODULE model + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/check.hpp" @@ -15,12 +17,11 @@ #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/spatial/fwd.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_model_subtree) { @@ -151,7 +152,7 @@ BOOST_AUTO_TEST_CASE(comparison) BOOST_CHECK(model == model); } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(model_cast) { Model model; buildModels::humanoidRandom(model); @@ -1292,5 +1293,3 @@ BOOST_AUTO_TEST_CASE(test_colwise_sparsity_pattern_and_span_indexes) BOOST_CHECK(pattern[idx]); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/multiprecision-mpfr.cpp b/unittest/multiprecision-mpfr.cpp index 59b39c33fd..384b53533f 100644 --- a/unittest/multiprecision-mpfr.cpp +++ b/unittest/multiprecision-mpfr.cpp @@ -2,11 +2,12 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE multiprecision_mpfr + #include "pinocchio/math/multiprecision-mpfr.hpp" #include #include -#include #include #include @@ -18,7 +19,7 @@ #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/multibody/sample-models.hpp" -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_basic) { @@ -159,5 +160,3 @@ BOOST_AUTO_TEST_CASE(test_mutliprecision) BOOST_CHECK_IS_APPROX(data.M, data_multi.M, double); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/multiprecision.cpp b/unittest/multiprecision.cpp index 455d59faff..3036f2ed43 100644 --- a/unittest/multiprecision.cpp +++ b/unittest/multiprecision.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE multiprecision + #include "pinocchio/math/multiprecision.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -18,10 +20,9 @@ #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_basic) { @@ -137,5 +138,3 @@ BOOST_AUTO_TEST_CASE(test_mutliprecision) BOOST_CHECK_IS_APPROX(data.M, data_multi.M, double); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/openmp-exception.cpp b/unittest/openmp-exception.cpp index cc90371697..04b58c6f8c 100644 --- a/unittest/openmp-exception.cpp +++ b/unittest/openmp-exception.cpp @@ -2,13 +2,16 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE openmp_exception + #include #include "pinocchio/utils/openmp.hpp" -#include #include +#include + using namespace pinocchio; template @@ -36,8 +39,6 @@ void run_parallel_loop(const int n, OpenMPException & openmp_exception, Paramete openmp_exception.rethrowException(); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_openmp_exception_catch) { @@ -63,5 +64,3 @@ BOOST_AUTO_TEST_CASE(test_openmp_exception_catch) BOOST_CHECK_NO_THROW(run_parallel_loop(10000, openmp_exception, 10001)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/orthant-cone-jordan-operation.cpp b/unittest/orthant-cone-jordan-operation.cpp index 61bde751d8..2a387aa551 100644 --- a/unittest/orthant-cone-jordan-operation.cpp +++ b/unittest/orthant-cone-jordan-operation.cpp @@ -2,9 +2,9 @@ // Copyright (c) 2025 INRIA // -#include "pinocchio/constraints.hpp" +#define BOOST_TEST_MODULE orthant_cone_jordan_operation -#include +#include "pinocchio/constraints.hpp" #ifndef NDEBUG #include @@ -29,7 +29,7 @@ } while (0) #endif -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -287,5 +287,3 @@ BOOST_AUTO_TEST_CASE(jordan_scaling_matrix) BOOST_CHECK((w2diag_mat).isApprox(w2_diag_mat_expected)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/orthant-cone.cpp b/unittest/orthant-cone.cpp index 279afb21d1..3cbee8aef7 100644 --- a/unittest/orthant-cone.cpp +++ b/unittest/orthant-cone.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE orthant_cone + #include "pinocchio/constraints.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_orthant) { @@ -48,5 +49,3 @@ BOOST_AUTO_TEST_CASE(test_orthant) BOOST_CHECK((x_proj.array() >= 0).all()); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/parallel-aba.cpp b/unittest/parallel-aba.cpp index 9490a8a00f..5bed5da328 100644 --- a/unittest/parallel-aba.cpp +++ b/unittest/parallel-aba.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2021-2022 INRIA // +#define BOOST_TEST_MODULE parallel_aba + #include "pinocchio/spatial/fwd.hpp" #include "pinocchio/algorithm/parallel/aba.hpp" #include "pinocchio/algorithm/aba.hpp" @@ -11,12 +13,11 @@ #include -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_parallel_aba) { @@ -53,5 +54,3 @@ BOOST_AUTO_TEST_CASE(test_parallel_aba) BOOST_CHECK(a == a_ref); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/parallel-geometry.cpp b/unittest/parallel-geometry.cpp index 3ce9a81eea..2a38d1c318 100644 --- a/unittest/parallel-geometry.cpp +++ b/unittest/parallel-geometry.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2021-2023 INRIA // +#define BOOST_TEST_MODULE parallel_geometry + #include #include "pinocchio/geometry.hpp" @@ -20,12 +22,11 @@ #include #include + #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_geometry_pool) { const std::string filename = @@ -426,5 +427,3 @@ BOOST_AUTO_TEST_CASE(test_pool_talos) } } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/parallel-rnea.cpp b/unittest/parallel-rnea.cpp index 0b3d688f76..d4fa591fb5 100644 --- a/unittest/parallel-rnea.cpp +++ b/unittest/parallel-rnea.cpp @@ -2,18 +2,19 @@ // Copyright (c) 2021-2022 INRIA // +#define BOOST_TEST_MODULE parallel_rnea + #include "pinocchio/spatial.hpp" #include "pinocchio/algorithm/parallel/rnea.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_parallel_rnea) { @@ -50,5 +51,3 @@ BOOST_AUTO_TEST_CASE(test_parallel_rnea) BOOST_CHECK(tau == tau_ref); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/pgs-solver.cpp b/unittest/pgs-solver.cpp index 01da267509..8a57bef356 100644 --- a/unittest/pgs-solver.cpp +++ b/unittest/pgs-solver.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE pgs_solver + #include "pinocchio/algorithm/constraint-cholesky.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/constraints.hpp" @@ -9,9 +11,10 @@ #include "pinocchio/algorithm/aba.hpp" #include "pinocchio/algorithm/crba.hpp" -#include #include +#include + using namespace pinocchio; template @@ -124,8 +127,6 @@ struct TestBoxTpl std::size_t n_iter; }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(ball) { Model model; @@ -1451,5 +1452,3 @@ BOOST_AUTO_TEST_CASE(test_copy_result) result_copy.x.setZero(); BOOST_CHECK(result_assigned.x.isApprox(expected_x)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/point-anchor-constraint.cpp b/unittest/point-anchor-constraint.cpp index cc85fef91a..83882f09aa 100644 --- a/unittest/point-anchor-constraint.cpp +++ b/unittest/point-anchor-constraint.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE point_anchor_constraint + #include "pinocchio/spatial.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -16,9 +18,10 @@ // Helpers #include "constraints/jacobians-checker.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -47,8 +50,6 @@ bool within(const typename Matrix::Scalar & elt, const Eigen::MatrixBase return false; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(basic_constructor) { pinocchio::Model model; @@ -466,7 +467,7 @@ BOOST_AUTO_TEST_CASE(contact_models_sparsity_and_jacobians) } } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(point_anchor_constraint_cast) { pinocchio::Model model; @@ -562,5 +563,3 @@ BOOST_AUTO_TEST_CASE(compliance) BOOST_CHECK(compliance == compliance_ref); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/point-contact-constraint.cpp b/unittest/point-contact-constraint.cpp index a39198958c..5e34743f69 100644 --- a/unittest/point-contact-constraint.cpp +++ b/unittest/point-contact-constraint.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2024-2025 INRIA // +#define BOOST_TEST_MODULE point_contact_constraint + #include "pinocchio/spatial.hpp" #include "pinocchio/constraints.hpp" @@ -16,9 +18,10 @@ // Helpers #include "constraints/jacobians-checker.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; @@ -47,8 +50,6 @@ bool within(const typename Matrix::Scalar & elt, const Eigen::MatrixBase return false; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(basic_constructor) { pinocchio::Model model; @@ -594,7 +595,7 @@ BOOST_AUTO_TEST_CASE(contact_models_sparsity_and_jacobians) } } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(point_contact_constraint_cast) { pinocchio::Model model; pinocchio::buildModels::humanoidRandom(model, true); @@ -841,5 +842,3 @@ BOOST_AUTO_TEST_CASE(compliance) BOOST_CHECK(compliance == compliance_ref); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/preconditioner.cpp b/unittest/preconditioner.cpp index 0088b6c109..5afcb6bcbd 100644 --- a/unittest/preconditioner.cpp +++ b/unittest/preconditioner.cpp @@ -2,14 +2,14 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE preconditioner + #include "pinocchio/algorithm/diagonal-preconditioner.hpp" #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(diagonal_preconditioner) { Eigen::Index n = 10; @@ -37,5 +37,3 @@ BOOST_AUTO_TEST_CASE(diagonal_preconditioner) x_unscaled_true = x.array() * (precond_vec.array() * precond_vec.array()); BOOST_CHECK(x_unscaled.isApprox(x_unscaled_true)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/promote-static-eval.cpp b/unittest/promote-static-eval.cpp index b0d26ae20d..00a294a448 100644 --- a/unittest/promote-static-eval.cpp +++ b/unittest/promote-static-eval.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE promote_static_eval + #include "pinocchio/utils/promote-static-eval.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_helpers) { @@ -304,5 +305,3 @@ BOOST_AUTO_TEST_CASE(test_specitic_6x6_case) internal::promote_static_eval(res.noalias()).dispatch_type(matrix_product) == pinocchio::internal::DispatchType::STATIC); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/promote-static-op.cpp b/unittest/promote-static-op.cpp index c6d1313585..b907c5294c 100644 --- a/unittest/promote-static-op.cpp +++ b/unittest/promote-static-op.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE promote_static_op + #include "pinocchio/utils/promote-static-eval.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_helpers) { @@ -214,5 +215,3 @@ BOOST_AUTO_TEST_CASE(test_partial_static_matrix) BOOST_CHECK(res_noaliasing != res_aliasing); BOOST_CHECK(C == res_noaliasing); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/pv-solver.cpp b/unittest/pv-solver.cpp index 634da9b8ad..f09e9e2040 100644 --- a/unittest/pv-solver.cpp +++ b/unittest/pv-solver.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2023 KU Leuven // +#define BOOST_TEST_MODULE pv_solver + #include "pinocchio/spatial.hpp" #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/constraints.hpp" @@ -15,10 +17,9 @@ #include "pinocchio/algorithm/constraint-cholesky.hpp" #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include // TODO: add tests on J_ref*ddq - rhs and on the OSIM matrix for PV. Add tests for proxLTLs @@ -454,5 +455,3 @@ BOOST_AUTO_TEST_CASE(test_forward_dynamics_repeating_6D_humanoid) // // constrainedABA(model, data, q, v, tau, contact_models, contact_datas, prox_settings); // // BOOST_CHECK(data.ddq.isApprox(data_ref.ddq, 1e-11)); // // } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/python_parser.cpp b/unittest/python_parser.cpp index f52485340a..adb71a1c53 100644 --- a/unittest/python_parser.cpp +++ b/unittest/python_parser.cpp @@ -2,13 +2,13 @@ // Copyright (c) 2016-2020 CNRS INRIA // +#define BOOST_TEST_MODULE python_parser + #include "pinocchio/multibody.hpp" #include "pinocchio/parsers/python.hpp" #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(buildModel) { std::string filename = PINOCCHIO_MODEL_DIR + std::string("/simple_model.py"); @@ -24,5 +24,3 @@ BOOST_AUTO_TEST_CASE(buildModel) BOOST_CHECK(model.nq == 9); BOOST_CHECK(model.nv == 8); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/quaternion.cpp b/unittest/quaternion.cpp index 8aa525b6cd..5cd3c68acc 100644 --- a/unittest/quaternion.cpp +++ b/unittest/quaternion.cpp @@ -2,13 +2,13 @@ // Copyright (c) 2019-2020 INRIA CNRS // +#define BOOST_TEST_MODULE quaternion + #include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_assignQuaternion) { using namespace pinocchio; @@ -67,5 +67,3 @@ BOOST_AUTO_TEST_CASE(test_isNormalized) // Specific check for the Zero vector BOOST_CHECK(!quaternion::isNormalized(Quaternion(Vector4::Zero()))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/reachable-workspace.cpp b/unittest/reachable-workspace.cpp index 57f69ba34a..18ed1683b1 100644 --- a/unittest/reachable-workspace.cpp +++ b/unittest/reachable-workspace.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2016-2023 CNRS INRIA // +#define BOOST_TEST_MODULE reachable_workspace + #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/geometry.hpp" @@ -9,13 +11,14 @@ #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/parsers/urdf.hpp" -#include #include #ifdef PINOCCHIO_WITH_COLLISION #include #endif // PINOCCHIO_WITH_COLLISION +#include + /// @brief Create a spherical joint with a stick of length l attached to it /// @param length length of the stick /// @return pinochio model @@ -107,7 +110,6 @@ addObstacle(pinocchio::GeometryModel & geom_model, const double distance, const geom_model.addGeometryObject(geometry_object); } #endif -BOOST_AUTO_TEST_SUITE(ReachableWorkspace) /// @brief test generation combination function and compare to the output of the python function /// `itertools.combinations` @@ -337,5 +339,3 @@ BOOST_AUTO_TEST_CASE(test_spherical) BOOST_CHECK(res.vertex.cols() > 0); BOOST_CHECK(res.faces.rows() > 0); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/reference.cpp b/unittest/reference.cpp index f5eeae1352..72d87f56de 100644 --- a/unittest/reference.cpp +++ b/unittest/reference.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE reference + #include "pinocchio/utils/reference.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_get_ref) { @@ -69,5 +70,3 @@ BOOST_AUTO_TEST_CASE(test_get_ref) BOOST_CHECK(const_v_const_uptr.get() == &get_ref(const_v_const_uptr)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/regressor.cpp b/unittest/regressor.cpp index 2cf5f06a8b..518d7180d0 100644 --- a/unittest/regressor.cpp +++ b/unittest/regressor.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2018-2024 CNRS INRIA // +#define BOOST_TEST_MODULE regressor + #include "pinocchio/spatial.hpp" #include "pinocchio/algorithm/regressor.hpp" #include "pinocchio/algorithm/rnea.hpp" @@ -10,10 +12,9 @@ #include "pinocchio/multibody/sample-models.hpp" #include "pinocchio/algorithm/compute-all-terms.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_kinematic_regressor_joint) { @@ -423,5 +424,3 @@ BOOST_AUTO_TEST_CASE(test_potential_energy_regressor) BOOST_CHECK_CLOSE(potential_energy_regressor, target_energy, 1e-12); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/rigid-constraint-conversion.cpp b/unittest/rigid-constraint-conversion.cpp index 2b4aa3d037..95cec8b039 100644 --- a/unittest/rigid-constraint-conversion.cpp +++ b/unittest/rigid-constraint-conversion.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE rigid_constraint_conversion + #include "pinocchio/spatial.hpp" #include "pinocchio/constraints.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -10,14 +12,13 @@ #include "pinocchio/algorithm/kinematics.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" -#include #include +#include + using namespace pinocchio; using namespace Eigen; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - /// Verify that a PointAnchorConstraintModel converts to a CONTACT_3D RigidConstraintModel /// and that the kinematic structure (joint IDs, placements, reference frame) is preserved. BOOST_AUTO_TEST_CASE(convert_point_anchor_structure) @@ -318,5 +319,3 @@ BOOST_AUTO_TEST_CASE(convert_frame_anchor_jacobian_at_zero_error) BOOST_CHECK(J_rigid.isApprox(-J_frame)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/rnea-derivatives.cpp b/unittest/rnea-derivatives.cpp index 1e94436afa..0b1a353891 100644 --- a/unittest/rnea-derivatives.cpp +++ b/unittest/rnea-derivatives.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2017-2020 CNRS INRIA // +#define BOOST_TEST_MODULE rnea_derivatives + #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -12,10 +14,9 @@ #include "pinocchio/algorithm/rnea-derivatives.hpp" #include "pinocchio/algorithm/crba.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_generalized_gravity_derivatives) { @@ -524,5 +525,3 @@ BOOST_AUTO_TEST_CASE(test_get_coriolis) BOOST_CHECK(data.C.isApprox(data_ref.C)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/rnea-second-order-derivatives.cpp b/unittest/rnea-second-order-derivatives.cpp index 7c93f8a171..290bfde2f8 100644 --- a/unittest/rnea-second-order-derivatives.cpp +++ b/unittest/rnea-second-order-derivatives.cpp @@ -2,16 +2,17 @@ // Copyright (c) 2017-2020 CNRS INRIA // +#define BOOST_TEST_MODULE rnea_second_order_derivatives + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/rnea-second-order-derivatives.hpp" #include "pinocchio/algorithm/rnea-derivatives.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_rnea_derivatives_SO) { @@ -227,5 +228,3 @@ BOOST_AUTO_TEST_CASE(test_rnea_derivatives_SO) BOOST_CHECK(mqv.isApprox(mqv2, sqrt(alpha))); BOOST_CHECK(maq.isApprox(maq2, sqrt(alpha))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/rnea.cpp b/unittest/rnea.cpp index 6c1d71b793..8cb87c25b5 100644 --- a/unittest/rnea.cpp +++ b/unittest/rnea.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2020 CNRS INRIA // +#define BOOST_TEST_MODULE rnea + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/rnea.hpp" #include "pinocchio/algorithm/jacobian.hpp" @@ -11,12 +13,11 @@ #include "pinocchio/algorithm/centroidal.hpp" #include "pinocchio/multibody/sample-models.hpp" -#include #include #include "utils/model-generator.hpp" -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_nle_vs_rnea) { @@ -354,5 +355,3 @@ BOOST_AUTO_TEST_CASE(test_rnea_mimic) BOOST_CHECK(tau_st.isApprox(data_ref_st.tau)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/rotation.cpp b/unittest/rotation.cpp index a3292765c8..5ac921a5b6 100644 --- a/unittest/rotation.cpp +++ b/unittest/rotation.cpp @@ -2,14 +2,14 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE rotation + #include #include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_toRotationMatrix) { using namespace pinocchio; @@ -71,5 +71,3 @@ BOOST_AUTO_TEST_CASE(test_orthogonal_projection) BOOST_CHECK(fabs(rot_proj.determinant() - 1.) <= Eigen::NumTraits::dummy_precision()); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/rpy.cpp b/unittest/rpy.cpp index cbb926dfa3..0e17cb9ce7 100644 --- a/unittest/rpy.cpp +++ b/unittest/rpy.cpp @@ -2,13 +2,14 @@ // Copyright (c) 2019-2020 INRIA // +#define BOOST_TEST_MODULE rpy + #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_rpyToMatrix) { @@ -264,5 +265,3 @@ BOOST_AUTO_TEST_CASE(test_computeRpyJacobianTimeDerivative) Eigen::Matrix3d djWf = djWdr * rpydot[0] + djWdp * rpydot[1] + djWdy * rpydot[2]; BOOST_CHECK(djW.isApprox(djWf, tol)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/sample-models.cpp b/unittest/sample-models.cpp index 62ee46b65a..bf2bc5c263 100644 --- a/unittest/sample-models.cpp +++ b/unittest/sample-models.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2018 CNRS // +#define BOOST_TEST_MODULE sample_models + #include "pinocchio/multibody.hpp" #include "pinocchio/algorithm/joint-configuration.hpp" #include "pinocchio/algorithm/kinematics.hpp" @@ -10,9 +12,10 @@ #include #include -#include #include +#include + // Helper functions to map reduced to full model Eigen::VectorXd toFull(const Eigen::VectorXd & vec, int mimPrim, int mimSec, double scaling, double offset) @@ -31,8 +34,6 @@ Eigen::MatrixXd create_G(const pinocchio::Model & model, const pinocchio::Model return G; } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(build_model_sample_humanoid_random) { pinocchio::Model model; @@ -103,5 +104,3 @@ BOOST_AUTO_TEST_CASE(build_model_sample_humanoid) /* We might want to check here the joint namings, and validate the * direct geometry with respect to reference values. */ } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/sdf.cpp b/unittest/sdf.cpp index 3d9a8bba45..71823bf05f 100644 --- a/unittest/sdf.cpp +++ b/unittest/sdf.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2021 CNRS INRIA // +#define BOOST_TEST_MODULE sdf + #include "pinocchio/multibody.hpp" #include "pinocchio/parsers/sdf.hpp" @@ -9,8 +11,6 @@ using PointAnchorConstraintModelVector = std::vector; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(build_model) { const std::string filename = @@ -412,5 +412,3 @@ BOOST_AUTO_TEST_CASE(compare_model_in_version_1_6) BOOST_CHECK(constraint_models[0].joint2_id == 2); BOOST_CHECK(constraint_models[0].joint2_placement == placement_center_link_A); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/second-order-cone-jordan-operation.cpp b/unittest/second-order-cone-jordan-operation.cpp index d70d75513d..1640862260 100644 --- a/unittest/second-order-cone-jordan-operation.cpp +++ b/unittest/second-order-cone-jordan-operation.cpp @@ -2,9 +2,9 @@ // Copyright (c) 2025 INRIA // -#include "pinocchio/constraints.hpp" +#define BOOST_TEST_MODULE second_order_cone_jordan_operation -#include +#include "pinocchio/constraints.hpp" #ifndef NDEBUG #include @@ -29,7 +29,7 @@ } while (0) #endif -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -241,5 +241,3 @@ BOOST_AUTO_TEST_CASE(jordan_scaling_matrix) BOOST_CHECK(W2_expected.isApprox(W2)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/serialization-algorithm.cpp b/unittest/serialization-algorithm.cpp index f6b6304faa..f6669bb2cf 100644 --- a/unittest/serialization-algorithm.cpp +++ b/unittest/serialization-algorithm.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE serialization_algorithm + #include #include "pinocchio/multibody.hpp" @@ -17,10 +19,9 @@ #include "pinocchio/serialization.hpp" #include "serialization.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_delassus_operator_dense_serialization) { @@ -94,5 +95,3 @@ BOOST_AUTO_TEST_CASE(test_delassus_operator_dense_serialization) delassus_operator_dense, TEST_SERIALIZATION_FOLDER "/DelassusOperatorDense", "DelassusOperatorDense"); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/serialization-constraints.cpp b/unittest/serialization-constraints.cpp index 6a7c2c7218..2ea4897d0e 100644 --- a/unittest/serialization-constraints.cpp +++ b/unittest/serialization-constraints.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE serialization_constraints + #include #include "pinocchio/multibody.hpp" @@ -16,10 +18,10 @@ #include "pinocchio/serialization.hpp" #include "serialization.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include + template struct JointLimitAndFrictionConstraintModelInitializer { @@ -315,5 +317,3 @@ BOOST_AUTO_TEST_CASE(test_constraint_model_variant) } generic_test(cmodels, TEST_SERIALIZATION_FOLDER "/Constraint", "cmodel_vector"); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/serialization-math.cpp b/unittest/serialization-math.cpp index 361a37542d..ebb1f72185 100644 --- a/unittest/serialization-math.cpp +++ b/unittest/serialization-math.cpp @@ -2,15 +2,18 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE serialization_math + #include "pinocchio/serialization.hpp" #include "pinocchio/spatial.hpp" -#include #include #include "serialization.hpp" +#include + template struct empty_contructor_algo> { @@ -21,8 +24,6 @@ struct empty_contructor_algo MatrixStack; @@ -152,5 +153,3 @@ BOOST_AUTO_TEST_CASE(block_diagonal_matrix_nested) generic_test( block_diagonal_matrix, TEST_SERIALIZATION_FOLDER "/Container", "block_diagonal_matrix_nested"); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/serialization-multibody-joint.cpp b/unittest/serialization-multibody-joint.cpp index fd02447980..831934421a 100644 --- a/unittest/serialization-multibody-joint.cpp +++ b/unittest/serialization-multibody-joint.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE serialization_multibody_joint + #include #include "pinocchio/multibody.hpp" @@ -13,10 +15,9 @@ #include "pinocchio/serialization.hpp" #include "serialization.hpp" -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include template struct init; @@ -461,5 +462,3 @@ BOOST_AUTO_TEST_CASE(test_data_serialization) generic_test(data, TEST_SERIALIZATION_FOLDER "/Data", "Data"); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/serialization-multibody.cpp b/unittest/serialization-multibody.cpp index 7aa1754fd5..27fb119361 100644 --- a/unittest/serialization-multibody.cpp +++ b/unittest/serialization-multibody.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2026 INRIA // +#define BOOST_TEST_MODULE serialization_multibody + #include #include "pinocchio/multibody.hpp" @@ -17,9 +19,10 @@ #include "pinocchio/serialization.hpp" #include "serialization.hpp" -#include #include +#include + template<> struct empty_contructor_algo { @@ -29,8 +32,6 @@ struct empty_contructor_algo } }; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_multibody_serialization) { using namespace pinocchio; @@ -136,5 +137,3 @@ BOOST_AUTO_TEST_CASE(test_geometry_model_and_data_serialization) } #endif // PINOCCHIO_WITH_COLLISION } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/serialization.cpp b/unittest/serialization.cpp index ce3e6044ca..bdfa1426d7 100644 --- a/unittest/serialization.cpp +++ b/unittest/serialization.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2019-2025 INRIA // +#define BOOST_TEST_MODULE serialization + #include #include "pinocchio/multibody.hpp" @@ -17,9 +19,10 @@ #include "pinocchio/serialization.hpp" #include "serialization.hpp" -#include #include +#include + // template<> // struct empty_contructor_algo // { @@ -39,8 +42,6 @@ struct empty_contructor_algo @@ -48,8 +50,6 @@ void testSINCOS(int n) } } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_sincos) { #ifndef NDEBUG @@ -61,5 +61,3 @@ BOOST_AUTO_TEST_CASE(test_sincos) testSINCOS(n); testSINCOS(n); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/size-in-bytes.cpp b/unittest/size-in-bytes.cpp index b1b5e74c4c..2f876ceeed 100644 --- a/unittest/size-in-bytes.cpp +++ b/unittest/size-in-bytes.cpp @@ -2,14 +2,17 @@ // Copyright (c) 2025-2026 INRIA // +#define BOOST_TEST_MODULE size_in_bytes + #include "pinocchio/utils/size-in-bytes.hpp" #include "pinocchio/math.hpp" #include -#include #include +#include + using namespace pinocchio; template @@ -29,8 +32,6 @@ typedef SimpleStruct<1> SimpleStruct1; typedef SimpleStruct<10> SimpleStruct10; typedef SimpleStruct<100> SimpleStruct100; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_simple_struct) { BOOST_CHECK(1 == SimpleStruct1().sizeInBytes()); @@ -80,5 +81,3 @@ BOOST_AUTO_TEST_CASE(test_fundamental_types) BOOST_CHECK(internal::sizeInBytes(double(1)) == sizeof(double)); BOOST_CHECK(internal::sizeInBytes((long double)(1)) == sizeof(long double)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/spatial.cpp b/unittest/spatial.cpp index 7386449c74..4338f871f4 100644 --- a/unittest/spatial.cpp +++ b/unittest/spatial.cpp @@ -2,13 +2,13 @@ // Copyright (c) 2015-2021 CNRS INRIA // -#include "pinocchio/spatial.hpp" +#define BOOST_TEST_MODULE spatial -#include +#include "pinocchio/spatial.hpp" #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_SE3) { @@ -1216,5 +1216,3 @@ BOOST_AUTO_TEST_CASE(test_spatial_axis) BOOST_CHECK(Sxf.isApprox(Sxf_ref)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/srdf.cpp b/unittest/srdf.cpp index 42241743fa..6f88b7c2b1 100644 --- a/unittest/srdf.cpp +++ b/unittest/srdf.cpp @@ -2,18 +2,19 @@ // Copyright (c) 2016-2018 CNRS // +#define BOOST_TEST_MODULE srdf + #include "pinocchio/multibody.hpp" #include "pinocchio/parsers/urdf.hpp" #include "pinocchio/parsers/srdf.hpp" #include + #include using namespace pinocchio; using namespace std; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_removeCollisionPairs) { using namespace pinocchio::urdf; @@ -138,5 +139,3 @@ BOOST_AUTO_TEST_CASE(readRotorParams) BOOST_CHECK(model.rotorInertia(model.joints[model.getJointId("WAIST_P")].idx_v()) == 1.0); BOOST_CHECK(model.rotorGearRatio(model.joints[model.getJointId("WAIST_R")].idx_v()) == 1.0); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/symmetric.cpp b/unittest/symmetric.cpp index 8b0717e988..b30cf62c4c 100644 --- a/unittest/symmetric.cpp +++ b/unittest/symmetric.cpp @@ -17,6 +17,8 @@ * - Pinocchio: 6us */ +#define BOOST_TEST_MODULE symmetric + #include "pinocchio/spatial.hpp" #include "pinocchio/utils/timer.hpp" @@ -24,7 +26,6 @@ #include #include -#include void timeSym3( const pinocchio::Symmetric3 & S, @@ -52,6 +53,8 @@ void timeLTI( #endif +#include + void timeSelfAdj(const Eigen::Matrix3d & A, const Eigen::Matrix3d & Sdense, Eigen::Matrix3d & ASA) { typedef Eigen::SelfAdjointView Sym3; @@ -59,8 +62,6 @@ void timeSelfAdj(const Eigen::Matrix3d & A, const Eigen::Matrix3d & Sdense, Eige ASA.triangularView() = A * S * A.transpose(); } -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - /* --- PINOCCHIO ------------------------------------------------------------ */ /* --- PINOCCHIO ------------------------------------------------------------ */ /* --- PINOCCHIO ------------------------------------------------------------ */ @@ -335,7 +336,7 @@ BOOST_AUTO_TEST_CASE(comparison) BOOST_CHECK(sym1 == sym1); } -BOOST_AUTO_TEST_CASE(cast) +BOOST_AUTO_TEST_CASE(csymmetric_ast) { using namespace pinocchio; Symmetric3 sym(Symmetric3::Random()); @@ -343,4 +344,3 @@ BOOST_AUTO_TEST_CASE(cast) BOOST_CHECK(sym.cast() == sym); BOOST_CHECK(sym.cast().cast() == sym); } -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/tree-broadphase.cpp b/unittest/tree-broadphase.cpp index 2dfbb02250..d2e224606d 100644 --- a/unittest/tree-broadphase.cpp +++ b/unittest/tree-broadphase.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2022 INRIA // +#define BOOST_TEST_MODULE tree_broadphase + #include "pinocchio/collision/collision.hpp" #include "pinocchio/collision/broadphase.hpp" #include "pinocchio/collision/tree-broadphase-manager.hpp" @@ -12,12 +14,11 @@ #include #include + #include using namespace pinocchio; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_tree_broadphase_with_empty_models) { Model model; @@ -78,5 +79,3 @@ BOOST_AUTO_TEST_CASE(test_collisions) == computeCollisions(model, data, geom_model, geom_data, q_rand)); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/tridiagonal-matrix.cpp b/unittest/tridiagonal-matrix.cpp index 206fefe277..a7cff36dde 100644 --- a/unittest/tridiagonal-matrix.cpp +++ b/unittest/tridiagonal-matrix.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2024 INRIA // +#define BOOST_TEST_MODULE tridiagonal_matrix + #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include using namespace pinocchio; @@ -220,5 +221,3 @@ BOOST_AUTO_TEST_CASE(test_eigenvalues) BOOST_CHECK(math::fabs(lowest_eigenvalue - spectrum_ref[first_index]) <= eps); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/urdf.cpp b/unittest/urdf.cpp index 3a27abf06e..3dda2d8982 100644 --- a/unittest/urdf.cpp +++ b/unittest/urdf.cpp @@ -2,6 +2,8 @@ // Copyright (c) 2015-2022 CNRS INRIA // +#define BOOST_TEST_MODULE urdf + #include #include @@ -13,11 +15,10 @@ #endif // PINOCCHIO_WITH_COLLISION #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(build_model) { @@ -773,5 +774,3 @@ BOOST_AUTO_TEST_CASE(test_urdf_v10_accel_jerk_floating) } } #endif // PINOCCHIO_URDFDOM_HEADERS_VERSION_AT_LEAST(3, 0, 0) - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/value.cpp b/unittest/value.cpp index 13f35b8cbe..5f0dcc0d00 100644 --- a/unittest/value.cpp +++ b/unittest/value.cpp @@ -15,6 +15,8 @@ * */ +#define BOOST_TEST_MODULE value + #include #include @@ -24,8 +26,6 @@ #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - BOOST_AUTO_TEST_CASE(test_000) { std::string filename = PINOCCHIO_MODEL_DIR + std::string("/simple_humanoid.urdf"); @@ -175,5 +175,3 @@ BOOST_AUTO_TEST_CASE(test_QVA) rnea(model, data, q, v, a); BOOST_CHECK(expected.isApprox(data.tau, 1e-7)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/vector.cpp b/unittest/vector.cpp index 6ecf26a3d9..3bd6e23a6f 100644 --- a/unittest/vector.cpp +++ b/unittest/vector.cpp @@ -2,12 +2,13 @@ // Copyright (c) 2020 INRIA // +#define BOOST_TEST_MODULE vector + #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_isNormalized) { @@ -36,5 +37,3 @@ BOOST_AUTO_TEST_CASE(test_isNormalized) BOOST_CHECK(!isNormalized(Vector(Vector::Zero(size)))); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/version.cpp b/unittest/version.cpp index 59e4a32907..ce8036900f 100644 --- a/unittest/version.cpp +++ b/unittest/version.cpp @@ -2,13 +2,14 @@ // Copyright (c) 2018-2019 CNRS INRIA // +#define BOOST_TEST_MODULE version + #include #include -#include #include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +#include BOOST_AUTO_TEST_CASE(test_version) { @@ -29,5 +30,3 @@ BOOST_AUTO_TEST_CASE(test_version) PINOCCHIO_MAJOR_VERSION, PINOCCHIO_MINOR_VERSION, PINOCCHIO_PATCH_VERSION + 1)); BOOST_CHECK(!checkVersionAtLeast(99, 0, 0)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/visitor.cpp b/unittest/visitor.cpp index 97cea16568..34f8a71e57 100644 --- a/unittest/visitor.cpp +++ b/unittest/visitor.cpp @@ -2,14 +2,17 @@ // Copyright (c) 2015-2019 CNRS INRIA // +#define BOOST_TEST_MODULE visitor + #include "pinocchio/multibody.hpp" #include "pinocchio/multibody/visitor.hpp" #include -#include #include +#include + namespace bf = boost::fusion; struct SimpleUnaryVisitor1 : public pinocchio::fusion::JointUnaryVisitorBase @@ -162,8 +165,6 @@ struct SimpleBinaryVisitor4 : public pinocchio::fusion::JointBinaryVisitorBase struct init; @@ -352,5 +353,3 @@ BOOST_AUTO_TEST_CASE(test_run_over_all_joints_binary_visitor) SimpleBinaryVisitor4::run(model.joints[i], model.joints[i], data.joints[i], data.joints[i]); } } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/visualizer.cpp b/unittest/visualizer.cpp index a6958da445..a7d6d383b4 100644 --- a/unittest/visualizer.cpp +++ b/unittest/visualizer.cpp @@ -1,3 +1,5 @@ +#define BOOST_TEST_MODULE visualizer + #include "pinocchio/visualizers/base-visualizer.hpp" #include "pinocchio/multibody/sample-models.hpp" @@ -5,8 +7,6 @@ using namespace pinocchio::visualizers; -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) - struct TestViz : BaseVisualizer { using BaseVisualizer::BaseVisualizer; @@ -45,5 +45,3 @@ BOOST_AUTO_TEST_CASE(viz_ctor_borrow_datas) } // no double free segfault } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/zero-cone.cpp b/unittest/zero-cone.cpp index 3f1cd3102a..23708bdf27 100644 --- a/unittest/zero-cone.cpp +++ b/unittest/zero-cone.cpp @@ -2,14 +2,15 @@ // Copyright (c) 2025 INRIA // +#define BOOST_TEST_MODULE zero_cone + #include "pinocchio/constraints.hpp" -#include #include -using namespace pinocchio; +#include -BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) +using namespace pinocchio; BOOST_AUTO_TEST_CASE(test_proj) { @@ -41,5 +42,3 @@ BOOST_AUTO_TEST_CASE(test_proj) BOOST_CHECK(fabs((x - proj_x).dot(proj_x)) <= 1e-12); // orthogonal projection } } - -BOOST_AUTO_TEST_SUITE_END() From a11965f5bb8e0d0a74901d8c4d721479d5c7e12e Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Thu, 9 Jul 2026 16:01:39 +0200 Subject: [PATCH 05/32] cmake: apply review --- CMakeLists.txt | 58 +++++++++++++++-------------------------- pixi.toml | 2 ++ unittest/CMakeLists.txt | 7 ++--- 3 files changed, 25 insertions(+), 42 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d1e9ad1a09..8f2197face 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.22) project( pinocchio - VERSION 0.1.0 + VERSION 4.1.0 DESCRIPTION "A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives" HOMEPAGE_URL "http://github.com/stack-of-tasks/pinocchio" @@ -22,25 +22,12 @@ jrl_configure_defaults() # ---------------------------------------------------- jrl_option(INSTALL_DOCUMENTATION "Generate and install the documentation" OFF) -jrl_option(PINOCCHIO_DOXYGEN_USE_MATHJAX "Avoid latex at build time" OFF) -#TODO : remove intermediate option -if(PINOCCHIO_DOXYGEN_USE_MATHJAX) - set(DOXYGEN_USE_MATHJAX YES) -endif() jrl_option(BUILD_BENCHMARK "Build the benchmarks" OFF) jrl_option(BUILD_EXAMPLES "Build the examples" ON) jrl_option(BUILD_UTILS "Build the utils" OFF) jrl_option(GENERATE_PYTHON_STUBS "Generate the Python stubs associated to the Python library" OFF) jrl_option(BUILD_WITH_COMMIT_VERSION "Build libraries by setting specific commit version" OFF) -# TODO : remove ? deprecated -jrl_option(BUILD_UNIT_TESTS "BUILD_UNIT_TESTS is deprecated. Use BUILD_TESTING instead.\ - If you are manually building Pinocchio from source in an existing build folder,\ - we suggest that you delete your build folder and make a new one." ON -) jrl_option(BUILD_TESTING "build the tests" ON) -if(BUILD_UNIT_TESTS) - set(BUILD_TESTING ${BUILD_UNIT_TESTS}) -endif() jrl_option(BUILD_ADVANCED_TESTING "Build the advanced tests (multiprecision, etc.) of Pinocchio" OFF) jrl_option(PINOCCHIO_BUILD_MPFR_TESTING "Build MPFR dependent tests" OFF) jrl_option(BUILD_WITH_URDF_SUPPORT "Build the library with the URDF format support" ON) @@ -49,27 +36,31 @@ jrl_option(BUILD_WITH_COLLISION_SUPPORT "Build the library with the collision su jrl_option(BUILD_WITH_AUTODIFF_SUPPORT "Build the library with the automatic differentiation support (via CppAD)" OFF) jrl_option( BUILD_WITH_CASADI_SUPPORT "Build the library with the support of CASADI" OFF) # cppadcodgen don't build well with CL -if(NOT WIN32) - jrl_option(BUILD_WITH_CODEGEN_SUPPORT "Build the library with the support of code generation (via CppADCodeGen)" OFF) -endif() +jrl_option(BUILD_WITH_CODEGEN_SUPPORT + "Build the library with the support of code generation (via CppADCodeGen)" + OFF + CONDITION WIN32 + FALLBACK OFF +) jrl_option(BUILD_WITH_OPENMP_SUPPORT "Build the library with the OpenMP support" OFF) -# TODO : why not present with jrl v1 jrl_option(BUILD_PYTHON_INTERFACE "Build the Python bindings" ON) -jrl_option(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT "Build the Python interface with Boost.Multiprecision MPFR support" +jrl_option(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT + "Build the Python interface with Boost.Multiprecision MPFR support" OFF CONDITION BUILD_PYTHON_INTERFACE FALLBACK OFF ) -jrl_option(BUILD_WITH_LIBPYTHON "Build the library with Python format support" +jrl_option(BUILD_WITH_LIBPYTHON + "Build the library with Python format support" ON CONDITION BUILD_PYTHON_INTERFACE FALLBACK OFF ) -if(APPLE) - jrl_option(BUILD_WITH_ACCELERATE_SUPPORT "Build Pinocchio with the Accelerate support" OFF) -else(APPLE) - set(BUILD_WITH_ACCELERATE_SUPPORT FALSE) -endif() +jrl_option(BUILD_WITH_ACCELERATE_SUPPORT + "Build Pinocchio with the Accelerate support" + OFF + CONDITION APPLE + FALLBACK OFF) jrl_option(INITIALIZE_WITH_NAN "Initialize Eigen entries with NaN" OFF) jrl_option(ASSERT_ON_EXCEPTION "Turns Pinocchio excpetions into asserts for debug purposes" OFF) jrl_option(ENABLE_TEMPLATE_INSTANTIATION "Template instantiation of the main library" ON) @@ -80,6 +71,7 @@ jrl_option(PINOCCHIO_INSTALL_DEPRECATED_HEADERS "Use and install deprecated head # PCH use by default jrl_option(PINOCCHIO_BUILD_BINDING_WITH_PCH "Use PCH to accelerate binding build" OFF) jrl_option(PINOCCHIO_BUILD_VISUALIZERS "Build the pinocchio visualizers library" ON) +jrl_option(BUILD_WITH_EXTRA_SUPPORT "Build with extra support" ON) # ---------------------------------------------------- # --- DEPENDENCIES ----------------------------------- @@ -93,7 +85,7 @@ jrl_find_package(Boost CONFIG REQUIRED COMPONENTS serialization filesystem ) if(BUILD_WITH_COLLISION_SUPPORT) - jrl_find_package(coal REQUIRED) + jrl_find_package(coal CONFIG REQUIRED) endif() if(BUILD_TESTING) @@ -118,18 +110,13 @@ jrl_target_generate_tracy_header(pinocchio_headers INTERFACE FILENAME pinocchio/ target_compile_definitions( pinocchio_headers - INTERFACE $<$:EIGEN_INITIALIZE_MATRICES_BY_NAN> -) - -target_compile_definitions( - pinocchio_headers - INTERFACE INTERFACE BOOST_MPL_LIMIT_LIST_SIZE=30 BOOST_MPL_LIMIT_VECTOR_SIZE=30 BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS BOOST_FUSION_INVOKE_MAX_ARITY=12 $ + $<$:EIGEN_INITIALIZE_MATRICES_BY_NAN> ) target_link_libraries( @@ -615,12 +602,9 @@ if(BUILD_WITH_COLLISION_SUPPORT) target_compile_definitions( pinocchio_collision PUBLIC PINOCCHIO_WITH_COLLISION + PUBLIC PINOCCHIO_WITH_HPP_FCL # DEPRECATED: Setup back compatibility define ) - # DEPRECATED: Setup back compatibility define - target_compile_definitions( - pinocchio_collision - PUBLIC PINOCCHIO_WITH_HPP_FCL - ) + jrl_target_set_default_compile_options(pinocchio_collision PRIVATE) jrl_target_enforce_msvc_conformance(pinocchio_collision PRIVATE) jrl_target_generate_config_header(pinocchio_collision INTERFACE FILENAME pinocchio/collision/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_collision) diff --git a/pixi.toml b/pixi.toml index e5caec227e..9930c75627 100644 --- a/pixi.toml +++ b/pixi.toml @@ -79,6 +79,8 @@ extra-args = [ [package.build-dependencies] pkg-config = ">=0.29.2" +jrl-cmakemodules = ">=2.0.0" +example-robot-data = ">=5.0.0" [package.host-dependencies] libboost-devel = ">=1.80.0" diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index 5571583aef..24265d4c1d 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -20,10 +20,6 @@ add_custom_target(pinocchio-tests) # --- MACROS ---------------------------------------- # ---------------------------------------------------- -set(PINOCCHIO_UNIT_TEST_HEADERS - ${PROJECT_SOURCE_DIR}/unittest/constraints/init_constraints.hpp - ${PROJECT_SOURCE_DIR}/unittest/constraints/jacobians-checker.hpp -) # TODO rename in pinocchio_add_test function(add_pinocchio_unit_test name) set(test_name "pinocchio-test-cpp-${name}") @@ -290,7 +286,8 @@ endif() if(BUILD_WITH_RTSAN) add_pinocchio_unit_test(dynamic-allocations) - get_cpp_test_name(dynamic-allocations ${CMAKE_CURRENT_SOURCE_DIR} test_name) + #TODO remove following line when BUILD_WITH_RTSAN is handled + #get_cpp_test_name(dynamic-allocations ${CMAKE_CURRENT_SOURCE_DIR} test_name) target_compile_options(${test_name} PRIVATE -fsanitize=realtime) target_link_options(${test_name} PRIVATE -fsanitize=realtime) # On osx-arm64 mutex are called to initialize some static variables. From a7d67c3ffc034eb0a49b3c9fdde5adf677db8c45 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Thu, 9 Jul 2026 18:04:21 +0200 Subject: [PATCH 06/32] cmake: port parsers --- CMakeLists.txt | 156 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 149 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f2197face..875669d2f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,7 +36,7 @@ jrl_option(BUILD_WITH_COLLISION_SUPPORT "Build the library with the collision su jrl_option(BUILD_WITH_AUTODIFF_SUPPORT "Build the library with the automatic differentiation support (via CppAD)" OFF) jrl_option( BUILD_WITH_CASADI_SUPPORT "Build the library with the support of CASADI" OFF) # cppadcodgen don't build well with CL -jrl_option(BUILD_WITH_CODEGEN_SUPPORT +jrl_option(BUILD_WITH_CODEGEN_SUPPORT "Build the library with the support of code generation (via CppADCodeGen)" OFF CONDITION WIN32 @@ -44,23 +44,24 @@ jrl_option(BUILD_WITH_CODEGEN_SUPPORT ) jrl_option(BUILD_WITH_OPENMP_SUPPORT "Build the library with the OpenMP support" OFF) jrl_option(BUILD_PYTHON_INTERFACE "Build the Python bindings" ON) -jrl_option(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT +jrl_option(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT "Build the Python interface with Boost.Multiprecision MPFR support" OFF CONDITION BUILD_PYTHON_INTERFACE FALLBACK OFF ) -jrl_option(BUILD_WITH_LIBPYTHON +jrl_option(BUILD_WITH_LIBPYTHON "Build the library with Python format support" ON CONDITION BUILD_PYTHON_INTERFACE FALLBACK OFF ) -jrl_option(BUILD_WITH_ACCELERATE_SUPPORT - "Build Pinocchio with the Accelerate support" +jrl_option(BUILD_WITH_ACCELERATE_SUPPORT + "Build Pinocchio with the Accelerate support" OFF CONDITION APPLE - FALLBACK OFF) + FALLBACK OFF +) jrl_option(INITIALIZE_WITH_NAN "Initialize Eigen entries with NaN" OFF) jrl_option(ASSERT_ON_EXCEPTION "Turns Pinocchio excpetions into asserts for debug purposes" OFF) jrl_option(ENABLE_TEMPLATE_INSTANTIATION "Template instantiation of the main library" ON) @@ -94,6 +95,11 @@ if(BUILD_TESTING) ) endif() +if(BUILD_WITH_URDF_SUPPORT) + jrl_find_package(urdfdom_headers REQUIRED) + jrl_find_package(urdfdom REQUIRED) +endif() + set(PINOCCHIO_MODEL_DIR "${PROJECT_SOURCE_DIR}/models") jrl_find_package(example-robot-data CONFIG REQUIRED EXPECTED_TARGETS example-robot-data::example-robot-data) @@ -602,7 +608,8 @@ if(BUILD_WITH_COLLISION_SUPPORT) target_compile_definitions( pinocchio_collision PUBLIC PINOCCHIO_WITH_COLLISION - PUBLIC PINOCCHIO_WITH_HPP_FCL # DEPRECATED: Setup back compatibility define + PUBLIC + PINOCCHIO_WITH_HPP_FCL # DEPRECATED: Setup back compatibility define ) jrl_target_set_default_compile_options(pinocchio_collision PRIVATE) @@ -674,6 +681,141 @@ if(ENABLE_TEMPLATE_INSTANTIATION) list(APPEND EXPORTED_TARGETS pinocchio_template_instantiation_default) endif() +# handle parsers + +if(BUILD_WITH_URDF_SUPPORT OR BUILD_WITH_SDF_SUPPORT) + set(BUILD_WITH_PARSERS_SUPPORT TRUE) +else() + set(BUILD_WITH_PARSERS_SUPPORT FALSE) +endif() + +if(BUILD_WITH_PARSERS_SUPPORT) + add_library(pinocchio_parsers SHARED) + + target_sources( + pinocchio_parsers + PRIVATE + src/parsers/utils/file-explorer.cpp + src/parsers/mjcf/mjcf-graph.cpp + src/parsers/mjcf/mjcf-graph-geom.cpp + src/parsers/graph/model-graph.cpp + src/parsers/graph/model-graph-algo.cpp + ) + + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/parsers/graph/fwd.hpp + include/pinocchio/parsers/graph.hpp + include/pinocchio/parsers/mjcf.hpp + include/pinocchio/parsers/srdf.hpp + include/pinocchio/parsers/utils.hpp + BASE_DIRS include + ) + + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/src/parsers/graph/frames.hxx + include/pinocchio/src/parsers/graph/fwd.hxx + include/pinocchio/src/parsers/graph/geometries.hxx + include/pinocchio/src/parsers/graph/graph-visitor.hxx + include/pinocchio/src/parsers/graph/joints.hxx + include/pinocchio/src/parsers/graph/model-configuration-converter.hxx + include/pinocchio/src/parsers/graph/model-graph-algo-geometry.hxx + include/pinocchio/src/parsers/graph/model-graph-algo.hxx + include/pinocchio/src/parsers/graph/model-graph.hxx + include/pinocchio/src/parsers/meshloader-fwd.hxx + include/pinocchio/src/parsers/mjcf/geometry.hxx + include/pinocchio/src/parsers/mjcf/mjcf-graph.hxx + include/pinocchio/src/parsers/mjcf/mjcf.hxx + include/pinocchio/src/parsers/mjcf/model.hxx + include/pinocchio/src/parsers/scalar-model.hxx + include/pinocchio/src/parsers/srdf/srdf.hxx + include/pinocchio/src/parsers/utils/utils.hxx + include/pinocchio/src/parsers/utils/file-explorer.hxx + BASE_DIRS include + ) + + if(BUILD_WITH_URDF_SUPPORT) + target_sources( + pinocchio_parsers + PRIVATE + src/parsers/urdf/model.cpp + src/parsers/urdf/geometry.cpp + src/parsers/urdf/utils.cpp + ) + + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/parsers/urdf.hpp + BASE_DIRS include + ) + + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/src/parsers/urdf/geometry.hxx + include/pinocchio/src/parsers/urdf/model.hxx + include/pinocchio/src/parsers/urdf/urdf.hxx + include/pinocchio/src/parsers/urdf/utils.hxx + BASE_DIRS include + ) + target_link_libraries(pinocchio_parsers PUBLIC urdfdom::urdf_parser) + # Expose urdfdom_headers version + string(REPLACE "." ";" _URDFDOM_H_VER "${urdfdom_headers_VERSION}") + list(GET _URDFDOM_H_VER 0 _URDFDOM_H_MAJOR) + list(GET _URDFDOM_H_VER 1 _URDFDOM_H_MINOR) + list(GET _URDFDOM_H_VER 2 _URDFDOM_H_PATCH) + + target_compile_definitions( + pinocchio_parsers + PUBLIC + PINOCCHIO_WITH_URDFDOM + PINOCCHIO_URDFDOM_HEADERS_MAJOR_VERSION=${_URDFDOM_H_MAJOR} + PINOCCHIO_URDFDOM_HEADERS_MINOR_VERSION=${_URDFDOM_H_MINOR} + PINOCCHIO_URDFDOM_HEADERS_PATCH_VERSION=${_URDFDOM_H_PATCH} + ) + endif() + + if(BUILD_WITH_SDF_SUPPORT) + target_sources( + pinocchio_parsers + PRIVATE src/parsers/sdf/model.cpp src/parsers/sdf/geometry.cpp + ) + + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/parsers/sdf.hpp + BASE_DIRS include + ) + + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/src/parsers/sdf/geometry.hxx + include/pinocchio/src/parsers/sdf/model.hxx + include/pinocchio/src/parsers/sdf/urdf.hxx + BASE_DIRS include + ) + + target_link_libraries(pinocchio_parsers PUBLIC ${SDFormat_LIBRARIES}) + + target_compile_definitions( + pinocchio_parsers + PUBLIC PINOCCHIO_WITH_SDFORMAT + ) + endif() + + target_link_libraries( + pinocchio_parsers + PUBLIC pinocchio_default Boost::filesystem + ) + + jrl_target_set_default_compile_options(pinocchio_parsers PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_parsers PRIVATE) + jrl_target_generate_config_header(pinocchio_parsers INTERFACE FILENAME pinocchio/parsers/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_parsers) + + target_link_libraries(pinocchio INTERFACE pinocchio_parsers) + list(APPEND EXPORTED_TARGETS pinocchio_parsers) +endif() + # ---------------------------------------------------- # --- UNIT TESTS --------------------------------------- # ---------------------------------------------------- From c46cc511e0e4e7e4ac5b814570b8c0ed6b93fe98 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Mon, 20 Jul 2026 17:08:58 +0200 Subject: [PATCH 07/32] cmake: port parsers' UTs --- CMakeLists.txt | 33 ++++++++++++++++++++++- unittest/contact-dynamics-derivatives.cpp | 2 ++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 875669d2f8..c85dc5729a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -795,19 +795,50 @@ if(BUILD_WITH_PARSERS_SUPPORT) BASE_DIRS include ) - target_link_libraries(pinocchio_parsers PUBLIC ${SDFormat_LIBRARIES}) + # the following lines allows to link to SDFormat, indeed SDFormat has its version number in its target until version ==16, + set( + SDF_VERSIONS + "15" + "13" + "12" + ) + list(APPEND SDF_VERSIONS "") + foreach(version IN LISTS SDF_VERSIONS) + find_package(SDFormat${version} QUIET) + if(SDFormat${version}_FOUND) + set(SDFormat_FOUND True) + jrl_find_package(SDFormat${version} CONFIG) + message(STATUS "SDFormat${version} Found") + add_library(pinocchio_sdformat ALIAS sdformat${version}::sdformat${version}) + break() + endif() + endforeach(version) + if(NOT SDFormat_FOUND) + message( + FATAL_ERROR + "SDFormat not found. Accepted versions: ${SDF_VERSIONS}" + ) + endif() + + target_link_libraries(pinocchio_parsers PUBLIC pinocchio_sdformat) target_compile_definitions( pinocchio_parsers PUBLIC PINOCCHIO_WITH_SDFORMAT ) + endif() + target_link_libraries( pinocchio_parsers PUBLIC pinocchio_default Boost::filesystem ) + if(BUILD_WITH_COLLISION_SUPPORT) + target_link_libraries(pinocchio_parsers PUBLIC pinocchio_collision) + endif() + jrl_target_set_default_compile_options(pinocchio_parsers PRIVATE) jrl_target_enforce_msvc_conformance(pinocchio_parsers PRIVATE) jrl_target_generate_config_header(pinocchio_parsers INTERFACE FILENAME pinocchio/parsers/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_parsers) diff --git a/unittest/contact-dynamics-derivatives.cpp b/unittest/contact-dynamics-derivatives.cpp index a2743634ee..3bc484e4fa 100644 --- a/unittest/contact-dynamics-derivatives.cpp +++ b/unittest/contact-dynamics-derivatives.cpp @@ -24,6 +24,8 @@ #ifdef PINOCCHIO_WITH_SDFORMAT #include "pinocchio/parsers/sdf.hpp" + #include "pinocchio/parsers/srdf.hpp" + #endif // PINOCCHIO_WITH_SDFORMAT From fbc8476462e907a0302967ed8ec7c3649f3170f9 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Mon, 20 Jul 2026 19:00:17 +0200 Subject: [PATCH 08/32] review: remove example-robot-data submodule and reorganize uts --- .gitmodules | 3 - models/example-robot-data | 1 - unittest/CMakeLists.txt | 260 +------------- unittest/algorithm/CMakeLists.txt | 1 - unittest/algorithm/utils/CMakeLists.txt | 2 - unittest/casadi/CMakeLists.txt | 32 -- unittest/cpp/CMakeLists.txt | 329 ++++++++++++++++++ unittest/{ => cpp}/aba-derivatives.cpp | 0 unittest/{ => cpp}/aba.cpp | 0 unittest/{ => cpp}/admm-solver.cpp | 0 unittest/{ => cpp}/algo-check.cpp | 0 .../algorithm-utils-force.cpp} | 0 .../algorithm-utils-motion.cpp} | 0 unittest/{ => cpp}/all-joints.cpp | 0 unittest/{ => cpp}/alloca.cpp | 0 unittest/{ => cpp}/block-diagonal-matrix.cpp | 0 unittest/{ => cpp}/box-set.cpp | 0 unittest/{ => cpp}/broadphase.cpp | 0 .../{ => cpp}/cartesian-product-liegroups.cpp | 0 .../casadi-aba-derivatives.cpp} | 0 .../{casadi/aba.cpp => cpp/casadi-aba.cpp} | 0 .../casadi-algorithms.cpp} | 0 .../basic.cpp => cpp/casadi-basic.cpp} | 0 ...asadi-constraint-dynamics-derivatives.cpp} | 0 .../casadi-constraint-dynamics.cpp} | 0 .../explog.cpp => cpp/casadi-explog.cpp} | 0 .../casadi-integrate-derivatives.cpp} | 0 .../joints.cpp => cpp/casadi-joints.cpp} | 0 .../casadi-rnea-derivatives.cpp} | 0 .../spatial.cpp => cpp/casadi-spatial.cpp} | 0 unittest/{casadi => cpp}/casadi-utils.hpp | 0 .../{ => cpp}/center-of-mass-derivatives.cpp | 0 unittest/{ => cpp}/centroidal-derivatives.cpp | 0 unittest/{ => cpp}/centroidal.cpp | 0 unittest/{ => cpp}/cholesky.cpp | 0 unittest/{ => cpp}/classic-acceleration.cpp | 0 unittest/{ => cpp}/closed-loop-dynamics.cpp | 0 unittest/{ => cpp}/com.cpp | 0 unittest/{ => cpp}/compute-all-terms.cpp | 0 .../constrained-dynamics-derivatives.cpp | 0 unittest/{ => cpp}/constrained-dynamics.cpp | 0 unittest/{ => cpp}/constraint-cholesky.cpp | 0 unittest/{ => cpp}/constraint-jacobian.cpp | 0 unittest/{ => cpp}/constraint-variants.cpp | 0 .../constraints/init_constraints.hpp | 0 .../constraints/jacobians-checker.hpp | 0 .../contact-dynamics-derivatives.cpp | 0 unittest/{ => cpp}/contact-dynamics.cpp | 0 .../{ => cpp}/contact-inverse-dynamics.cpp | 0 unittest/{ => cpp}/contact-models.cpp | 0 unittest/{ => cpp}/copy.cpp | 0 unittest/{ => cpp}/coulomb-friction-cone.cpp | 0 .../cppad-algorithms.cpp} | 0 .../{cppad/basic.cpp => cpp/cppad-basic.cpp} | 0 .../cppad-derivatives.cpp} | 0 .../cppad-joint-configurations.cpp} | 0 .../joints.cpp => cpp/cppad-joints.cpp} | 0 .../spatial.cpp => cpp/cppad-spatial.cpp} | 0 .../cppadcg-algorithms.cpp} | 0 .../basic.cpp => cpp/cppadcg-basic.cpp} | 0 .../cppadcg-contact-dynamics.cpp} | 0 .../cppadcg-joint-configurations.cpp} | 0 unittest/{ => cpp}/crba.cpp | 0 unittest/{ => cpp}/csv.cpp | 0 unittest/{ => cpp}/data.cpp | 0 unittest/{ => cpp}/delassus-operations.cpp | 0 .../{ => cpp}/delassus-operator-dense.cpp | 0 .../delassus-operator-preconditioned.cpp | 0 .../delassus-operator-rigid-body.cpp | 0 unittest/{ => cpp}/delassus.cpp | 0 unittest/{ => cpp}/double-entry-container.cpp | 0 unittest/{ => cpp}/dynamic-allocations.cpp | 0 unittest/{ => cpp}/eigen-basic-op.cpp | 0 unittest/{ => cpp}/eigen-storage.cpp | 0 unittest/{ => cpp}/eigen-tensor.cpp | 0 unittest/{ => cpp}/eigenvalues.cpp | 0 unittest/{ => cpp}/energy.cpp | 0 unittest/{ => cpp}/explog.cpp | 0 unittest/{ => cpp}/finite-differences.cpp | 0 .../{ => cpp}/frame-anchor-constraint.cpp | 0 unittest/{ => cpp}/frames-derivatives.cpp | 0 unittest/{ => cpp}/frames.cpp | 0 unittest/{ => cpp}/full-space-cone.cpp | 0 unittest/{ => cpp}/fusion.cpp | 0 unittest/{ => cpp}/geometry-algorithms.cpp | 0 unittest/{ => cpp}/geometry-model.cpp | 0 unittest/{ => cpp}/geometry-object.cpp | 0 .../gram-schmidt-orthonormalisation.cpp | 0 .../impulse-dynamics-derivatives.cpp | 0 unittest/{ => cpp}/impulse-dynamics.cpp | 0 unittest/{ => cpp}/joint-composite.cpp | 0 unittest/{ => cpp}/joint-configurations.cpp | 0 unittest/{ => cpp}/joint-ellipsoid.cpp | 0 unittest/{ => cpp}/joint-free-flyer.cpp | 0 .../{ => cpp}/joint-friction-constraint.cpp | 0 unittest/{ => cpp}/joint-generic.cpp | 0 unittest/{ => cpp}/joint-helical.cpp | 6 +- unittest/{ => cpp}/joint-jacobian.cpp | 0 unittest/{ => cpp}/joint-limit-constraint.cpp | 0 unittest/{ => cpp}/joint-mimic.cpp | 0 unittest/{ => cpp}/joint-motion-subspace.cpp | 0 unittest/{ => cpp}/joint-planar.cpp | 0 unittest/{ => cpp}/joint-prismatic.cpp | 8 +- unittest/{ => cpp}/joint-revolute.cpp | 28 +- unittest/{ => cpp}/joint-spherical.cpp | 15 +- unittest/{ => cpp}/joint-translation.cpp | 0 unittest/{ => cpp}/joint-universal.cpp | 0 unittest/{ => cpp}/joint-visitors.cpp | 0 unittest/{ => cpp}/kinematics-derivatives.cpp | 0 unittest/{ => cpp}/kinematics.cpp | 0 unittest/{ => cpp}/lanczos-decomposition.cpp | 0 unittest/{ => cpp}/liegroups.cpp | 0 unittest/{ => cpp}/loop-constrained-aba.cpp | 0 unittest/{ => cpp}/macros.cpp | 0 unittest/{ => cpp}/matrix-block-element.cpp | 0 unittest/{ => cpp}/matrix-inverse.cpp | 0 unittest/{ => cpp}/matrix-product.cpp | 0 unittest/{ => cpp}/matrix-stack.cpp | 0 unittest/{ => cpp}/matrix.cpp | 0 unittest/{ => cpp}/mjcf.cpp | 0 .../model-configuration-converter.cpp | 0 unittest/{ => cpp}/model-graph.cpp | 0 unittest/{ => cpp}/model.cpp | 0 unittest/{ => cpp}/multiprecision-mpfr.cpp | 0 unittest/{ => cpp}/multiprecision.cpp | 0 unittest/{ => cpp}/openmp-exception.cpp | 0 .../orthant-cone-jordan-operation.cpp | 0 unittest/{ => cpp}/orthant-cone.cpp | 0 unittest/{ => cpp}/parallel-aba.cpp | 0 unittest/{ => cpp}/parallel-geometry.cpp | 0 unittest/{ => cpp}/parallel-rnea.cpp | 0 unittest/{ => cpp}/pgs-solver.cpp | 0 .../{ => cpp}/point-anchor-constraint.cpp | 0 .../{ => cpp}/point-contact-constraint.cpp | 0 unittest/{ => cpp}/preconditioner.cpp | 0 unittest/{ => cpp}/promote-static-eval.cpp | 0 unittest/{ => cpp}/promote-static-op.cpp | 0 unittest/{ => cpp}/pv-solver.cpp | 0 unittest/{ => cpp}/python_parser.cpp | 0 unittest/{ => cpp}/quaternion.cpp | 0 unittest/{ => cpp}/reachable-workspace.cpp | 0 unittest/{ => cpp}/reference.cpp | 0 unittest/{ => cpp}/regressor.cpp | 0 .../{ => cpp}/rigid-constraint-conversion.cpp | 0 unittest/{ => cpp}/rnea-derivatives.cpp | 0 .../rnea-second-order-derivatives.cpp | 0 unittest/{ => cpp}/rnea.cpp | 0 unittest/{ => cpp}/rotation.cpp | 0 unittest/{ => cpp}/rpy.cpp | 0 unittest/{ => cpp}/sample-models.cpp | 0 unittest/{ => cpp}/sdf.cpp | 0 .../second-order-cone-jordan-operation.cpp | 0 .../{ => cpp}/serialization-algorithm.cpp | 0 .../{ => cpp}/serialization-constraints.cpp | 0 unittest/{ => cpp}/serialization-math.cpp | 0 .../serialization-multibody-joint.cpp | 0 .../{ => cpp}/serialization-multibody.cpp | 0 unittest/{ => cpp}/serialization.cpp | 0 unittest/{ => cpp}/serialization.hpp | 0 unittest/{ => cpp}/sincos.cpp | 0 unittest/{ => cpp}/size-in-bytes.cpp | 0 unittest/{ => cpp}/spatial.cpp | 0 unittest/{ => cpp}/srdf.cpp | 0 unittest/{ => cpp}/symmetric.cpp | 0 unittest/{ => cpp}/tree-broadphase.cpp | 0 unittest/{ => cpp}/tridiagonal-matrix.cpp | 0 unittest/{ => cpp}/urdf.cpp | 0 unittest/{ => cpp}/utils.hpp | 0 unittest/{ => cpp}/utils/macros.hpp | 0 unittest/{ => cpp}/utils/model-generator.hpp | 0 unittest/{ => cpp}/value.cpp | 0 unittest/{ => cpp}/vector.cpp | 0 unittest/{ => cpp}/version.cpp | 0 unittest/{ => cpp}/visitor.cpp | 0 unittest/{ => cpp}/visualizer.cpp | 0 unittest/{ => cpp}/zero-cone.cpp | 0 unittest/cppad/CMakeLists.txt | 26 -- unittest/cppadcg/CMakeLists.txt | 28 -- 178 files changed, 344 insertions(+), 395 deletions(-) delete mode 160000 models/example-robot-data delete mode 100644 unittest/algorithm/CMakeLists.txt delete mode 100644 unittest/algorithm/utils/CMakeLists.txt delete mode 100644 unittest/casadi/CMakeLists.txt create mode 100644 unittest/cpp/CMakeLists.txt rename unittest/{ => cpp}/aba-derivatives.cpp (100%) rename unittest/{ => cpp}/aba.cpp (100%) rename unittest/{ => cpp}/admm-solver.cpp (100%) rename unittest/{ => cpp}/algo-check.cpp (100%) rename unittest/{algorithm/utils/force.cpp => cpp/algorithm-utils-force.cpp} (100%) rename unittest/{algorithm/utils/motion.cpp => cpp/algorithm-utils-motion.cpp} (100%) rename unittest/{ => cpp}/all-joints.cpp (100%) rename unittest/{ => cpp}/alloca.cpp (100%) rename unittest/{ => cpp}/block-diagonal-matrix.cpp (100%) rename unittest/{ => cpp}/box-set.cpp (100%) rename unittest/{ => cpp}/broadphase.cpp (100%) rename unittest/{ => cpp}/cartesian-product-liegroups.cpp (100%) rename unittest/{casadi/aba-derivatives.cpp => cpp/casadi-aba-derivatives.cpp} (100%) rename unittest/{casadi/aba.cpp => cpp/casadi-aba.cpp} (100%) rename unittest/{casadi/algorithms.cpp => cpp/casadi-algorithms.cpp} (100%) rename unittest/{casadi/basic.cpp => cpp/casadi-basic.cpp} (100%) rename unittest/{casadi/constraint-dynamics-derivatives.cpp => cpp/casadi-constraint-dynamics-derivatives.cpp} (100%) rename unittest/{casadi/constraint-dynamics.cpp => cpp/casadi-constraint-dynamics.cpp} (100%) rename unittest/{casadi/explog.cpp => cpp/casadi-explog.cpp} (100%) rename unittest/{casadi/integrate-derivatives.cpp => cpp/casadi-integrate-derivatives.cpp} (100%) rename unittest/{casadi/joints.cpp => cpp/casadi-joints.cpp} (100%) rename unittest/{casadi/rnea-derivatives.cpp => cpp/casadi-rnea-derivatives.cpp} (100%) rename unittest/{casadi/spatial.cpp => cpp/casadi-spatial.cpp} (100%) rename unittest/{casadi => cpp}/casadi-utils.hpp (100%) rename unittest/{ => cpp}/center-of-mass-derivatives.cpp (100%) rename unittest/{ => cpp}/centroidal-derivatives.cpp (100%) rename unittest/{ => cpp}/centroidal.cpp (100%) rename unittest/{ => cpp}/cholesky.cpp (100%) rename unittest/{ => cpp}/classic-acceleration.cpp (100%) rename unittest/{ => cpp}/closed-loop-dynamics.cpp (100%) rename unittest/{ => cpp}/com.cpp (100%) rename unittest/{ => cpp}/compute-all-terms.cpp (100%) rename unittest/{ => cpp}/constrained-dynamics-derivatives.cpp (100%) rename unittest/{ => cpp}/constrained-dynamics.cpp (100%) rename unittest/{ => cpp}/constraint-cholesky.cpp (100%) rename unittest/{ => cpp}/constraint-jacobian.cpp (100%) rename unittest/{ => cpp}/constraint-variants.cpp (100%) rename unittest/{ => cpp}/constraints/init_constraints.hpp (100%) rename unittest/{ => cpp}/constraints/jacobians-checker.hpp (100%) rename unittest/{ => cpp}/contact-dynamics-derivatives.cpp (100%) rename unittest/{ => cpp}/contact-dynamics.cpp (100%) rename unittest/{ => cpp}/contact-inverse-dynamics.cpp (100%) rename unittest/{ => cpp}/contact-models.cpp (100%) rename unittest/{ => cpp}/copy.cpp (100%) rename unittest/{ => cpp}/coulomb-friction-cone.cpp (100%) rename unittest/{cppad/algorithms.cpp => cpp/cppad-algorithms.cpp} (100%) rename unittest/{cppad/basic.cpp => cpp/cppad-basic.cpp} (100%) rename unittest/{cppad/derivatives.cpp => cpp/cppad-derivatives.cpp} (100%) rename unittest/{cppad/joint-configurations.cpp => cpp/cppad-joint-configurations.cpp} (100%) rename unittest/{cppad/joints.cpp => cpp/cppad-joints.cpp} (100%) rename unittest/{cppad/spatial.cpp => cpp/cppad-spatial.cpp} (100%) rename unittest/{cppadcg/algorithms.cpp => cpp/cppadcg-algorithms.cpp} (100%) rename unittest/{cppadcg/basic.cpp => cpp/cppadcg-basic.cpp} (100%) rename unittest/{cppadcg/contact-dynamics.cpp => cpp/cppadcg-contact-dynamics.cpp} (100%) rename unittest/{cppadcg/joint-configurations.cpp => cpp/cppadcg-joint-configurations.cpp} (100%) rename unittest/{ => cpp}/crba.cpp (100%) rename unittest/{ => cpp}/csv.cpp (100%) rename unittest/{ => cpp}/data.cpp (100%) rename unittest/{ => cpp}/delassus-operations.cpp (100%) rename unittest/{ => cpp}/delassus-operator-dense.cpp (100%) rename unittest/{ => cpp}/delassus-operator-preconditioned.cpp (100%) rename unittest/{ => cpp}/delassus-operator-rigid-body.cpp (100%) rename unittest/{ => cpp}/delassus.cpp (100%) rename unittest/{ => cpp}/double-entry-container.cpp (100%) rename unittest/{ => cpp}/dynamic-allocations.cpp (100%) rename unittest/{ => cpp}/eigen-basic-op.cpp (100%) rename unittest/{ => cpp}/eigen-storage.cpp (100%) rename unittest/{ => cpp}/eigen-tensor.cpp (100%) rename unittest/{ => cpp}/eigenvalues.cpp (100%) rename unittest/{ => cpp}/energy.cpp (100%) rename unittest/{ => cpp}/explog.cpp (100%) rename unittest/{ => cpp}/finite-differences.cpp (100%) rename unittest/{ => cpp}/frame-anchor-constraint.cpp (100%) rename unittest/{ => cpp}/frames-derivatives.cpp (100%) rename unittest/{ => cpp}/frames.cpp (100%) rename unittest/{ => cpp}/full-space-cone.cpp (100%) rename unittest/{ => cpp}/fusion.cpp (100%) rename unittest/{ => cpp}/geometry-algorithms.cpp (100%) rename unittest/{ => cpp}/geometry-model.cpp (100%) rename unittest/{ => cpp}/geometry-object.cpp (100%) rename unittest/{ => cpp}/gram-schmidt-orthonormalisation.cpp (100%) rename unittest/{ => cpp}/impulse-dynamics-derivatives.cpp (100%) rename unittest/{ => cpp}/impulse-dynamics.cpp (100%) rename unittest/{ => cpp}/joint-composite.cpp (100%) rename unittest/{ => cpp}/joint-configurations.cpp (100%) rename unittest/{ => cpp}/joint-ellipsoid.cpp (100%) rename unittest/{ => cpp}/joint-free-flyer.cpp (100%) rename unittest/{ => cpp}/joint-friction-constraint.cpp (100%) rename unittest/{ => cpp}/joint-generic.cpp (100%) rename unittest/{ => cpp}/joint-helical.cpp (98%) rename unittest/{ => cpp}/joint-jacobian.cpp (100%) rename unittest/{ => cpp}/joint-limit-constraint.cpp (100%) rename unittest/{ => cpp}/joint-mimic.cpp (100%) rename unittest/{ => cpp}/joint-motion-subspace.cpp (100%) rename unittest/{ => cpp}/joint-planar.cpp (100%) rename unittest/{ => cpp}/joint-prismatic.cpp (97%) rename unittest/{ => cpp}/joint-revolute.cpp (96%) rename unittest/{ => cpp}/joint-spherical.cpp (97%) rename unittest/{ => cpp}/joint-translation.cpp (100%) rename unittest/{ => cpp}/joint-universal.cpp (100%) rename unittest/{ => cpp}/joint-visitors.cpp (100%) rename unittest/{ => cpp}/kinematics-derivatives.cpp (100%) rename unittest/{ => cpp}/kinematics.cpp (100%) rename unittest/{ => cpp}/lanczos-decomposition.cpp (100%) rename unittest/{ => cpp}/liegroups.cpp (100%) rename unittest/{ => cpp}/loop-constrained-aba.cpp (100%) rename unittest/{ => cpp}/macros.cpp (100%) rename unittest/{ => cpp}/matrix-block-element.cpp (100%) rename unittest/{ => cpp}/matrix-inverse.cpp (100%) rename unittest/{ => cpp}/matrix-product.cpp (100%) rename unittest/{ => cpp}/matrix-stack.cpp (100%) rename unittest/{ => cpp}/matrix.cpp (100%) rename unittest/{ => cpp}/mjcf.cpp (100%) rename unittest/{ => cpp}/model-configuration-converter.cpp (100%) rename unittest/{ => cpp}/model-graph.cpp (100%) rename unittest/{ => cpp}/model.cpp (100%) rename unittest/{ => cpp}/multiprecision-mpfr.cpp (100%) rename unittest/{ => cpp}/multiprecision.cpp (100%) rename unittest/{ => cpp}/openmp-exception.cpp (100%) rename unittest/{ => cpp}/orthant-cone-jordan-operation.cpp (100%) rename unittest/{ => cpp}/orthant-cone.cpp (100%) rename unittest/{ => cpp}/parallel-aba.cpp (100%) rename unittest/{ => cpp}/parallel-geometry.cpp (100%) rename unittest/{ => cpp}/parallel-rnea.cpp (100%) rename unittest/{ => cpp}/pgs-solver.cpp (100%) rename unittest/{ => cpp}/point-anchor-constraint.cpp (100%) rename unittest/{ => cpp}/point-contact-constraint.cpp (100%) rename unittest/{ => cpp}/preconditioner.cpp (100%) rename unittest/{ => cpp}/promote-static-eval.cpp (100%) rename unittest/{ => cpp}/promote-static-op.cpp (100%) rename unittest/{ => cpp}/pv-solver.cpp (100%) rename unittest/{ => cpp}/python_parser.cpp (100%) rename unittest/{ => cpp}/quaternion.cpp (100%) rename unittest/{ => cpp}/reachable-workspace.cpp (100%) rename unittest/{ => cpp}/reference.cpp (100%) rename unittest/{ => cpp}/regressor.cpp (100%) rename unittest/{ => cpp}/rigid-constraint-conversion.cpp (100%) rename unittest/{ => cpp}/rnea-derivatives.cpp (100%) rename unittest/{ => cpp}/rnea-second-order-derivatives.cpp (100%) rename unittest/{ => cpp}/rnea.cpp (100%) rename unittest/{ => cpp}/rotation.cpp (100%) rename unittest/{ => cpp}/rpy.cpp (100%) rename unittest/{ => cpp}/sample-models.cpp (100%) rename unittest/{ => cpp}/sdf.cpp (100%) rename unittest/{ => cpp}/second-order-cone-jordan-operation.cpp (100%) rename unittest/{ => cpp}/serialization-algorithm.cpp (100%) rename unittest/{ => cpp}/serialization-constraints.cpp (100%) rename unittest/{ => cpp}/serialization-math.cpp (100%) rename unittest/{ => cpp}/serialization-multibody-joint.cpp (100%) rename unittest/{ => cpp}/serialization-multibody.cpp (100%) rename unittest/{ => cpp}/serialization.cpp (100%) rename unittest/{ => cpp}/serialization.hpp (100%) rename unittest/{ => cpp}/sincos.cpp (100%) rename unittest/{ => cpp}/size-in-bytes.cpp (100%) rename unittest/{ => cpp}/spatial.cpp (100%) rename unittest/{ => cpp}/srdf.cpp (100%) rename unittest/{ => cpp}/symmetric.cpp (100%) rename unittest/{ => cpp}/tree-broadphase.cpp (100%) rename unittest/{ => cpp}/tridiagonal-matrix.cpp (100%) rename unittest/{ => cpp}/urdf.cpp (100%) rename unittest/{ => cpp}/utils.hpp (100%) rename unittest/{ => cpp}/utils/macros.hpp (100%) rename unittest/{ => cpp}/utils/model-generator.hpp (100%) rename unittest/{ => cpp}/value.cpp (100%) rename unittest/{ => cpp}/vector.cpp (100%) rename unittest/{ => cpp}/version.cpp (100%) rename unittest/{ => cpp}/visitor.cpp (100%) rename unittest/{ => cpp}/visualizer.cpp (100%) rename unittest/{ => cpp}/zero-cone.cpp (100%) delete mode 100644 unittest/cppad/CMakeLists.txt delete mode 100644 unittest/cppadcg/CMakeLists.txt diff --git a/.gitmodules b/.gitmodules index 188396078e..e69de29bb2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "models/example-robot-data"] - path = models/example-robot-data - url = https://github.com/Gepetto/example-robot-data.git diff --git a/models/example-robot-data b/models/example-robot-data deleted file mode 160000 index cdd6a3f938..0000000000 --- a/models/example-robot-data +++ /dev/null @@ -1 +0,0 @@ -Subproject commit cdd6a3f938778cb6aed07a12a179125b700b1d04 diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index 24265d4c1d..5c85e329a2 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -41,263 +41,9 @@ function(add_pinocchio_unit_test name) endfunction() # CPP tests -# Header only -add_pinocchio_unit_test(alloca) -add_pinocchio_unit_test(double-entry-container) -add_pinocchio_unit_test(macros) -add_pinocchio_unit_test(reference) -add_pinocchio_unit_test(eigen-storage) -add_pinocchio_unit_test(matrix-stack) -add_pinocchio_unit_test(size-in-bytes) - -# Math components -add_pinocchio_unit_test(eigen-basic-op) -add_pinocchio_unit_test(matrix) -add_pinocchio_unit_test(block-diagonal-matrix) -add_pinocchio_unit_test(matrix-block-element) -add_pinocchio_unit_test(eigen-tensor) -add_pinocchio_unit_test(sincos) -add_pinocchio_unit_test(quaternion) -add_pinocchio_unit_test(rpy) -add_pinocchio_unit_test(rotation) -add_pinocchio_unit_test(vector) -add_pinocchio_unit_test(matrix-inverse) -add_pinocchio_unit_test(matrix-product) -add_pinocchio_unit_test(eigenvalues) -add_pinocchio_unit_test(tridiagonal-matrix) -add_pinocchio_unit_test(lanczos-decomposition) -add_pinocchio_unit_test(gram-schmidt-orthonormalisation) -add_pinocchio_unit_test(promote-static-eval) - -# Derivatives algo -add_pinocchio_unit_test(kinematics-derivatives) -add_pinocchio_unit_test(frames-derivatives) -add_pinocchio_unit_test(rnea-derivatives) -add_pinocchio_unit_test(aba-derivatives) -add_pinocchio_unit_test(centroidal-derivatives) -add_pinocchio_unit_test(center-of-mass-derivatives) -add_pinocchio_unit_test(constrained-dynamics-derivatives) - -# if(BUILD_WITH_SDF_SUPPORT) -# add_pinocchio_unit_test(contact-dynamics-derivatives PARSERS) -# else() -add_pinocchio_unit_test(contact-dynamics-derivatives) -# endif() -add_pinocchio_unit_test(impulse-dynamics-derivatives) -add_pinocchio_unit_test(rnea-second-order-derivatives) - -# # Pinocchio features -add_pinocchio_unit_test(spatial) -add_pinocchio_unit_test(symmetric) -add_pinocchio_unit_test(aba) -# TODO handle paralle -#add_pinocchio_parallel_unit_test(parallel-aba) -add_pinocchio_unit_test(rnea) -# TODO handle paralle -#add_pinocchio_parallel_unit_test(parallel-rnea) -add_pinocchio_unit_test(crba) -add_pinocchio_unit_test(centroidal) -add_pinocchio_unit_test(com) -add_pinocchio_unit_test(joint-jacobian) -add_pinocchio_unit_test(cholesky) -add_pinocchio_unit_test(constrained-dynamics) -add_pinocchio_unit_test(constraint-variants) -add_pinocchio_unit_test(contact-models) -add_pinocchio_unit_test(point-anchor-constraint) -add_pinocchio_unit_test(point-contact-constraint) -add_pinocchio_unit_test(frame-anchor-constraint) -add_pinocchio_unit_test(rigid-constraint-conversion) -add_pinocchio_unit_test(joint-friction-constraint) -add_pinocchio_unit_test(joint-limit-constraint) -add_pinocchio_unit_test(constraint-jacobian) -add_pinocchio_unit_test(contact-dynamics) -add_pinocchio_unit_test(contact-inverse-dynamics) -add_pinocchio_unit_test(closed-loop-dynamics) -add_pinocchio_unit_test(loop-constrained-aba) -add_pinocchio_unit_test(impulse-dynamics) -# TODO handle collision -#add_pinocchio_unit_test(sample-models COLLISION_OPTIONAL) -add_pinocchio_unit_test(kinematics) -add_pinocchio_unit_test(delassus) -add_pinocchio_unit_test(delassus-operations) -add_pinocchio_unit_test(delassus-operator-dense) -# delassus-operator-preconditioned is broken and unused -#add_pinocchio_unit_test(delassus-operator-preconditioned) -add_pinocchio_unit_test(delassus-operator-rigid-body) -add_pinocchio_unit_test(preconditioner) -add_pinocchio_unit_test(pv-solver) - -# TODO handle parallel ut -# add_pinocchio_parallel_unit_test(openmp-exception) - -if(BUILD_WITH_URDF_SUPPORT) - add_pinocchio_unit_test( - urdf - ) - - add_pinocchio_unit_test(value) - if(BUILD_WITH_COLLISION_SUPPORT) - add_pinocchio_unit_test(geometry-object) - add_pinocchio_unit_test( - geometry-model - ) - add_pinocchio_unit_test( - geometry-algorithms - ) - add_pinocchio_unit_test( - broadphase - ) - add_pinocchio_unit_test( - tree-broadphase - ) - # TODO handle parallel - #add_pinocchio_parallel_unit_test(parallel-geometry) - add_pinocchio_unit_test( - srdf - ) - endif() -endif() - -if(BUILD_WITH_SDF_SUPPORT) - add_pinocchio_unit_test(sdf) -endif() -# TODO handle parsers ut -# add_pinocchio_unit_test( -# mjcf -# PARSERS -# COLLISION_OPTIONAL -# ) - -if(BUILD_WITH_EXTRA_SUPPORT) - add_pinocchio_unit_test( - reachable-workspace - PARSERS - EXTRA - COLLISION_OPTIONAL - ) -endif() - -if(PINOCCHIO_BUILD_VISUALIZERS) - add_pinocchio_unit_test(visualizer VISUALIZERS) -endif() - -if(BUILD_WITH_PYTHON_PARSER_SUPPORT) - add_pinocchio_unit_test(python_parser PYTHON_PARSER) -endif() +add_subdirectory(cpp) +# Python tests if(BUILD_PYTHON_INTERFACE) add_subdirectory(python) -endif() - -# Test over the joints -add_pinocchio_unit_test(all-joints) -add_pinocchio_unit_test(joint-revolute) -add_pinocchio_unit_test(joint-prismatic) -add_pinocchio_unit_test(joint-planar) -add_pinocchio_unit_test(joint-free-flyer) -add_pinocchio_unit_test(joint-spherical) -add_pinocchio_unit_test(joint-ellipsoid) -add_pinocchio_unit_test(joint-translation) -add_pinocchio_unit_test(joint-generic) -add_pinocchio_unit_test(joint-composite) -add_pinocchio_unit_test(joint-mimic) -add_pinocchio_unit_test(joint-helical) -add_pinocchio_unit_test(joint-universal) -add_pinocchio_unit_test(joint-visitors) - -# Main corpus -# TODO : Collision check -#add_pinocchio_unit_test(model) -add_pinocchio_unit_test(data) -add_pinocchio_unit_test(joint-motion-subspace) -add_pinocchio_unit_test(compute-all-terms) -add_pinocchio_unit_test(energy) -add_pinocchio_unit_test(frames) -if(NOT MSVC AND NOT MSVC_VERSION) - add_pinocchio_unit_test(joint-configurations) -endif() -add_pinocchio_unit_test(explog) -add_pinocchio_unit_test(finite-differences) -add_pinocchio_unit_test(visitor) -add_pinocchio_unit_test(algo-check) -# TODO : parsers -#add_pinocchio_unit_test(model-graph) -#add_pinocchio_unit_test(model-configuration-converter) - -# Warning ignore with pragma doesn't work for a part of this test, so we ignore two warning globally -add_pinocchio_unit_test(liegroups) -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - target_compile_options( - pinocchio-test-cpp-liegroups - PRIVATE -Wno-maybe-uninitialized -Wuse-after-free=0 - ) -endif() - -add_pinocchio_unit_test(cartesian-product-liegroups) -add_pinocchio_unit_test(regressor) -add_pinocchio_unit_test(version) -add_pinocchio_unit_test(copy) -add_pinocchio_unit_test(constraint-cholesky) -add_pinocchio_unit_test(classic-acceleration) -add_pinocchio_unit_test(box-set) -add_pinocchio_unit_test(full-space-cone) -add_pinocchio_unit_test(zero-cone) -add_pinocchio_unit_test(orthant-cone) -add_pinocchio_unit_test(coulomb-friction-cone) - -# Solvers -add_pinocchio_unit_test(pgs-solver) -add_pinocchio_unit_test(admm-solver) - -# Symmetric cones jordan operations -add_pinocchio_unit_test(second-order-cone-jordan-operation) -add_pinocchio_unit_test(orthant-cone-jordan-operation) - -# Serialization -add_pinocchio_unit_test(serialization) -add_pinocchio_unit_test(serialization-math) -add_pinocchio_unit_test(serialization-multibody) -add_pinocchio_unit_test(serialization-multibody-joint) -add_pinocchio_unit_test(serialization-algorithm) -add_pinocchio_unit_test(serialization-constraints) -add_pinocchio_unit_test(csv) - -add_subdirectory(algorithm) - -# Multiprecision arithmetic -if(BUILD_ADVANCED_TESTING) - add_pinocchio_unit_test(multiprecision) - if(PINOCCHIO_BUILD_MPFR_TESTING) - add_pinocchio_unit_test(multiprecision-mpfr PACKAGES mpfr gmp) - endif() -endif() - -if(BUILD_WITH_AUTODIFF_SUPPORT) - add_subdirectory(cppad) -endif() - -if(BUILD_WITH_CODEGEN_SUPPORT) - add_subdirectory(cppadcg) -endif() - -if(BUILD_WITH_CASADI_SUPPORT) - add_subdirectory(casadi) -endif() - -if(BUILD_WITH_RTSAN) - add_pinocchio_unit_test(dynamic-allocations) - #TODO remove following line when BUILD_WITH_RTSAN is handled - #get_cpp_test_name(dynamic-allocations ${CMAKE_CURRENT_SOURCE_DIR} test_name) - target_compile_options(${test_name} PRIVATE -fsanitize=realtime) - target_link_options(${test_name} PRIVATE -fsanitize=realtime) - # On osx-arm64 mutex are called to initialize some static variables. - # We use a suppression file to make this test pass. - if(APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") - set_tests_properties( - ${test_name} - PROPERTIES - ENVIRONMENT_MODIFICATION - "RTSAN_OPTIONS=path_list_append:suppressions=${CMAKE_CURRENT_SOURCE_DIR}/dynamic-allocations-osx-arm64.supp" - ) - endif() -endif() +endif() \ No newline at end of file diff --git a/unittest/algorithm/CMakeLists.txt b/unittest/algorithm/CMakeLists.txt deleted file mode 100644 index 512d2b1553..0000000000 --- a/unittest/algorithm/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory(utils) diff --git a/unittest/algorithm/utils/CMakeLists.txt b/unittest/algorithm/utils/CMakeLists.txt deleted file mode 100644 index 220bc47f37..0000000000 --- a/unittest/algorithm/utils/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -add_pinocchio_unit_test(motion) -add_pinocchio_unit_test(force) diff --git a/unittest/casadi/CMakeLists.txt b/unittest/casadi/CMakeLists.txt deleted file mode 100644 index af768cb502..0000000000 --- a/unittest/casadi/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (c) 2021 INRIA -# - -macro(ADD_CASADI_UNIT_TEST name) - add_pinocchio_unit_test(${name} PACKAGES casadi::casadi) - get_cpp_test_name(${name} ${CMAKE_CURRENT_SOURCE_DIR} TEST_NAME) - set_tests_properties(${TEST_NAME} PROPERTIES TIMEOUT 3000) - add_dependencies(${PROJECT_NAME}-test-casadi ${TEST_NAME}) -endmacro() - -if(BUILD_WITH_CASADI_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) - add_custom_target(${PROJECT_NAME}-test-casadi) - set_target_properties( - ${PROJECT_NAME}-test-casadi - PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True - ) - - add_casadi_unit_test(basic) - add_casadi_unit_test(spatial) - add_casadi_unit_test(explog) - add_casadi_unit_test(joints) - add_casadi_unit_test(algorithms) - if(BUILD_ADVANCED_TESTING) - add_casadi_unit_test(aba) - add_casadi_unit_test(constraint-dynamics-derivatives) - add_casadi_unit_test(constraint-dynamics) - add_casadi_unit_test(aba-derivatives) - endif() - add_casadi_unit_test(integrate-derivatives) - add_casadi_unit_test(rnea-derivatives) -endif() diff --git a/unittest/cpp/CMakeLists.txt b/unittest/cpp/CMakeLists.txt new file mode 100644 index 0000000000..37fe314d8f --- /dev/null +++ b/unittest/cpp/CMakeLists.txt @@ -0,0 +1,329 @@ +# CPP tests +# Header only +add_pinocchio_unit_test(alloca) +add_pinocchio_unit_test(double-entry-container) +add_pinocchio_unit_test(macros) +add_pinocchio_unit_test(reference) +add_pinocchio_unit_test(eigen-storage) +add_pinocchio_unit_test(matrix-stack) +add_pinocchio_unit_test(size-in-bytes) + +# Math components +add_pinocchio_unit_test(eigen-basic-op) +add_pinocchio_unit_test(matrix) +add_pinocchio_unit_test(block-diagonal-matrix) +add_pinocchio_unit_test(matrix-block-element) +add_pinocchio_unit_test(eigen-tensor) +add_pinocchio_unit_test(sincos) +add_pinocchio_unit_test(quaternion) +add_pinocchio_unit_test(rpy) +add_pinocchio_unit_test(rotation) +add_pinocchio_unit_test(vector) +add_pinocchio_unit_test(matrix-inverse) +add_pinocchio_unit_test(matrix-product) +add_pinocchio_unit_test(eigenvalues) +add_pinocchio_unit_test(tridiagonal-matrix) +add_pinocchio_unit_test(lanczos-decomposition) +add_pinocchio_unit_test(gram-schmidt-orthonormalisation) +add_pinocchio_unit_test(promote-static-eval) + +# Derivatives algo +add_pinocchio_unit_test(kinematics-derivatives) +add_pinocchio_unit_test(frames-derivatives) +add_pinocchio_unit_test(rnea-derivatives) +add_pinocchio_unit_test(aba-derivatives) +add_pinocchio_unit_test(centroidal-derivatives) +add_pinocchio_unit_test(center-of-mass-derivatives) +add_pinocchio_unit_test(constrained-dynamics-derivatives) + +# if(BUILD_WITH_SDF_SUPPORT) +# add_pinocchio_unit_test(contact-dynamics-derivatives PARSERS) +# else() +add_pinocchio_unit_test(contact-dynamics-derivatives) +# endif() +add_pinocchio_unit_test(impulse-dynamics-derivatives) +add_pinocchio_unit_test(rnea-second-order-derivatives) + +# # Pinocchio features +add_pinocchio_unit_test(spatial) +add_pinocchio_unit_test(symmetric) +add_pinocchio_unit_test(aba) +# TODO handle paralle +#add_pinocchio_parallel_unit_test(parallel-aba) +add_pinocchio_unit_test(rnea) +# TODO handle paralle +#add_pinocchio_parallel_unit_test(parallel-rnea) +add_pinocchio_unit_test(crba) +add_pinocchio_unit_test(centroidal) +add_pinocchio_unit_test(com) +add_pinocchio_unit_test(joint-jacobian) +add_pinocchio_unit_test(cholesky) +add_pinocchio_unit_test(constrained-dynamics) +add_pinocchio_unit_test(constraint-variants) +add_pinocchio_unit_test(contact-models) +add_pinocchio_unit_test(point-anchor-constraint) +add_pinocchio_unit_test(point-contact-constraint) +add_pinocchio_unit_test(frame-anchor-constraint) +add_pinocchio_unit_test(rigid-constraint-conversion) +add_pinocchio_unit_test(joint-friction-constraint) +add_pinocchio_unit_test(joint-limit-constraint) +add_pinocchio_unit_test(constraint-jacobian) +add_pinocchio_unit_test(contact-dynamics) +add_pinocchio_unit_test(contact-inverse-dynamics) +add_pinocchio_unit_test(closed-loop-dynamics) +add_pinocchio_unit_test(loop-constrained-aba) +add_pinocchio_unit_test(impulse-dynamics) +# TODO handle collision +#add_pinocchio_unit_test(sample-models COLLISION_OPTIONAL) +add_pinocchio_unit_test(kinematics) +add_pinocchio_unit_test(delassus) +add_pinocchio_unit_test(delassus-operations) +add_pinocchio_unit_test(delassus-operator-dense) +# delassus-operator-preconditioned is broken and unused +#add_pinocchio_unit_test(delassus-operator-preconditioned) +add_pinocchio_unit_test(delassus-operator-rigid-body) +add_pinocchio_unit_test(preconditioner) +add_pinocchio_unit_test(pv-solver) + +# TODO handle parallel ut +# add_pinocchio_parallel_unit_test(openmp-exception) + +if(BUILD_WITH_URDF_SUPPORT) + add_pinocchio_unit_test( + urdf + ) + + add_pinocchio_unit_test(value) + if(BUILD_WITH_COLLISION_SUPPORT) + add_pinocchio_unit_test(geometry-object) + add_pinocchio_unit_test( + geometry-model + ) + add_pinocchio_unit_test( + geometry-algorithms + ) + add_pinocchio_unit_test( + broadphase + ) + add_pinocchio_unit_test( + tree-broadphase + ) + # TODO handle parallel + #add_pinocchio_parallel_unit_test(parallel-geometry) + add_pinocchio_unit_test( + srdf + ) + endif() +endif() + +if(BUILD_WITH_SDF_SUPPORT) + add_pinocchio_unit_test(sdf) +endif() +# TODO handle parsers ut +# add_pinocchio_unit_test( +# mjcf +# PARSERS +# COLLISION_OPTIONAL +# ) + +if(BUILD_WITH_EXTRA_SUPPORT) + add_pinocchio_unit_test( + reachable-workspace + ) +endif() + +if(PINOCCHIO_BUILD_VISUALIZERS) + add_pinocchio_unit_test(visualizer VISUALIZERS) +endif() + +if(BUILD_WITH_PYTHON_PARSER_SUPPORT) + add_pinocchio_unit_test(python_parser PYTHON_PARSER) +endif() + +if(BUILD_PYTHON_INTERFACE) + add_subdirectory(python) +endif() + +# Test over the joints +add_pinocchio_unit_test(all-joints) +add_pinocchio_unit_test(joint-revolute) +add_pinocchio_unit_test(joint-prismatic) +add_pinocchio_unit_test(joint-planar) +add_pinocchio_unit_test(joint-free-flyer) +add_pinocchio_unit_test(joint-spherical) +add_pinocchio_unit_test(joint-ellipsoid) +add_pinocchio_unit_test(joint-translation) +add_pinocchio_unit_test(joint-generic) +add_pinocchio_unit_test(joint-composite) +add_pinocchio_unit_test(joint-mimic) +add_pinocchio_unit_test(joint-helical) +add_pinocchio_unit_test(joint-universal) +add_pinocchio_unit_test(joint-visitors) + +# Main corpus +# TODO : Collision check +#add_pinocchio_unit_test(model) +add_pinocchio_unit_test(data) +add_pinocchio_unit_test(joint-motion-subspace) +add_pinocchio_unit_test(compute-all-terms) +add_pinocchio_unit_test(energy) +add_pinocchio_unit_test(frames) +if(NOT MSVC AND NOT MSVC_VERSION) + add_pinocchio_unit_test(joint-configurations) +endif() +add_pinocchio_unit_test(explog) +add_pinocchio_unit_test(finite-differences) +add_pinocchio_unit_test(visitor) +add_pinocchio_unit_test(algo-check) +# TODO : parsers +#add_pinocchio_unit_test(model-graph) +#add_pinocchio_unit_test(model-configuration-converter) + +# Warning ignore with pragma doesn't work for a part of this test, so we ignore two warning globally +add_pinocchio_unit_test(liegroups) +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options( + pinocchio-test-cpp-liegroups + PRIVATE -Wno-maybe-uninitialized -Wuse-after-free=0 + ) +endif() + +add_pinocchio_unit_test(cartesian-product-liegroups) +add_pinocchio_unit_test(regressor) +add_pinocchio_unit_test(version) +add_pinocchio_unit_test(copy) +add_pinocchio_unit_test(constraint-cholesky) +add_pinocchio_unit_test(classic-acceleration) +add_pinocchio_unit_test(box-set) +add_pinocchio_unit_test(full-space-cone) +add_pinocchio_unit_test(zero-cone) +add_pinocchio_unit_test(orthant-cone) +add_pinocchio_unit_test(coulomb-friction-cone) + +# Solvers +add_pinocchio_unit_test(pgs-solver) +add_pinocchio_unit_test(admm-solver) + +# Symmetric cones jordan operations +add_pinocchio_unit_test(second-order-cone-jordan-operation) +add_pinocchio_unit_test(orthant-cone-jordan-operation) + +# Serialization +add_pinocchio_unit_test(serialization) +add_pinocchio_unit_test(serialization-math) +add_pinocchio_unit_test(serialization-multibody) +add_pinocchio_unit_test(serialization-multibody-joint) +add_pinocchio_unit_test(serialization-algorithm) +add_pinocchio_unit_test(serialization-constraints) +add_pinocchio_unit_test(csv) + +# algorithm +add_pinocchio_unit_test(algorithm-utils-motion) +add_pinocchio_unit_test(algorithm-utils-force) + +# Multiprecision arithmetic +if(BUILD_ADVANCED_TESTING) + add_pinocchio_unit_test(multiprecision) + if(PINOCCHIO_BUILD_MPFR_TESTING) + add_pinocchio_unit_test(multiprecision-mpfr PACKAGES mpfr gmp) + endif() +endif() + +if(BUILD_WITH_AUTODIFF_SUPPORT) + macro(ADD_CPPAD_UNIT_TEST name) + include_directories(SYSTEM ${cppad_INCLUDE_DIR}) + add_pinocchio_unit_test(${name}) + add_dependencies(pinocchio-test-cpp-cppad ${NAME}) + endmacro() + + if(BUILD_WITH_AUTODIFF_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) + add_custom_target(pinocchio-test-cpp-cppad) + set_target_properties(pinocchio-test-cpp-cppad + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True + ) + + add_cppad_unit_test(basic) + add_cppad_unit_test(spatial) + add_cppad_unit_test(joints) + add_cppad_unit_test(algorithms) + add_cppad_unit_test(derivatives) + add_cppad_unit_test(joint-configurations) + endif() +endif() + +if(BUILD_WITH_CODEGEN_SUPPORT) + macro(ADD_CPPADCG_UNIT_TEST name) + include_directories(SYSTEM ${cppad_INCLUDE_DIR}) + include_directories(SYSTEM ${cppadcodegen_INCLUDE_DIR}) + add_pinocchio_unit_test(${name} PACKAGES ${cppad_LIBRARY} ${CMAKE_DL_LIBS}) + add_dependencies(pinocchio-test-cpp-cppadcg ${NAME}) + target_compile_definitions( + ${NAME} + PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" + ) + endmacro() + + if(BUILD_WITH_AUTODIFF_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) + if(BUILD_WITH_CODEGEN_SUPPORT) + add_custom_target(pinocchio-test-cpp-cppadcg) + set_target_properties( + pinocchio-test-cpp-cppadcg + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True + ) + + add_cppadcg_unit_test(basic) + if(BUILD_ADVANCED_TESTING) + add_cppadcg_unit_test(algorithms) + add_cppadcg_unit_test(joint-configurations) + add_cppadcg_unit_test(contact-dynamics) + endif() + endif() + endif() +endif() + +if(BUILD_WITH_CASADI_SUPPORT) + macro(ADD_CASADI_UNIT_TEST name) + add_pinocchio_unit_test(${name} PACKAGES casadi::casadi) + set_tests_properties(${NAME} PROPERTIES TIMEOUT 3000) + add_dependencies(pinocchio-test-casadi ${NAME}) + endmacro() + + if(BUILD_WITH_CASADI_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) + add_custom_target(pinocchio-test-casadi) + set_target_properties( pinocchio-test-casadi + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True + ) + + add_casadi_unit_test(casadi-basic) + add_casadi_unit_test(casadi-spatial) + add_casadi_unit_test(casadi-explog) + add_casadi_unit_test(casadi-joints) + add_casadi_unit_test(casadi-algorithms) + if(BUILD_ADVANCED_TESTING) + add_casadi_unit_test(casadi-aba) + add_casadi_unit_test(casadi-constraint-dynamics-derivatives) + add_casadi_unit_test(casadi-constraint-dynamics) + add_casadi_unit_test(casadi-aba-derivatives) + endif() + add_casadi_unit_test(casadi-integrate-derivatives) + add_casadi_unit_test(casadi-rnea-derivatives) + endif() +endif() + +if(BUILD_WITH_RTSAN) + add_pinocchio_unit_test(dynamic-allocations) + #TODO remove following line when BUILD_WITH_RTSAN is handled + #get_cpp_test_name(dynamic-allocations ${CMAKE_CURRENT_SOURCE_DIR} test_name) + target_compile_options(${test_name} PRIVATE -fsanitize=realtime) + target_link_options(${test_name} PRIVATE -fsanitize=realtime) + # On osx-arm64 mutex are called to initialize some static variables. + # We use a suppression file to make this test pass. + if(APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") + set_tests_properties( + ${test_name} + PROPERTIES + ENVIRONMENT_MODIFICATION + "RTSAN_OPTIONS=path_list_append:suppressions=${CMAKE_CURRENT_SOURCE_DIR}/dynamic-allocations-osx-arm64.supp" + ) + endif() +endif() diff --git a/unittest/aba-derivatives.cpp b/unittest/cpp/aba-derivatives.cpp similarity index 100% rename from unittest/aba-derivatives.cpp rename to unittest/cpp/aba-derivatives.cpp diff --git a/unittest/aba.cpp b/unittest/cpp/aba.cpp similarity index 100% rename from unittest/aba.cpp rename to unittest/cpp/aba.cpp diff --git a/unittest/admm-solver.cpp b/unittest/cpp/admm-solver.cpp similarity index 100% rename from unittest/admm-solver.cpp rename to unittest/cpp/admm-solver.cpp diff --git a/unittest/algo-check.cpp b/unittest/cpp/algo-check.cpp similarity index 100% rename from unittest/algo-check.cpp rename to unittest/cpp/algo-check.cpp diff --git a/unittest/algorithm/utils/force.cpp b/unittest/cpp/algorithm-utils-force.cpp similarity index 100% rename from unittest/algorithm/utils/force.cpp rename to unittest/cpp/algorithm-utils-force.cpp diff --git a/unittest/algorithm/utils/motion.cpp b/unittest/cpp/algorithm-utils-motion.cpp similarity index 100% rename from unittest/algorithm/utils/motion.cpp rename to unittest/cpp/algorithm-utils-motion.cpp diff --git a/unittest/all-joints.cpp b/unittest/cpp/all-joints.cpp similarity index 100% rename from unittest/all-joints.cpp rename to unittest/cpp/all-joints.cpp diff --git a/unittest/alloca.cpp b/unittest/cpp/alloca.cpp similarity index 100% rename from unittest/alloca.cpp rename to unittest/cpp/alloca.cpp diff --git a/unittest/block-diagonal-matrix.cpp b/unittest/cpp/block-diagonal-matrix.cpp similarity index 100% rename from unittest/block-diagonal-matrix.cpp rename to unittest/cpp/block-diagonal-matrix.cpp diff --git a/unittest/box-set.cpp b/unittest/cpp/box-set.cpp similarity index 100% rename from unittest/box-set.cpp rename to unittest/cpp/box-set.cpp diff --git a/unittest/broadphase.cpp b/unittest/cpp/broadphase.cpp similarity index 100% rename from unittest/broadphase.cpp rename to unittest/cpp/broadphase.cpp diff --git a/unittest/cartesian-product-liegroups.cpp b/unittest/cpp/cartesian-product-liegroups.cpp similarity index 100% rename from unittest/cartesian-product-liegroups.cpp rename to unittest/cpp/cartesian-product-liegroups.cpp diff --git a/unittest/casadi/aba-derivatives.cpp b/unittest/cpp/casadi-aba-derivatives.cpp similarity index 100% rename from unittest/casadi/aba-derivatives.cpp rename to unittest/cpp/casadi-aba-derivatives.cpp diff --git a/unittest/casadi/aba.cpp b/unittest/cpp/casadi-aba.cpp similarity index 100% rename from unittest/casadi/aba.cpp rename to unittest/cpp/casadi-aba.cpp diff --git a/unittest/casadi/algorithms.cpp b/unittest/cpp/casadi-algorithms.cpp similarity index 100% rename from unittest/casadi/algorithms.cpp rename to unittest/cpp/casadi-algorithms.cpp diff --git a/unittest/casadi/basic.cpp b/unittest/cpp/casadi-basic.cpp similarity index 100% rename from unittest/casadi/basic.cpp rename to unittest/cpp/casadi-basic.cpp diff --git a/unittest/casadi/constraint-dynamics-derivatives.cpp b/unittest/cpp/casadi-constraint-dynamics-derivatives.cpp similarity index 100% rename from unittest/casadi/constraint-dynamics-derivatives.cpp rename to unittest/cpp/casadi-constraint-dynamics-derivatives.cpp diff --git a/unittest/casadi/constraint-dynamics.cpp b/unittest/cpp/casadi-constraint-dynamics.cpp similarity index 100% rename from unittest/casadi/constraint-dynamics.cpp rename to unittest/cpp/casadi-constraint-dynamics.cpp diff --git a/unittest/casadi/explog.cpp b/unittest/cpp/casadi-explog.cpp similarity index 100% rename from unittest/casadi/explog.cpp rename to unittest/cpp/casadi-explog.cpp diff --git a/unittest/casadi/integrate-derivatives.cpp b/unittest/cpp/casadi-integrate-derivatives.cpp similarity index 100% rename from unittest/casadi/integrate-derivatives.cpp rename to unittest/cpp/casadi-integrate-derivatives.cpp diff --git a/unittest/casadi/joints.cpp b/unittest/cpp/casadi-joints.cpp similarity index 100% rename from unittest/casadi/joints.cpp rename to unittest/cpp/casadi-joints.cpp diff --git a/unittest/casadi/rnea-derivatives.cpp b/unittest/cpp/casadi-rnea-derivatives.cpp similarity index 100% rename from unittest/casadi/rnea-derivatives.cpp rename to unittest/cpp/casadi-rnea-derivatives.cpp diff --git a/unittest/casadi/spatial.cpp b/unittest/cpp/casadi-spatial.cpp similarity index 100% rename from unittest/casadi/spatial.cpp rename to unittest/cpp/casadi-spatial.cpp diff --git a/unittest/casadi/casadi-utils.hpp b/unittest/cpp/casadi-utils.hpp similarity index 100% rename from unittest/casadi/casadi-utils.hpp rename to unittest/cpp/casadi-utils.hpp diff --git a/unittest/center-of-mass-derivatives.cpp b/unittest/cpp/center-of-mass-derivatives.cpp similarity index 100% rename from unittest/center-of-mass-derivatives.cpp rename to unittest/cpp/center-of-mass-derivatives.cpp diff --git a/unittest/centroidal-derivatives.cpp b/unittest/cpp/centroidal-derivatives.cpp similarity index 100% rename from unittest/centroidal-derivatives.cpp rename to unittest/cpp/centroidal-derivatives.cpp diff --git a/unittest/centroidal.cpp b/unittest/cpp/centroidal.cpp similarity index 100% rename from unittest/centroidal.cpp rename to unittest/cpp/centroidal.cpp diff --git a/unittest/cholesky.cpp b/unittest/cpp/cholesky.cpp similarity index 100% rename from unittest/cholesky.cpp rename to unittest/cpp/cholesky.cpp diff --git a/unittest/classic-acceleration.cpp b/unittest/cpp/classic-acceleration.cpp similarity index 100% rename from unittest/classic-acceleration.cpp rename to unittest/cpp/classic-acceleration.cpp diff --git a/unittest/closed-loop-dynamics.cpp b/unittest/cpp/closed-loop-dynamics.cpp similarity index 100% rename from unittest/closed-loop-dynamics.cpp rename to unittest/cpp/closed-loop-dynamics.cpp diff --git a/unittest/com.cpp b/unittest/cpp/com.cpp similarity index 100% rename from unittest/com.cpp rename to unittest/cpp/com.cpp diff --git a/unittest/compute-all-terms.cpp b/unittest/cpp/compute-all-terms.cpp similarity index 100% rename from unittest/compute-all-terms.cpp rename to unittest/cpp/compute-all-terms.cpp diff --git a/unittest/constrained-dynamics-derivatives.cpp b/unittest/cpp/constrained-dynamics-derivatives.cpp similarity index 100% rename from unittest/constrained-dynamics-derivatives.cpp rename to unittest/cpp/constrained-dynamics-derivatives.cpp diff --git a/unittest/constrained-dynamics.cpp b/unittest/cpp/constrained-dynamics.cpp similarity index 100% rename from unittest/constrained-dynamics.cpp rename to unittest/cpp/constrained-dynamics.cpp diff --git a/unittest/constraint-cholesky.cpp b/unittest/cpp/constraint-cholesky.cpp similarity index 100% rename from unittest/constraint-cholesky.cpp rename to unittest/cpp/constraint-cholesky.cpp diff --git a/unittest/constraint-jacobian.cpp b/unittest/cpp/constraint-jacobian.cpp similarity index 100% rename from unittest/constraint-jacobian.cpp rename to unittest/cpp/constraint-jacobian.cpp diff --git a/unittest/constraint-variants.cpp b/unittest/cpp/constraint-variants.cpp similarity index 100% rename from unittest/constraint-variants.cpp rename to unittest/cpp/constraint-variants.cpp diff --git a/unittest/constraints/init_constraints.hpp b/unittest/cpp/constraints/init_constraints.hpp similarity index 100% rename from unittest/constraints/init_constraints.hpp rename to unittest/cpp/constraints/init_constraints.hpp diff --git a/unittest/constraints/jacobians-checker.hpp b/unittest/cpp/constraints/jacobians-checker.hpp similarity index 100% rename from unittest/constraints/jacobians-checker.hpp rename to unittest/cpp/constraints/jacobians-checker.hpp diff --git a/unittest/contact-dynamics-derivatives.cpp b/unittest/cpp/contact-dynamics-derivatives.cpp similarity index 100% rename from unittest/contact-dynamics-derivatives.cpp rename to unittest/cpp/contact-dynamics-derivatives.cpp diff --git a/unittest/contact-dynamics.cpp b/unittest/cpp/contact-dynamics.cpp similarity index 100% rename from unittest/contact-dynamics.cpp rename to unittest/cpp/contact-dynamics.cpp diff --git a/unittest/contact-inverse-dynamics.cpp b/unittest/cpp/contact-inverse-dynamics.cpp similarity index 100% rename from unittest/contact-inverse-dynamics.cpp rename to unittest/cpp/contact-inverse-dynamics.cpp diff --git a/unittest/contact-models.cpp b/unittest/cpp/contact-models.cpp similarity index 100% rename from unittest/contact-models.cpp rename to unittest/cpp/contact-models.cpp diff --git a/unittest/copy.cpp b/unittest/cpp/copy.cpp similarity index 100% rename from unittest/copy.cpp rename to unittest/cpp/copy.cpp diff --git a/unittest/coulomb-friction-cone.cpp b/unittest/cpp/coulomb-friction-cone.cpp similarity index 100% rename from unittest/coulomb-friction-cone.cpp rename to unittest/cpp/coulomb-friction-cone.cpp diff --git a/unittest/cppad/algorithms.cpp b/unittest/cpp/cppad-algorithms.cpp similarity index 100% rename from unittest/cppad/algorithms.cpp rename to unittest/cpp/cppad-algorithms.cpp diff --git a/unittest/cppad/basic.cpp b/unittest/cpp/cppad-basic.cpp similarity index 100% rename from unittest/cppad/basic.cpp rename to unittest/cpp/cppad-basic.cpp diff --git a/unittest/cppad/derivatives.cpp b/unittest/cpp/cppad-derivatives.cpp similarity index 100% rename from unittest/cppad/derivatives.cpp rename to unittest/cpp/cppad-derivatives.cpp diff --git a/unittest/cppad/joint-configurations.cpp b/unittest/cpp/cppad-joint-configurations.cpp similarity index 100% rename from unittest/cppad/joint-configurations.cpp rename to unittest/cpp/cppad-joint-configurations.cpp diff --git a/unittest/cppad/joints.cpp b/unittest/cpp/cppad-joints.cpp similarity index 100% rename from unittest/cppad/joints.cpp rename to unittest/cpp/cppad-joints.cpp diff --git a/unittest/cppad/spatial.cpp b/unittest/cpp/cppad-spatial.cpp similarity index 100% rename from unittest/cppad/spatial.cpp rename to unittest/cpp/cppad-spatial.cpp diff --git a/unittest/cppadcg/algorithms.cpp b/unittest/cpp/cppadcg-algorithms.cpp similarity index 100% rename from unittest/cppadcg/algorithms.cpp rename to unittest/cpp/cppadcg-algorithms.cpp diff --git a/unittest/cppadcg/basic.cpp b/unittest/cpp/cppadcg-basic.cpp similarity index 100% rename from unittest/cppadcg/basic.cpp rename to unittest/cpp/cppadcg-basic.cpp diff --git a/unittest/cppadcg/contact-dynamics.cpp b/unittest/cpp/cppadcg-contact-dynamics.cpp similarity index 100% rename from unittest/cppadcg/contact-dynamics.cpp rename to unittest/cpp/cppadcg-contact-dynamics.cpp diff --git a/unittest/cppadcg/joint-configurations.cpp b/unittest/cpp/cppadcg-joint-configurations.cpp similarity index 100% rename from unittest/cppadcg/joint-configurations.cpp rename to unittest/cpp/cppadcg-joint-configurations.cpp diff --git a/unittest/crba.cpp b/unittest/cpp/crba.cpp similarity index 100% rename from unittest/crba.cpp rename to unittest/cpp/crba.cpp diff --git a/unittest/csv.cpp b/unittest/cpp/csv.cpp similarity index 100% rename from unittest/csv.cpp rename to unittest/cpp/csv.cpp diff --git a/unittest/data.cpp b/unittest/cpp/data.cpp similarity index 100% rename from unittest/data.cpp rename to unittest/cpp/data.cpp diff --git a/unittest/delassus-operations.cpp b/unittest/cpp/delassus-operations.cpp similarity index 100% rename from unittest/delassus-operations.cpp rename to unittest/cpp/delassus-operations.cpp diff --git a/unittest/delassus-operator-dense.cpp b/unittest/cpp/delassus-operator-dense.cpp similarity index 100% rename from unittest/delassus-operator-dense.cpp rename to unittest/cpp/delassus-operator-dense.cpp diff --git a/unittest/delassus-operator-preconditioned.cpp b/unittest/cpp/delassus-operator-preconditioned.cpp similarity index 100% rename from unittest/delassus-operator-preconditioned.cpp rename to unittest/cpp/delassus-operator-preconditioned.cpp diff --git a/unittest/delassus-operator-rigid-body.cpp b/unittest/cpp/delassus-operator-rigid-body.cpp similarity index 100% rename from unittest/delassus-operator-rigid-body.cpp rename to unittest/cpp/delassus-operator-rigid-body.cpp diff --git a/unittest/delassus.cpp b/unittest/cpp/delassus.cpp similarity index 100% rename from unittest/delassus.cpp rename to unittest/cpp/delassus.cpp diff --git a/unittest/double-entry-container.cpp b/unittest/cpp/double-entry-container.cpp similarity index 100% rename from unittest/double-entry-container.cpp rename to unittest/cpp/double-entry-container.cpp diff --git a/unittest/dynamic-allocations.cpp b/unittest/cpp/dynamic-allocations.cpp similarity index 100% rename from unittest/dynamic-allocations.cpp rename to unittest/cpp/dynamic-allocations.cpp diff --git a/unittest/eigen-basic-op.cpp b/unittest/cpp/eigen-basic-op.cpp similarity index 100% rename from unittest/eigen-basic-op.cpp rename to unittest/cpp/eigen-basic-op.cpp diff --git a/unittest/eigen-storage.cpp b/unittest/cpp/eigen-storage.cpp similarity index 100% rename from unittest/eigen-storage.cpp rename to unittest/cpp/eigen-storage.cpp diff --git a/unittest/eigen-tensor.cpp b/unittest/cpp/eigen-tensor.cpp similarity index 100% rename from unittest/eigen-tensor.cpp rename to unittest/cpp/eigen-tensor.cpp diff --git a/unittest/eigenvalues.cpp b/unittest/cpp/eigenvalues.cpp similarity index 100% rename from unittest/eigenvalues.cpp rename to unittest/cpp/eigenvalues.cpp diff --git a/unittest/energy.cpp b/unittest/cpp/energy.cpp similarity index 100% rename from unittest/energy.cpp rename to unittest/cpp/energy.cpp diff --git a/unittest/explog.cpp b/unittest/cpp/explog.cpp similarity index 100% rename from unittest/explog.cpp rename to unittest/cpp/explog.cpp diff --git a/unittest/finite-differences.cpp b/unittest/cpp/finite-differences.cpp similarity index 100% rename from unittest/finite-differences.cpp rename to unittest/cpp/finite-differences.cpp diff --git a/unittest/frame-anchor-constraint.cpp b/unittest/cpp/frame-anchor-constraint.cpp similarity index 100% rename from unittest/frame-anchor-constraint.cpp rename to unittest/cpp/frame-anchor-constraint.cpp diff --git a/unittest/frames-derivatives.cpp b/unittest/cpp/frames-derivatives.cpp similarity index 100% rename from unittest/frames-derivatives.cpp rename to unittest/cpp/frames-derivatives.cpp diff --git a/unittest/frames.cpp b/unittest/cpp/frames.cpp similarity index 100% rename from unittest/frames.cpp rename to unittest/cpp/frames.cpp diff --git a/unittest/full-space-cone.cpp b/unittest/cpp/full-space-cone.cpp similarity index 100% rename from unittest/full-space-cone.cpp rename to unittest/cpp/full-space-cone.cpp diff --git a/unittest/fusion.cpp b/unittest/cpp/fusion.cpp similarity index 100% rename from unittest/fusion.cpp rename to unittest/cpp/fusion.cpp diff --git a/unittest/geometry-algorithms.cpp b/unittest/cpp/geometry-algorithms.cpp similarity index 100% rename from unittest/geometry-algorithms.cpp rename to unittest/cpp/geometry-algorithms.cpp diff --git a/unittest/geometry-model.cpp b/unittest/cpp/geometry-model.cpp similarity index 100% rename from unittest/geometry-model.cpp rename to unittest/cpp/geometry-model.cpp diff --git a/unittest/geometry-object.cpp b/unittest/cpp/geometry-object.cpp similarity index 100% rename from unittest/geometry-object.cpp rename to unittest/cpp/geometry-object.cpp diff --git a/unittest/gram-schmidt-orthonormalisation.cpp b/unittest/cpp/gram-schmidt-orthonormalisation.cpp similarity index 100% rename from unittest/gram-schmidt-orthonormalisation.cpp rename to unittest/cpp/gram-schmidt-orthonormalisation.cpp diff --git a/unittest/impulse-dynamics-derivatives.cpp b/unittest/cpp/impulse-dynamics-derivatives.cpp similarity index 100% rename from unittest/impulse-dynamics-derivatives.cpp rename to unittest/cpp/impulse-dynamics-derivatives.cpp diff --git a/unittest/impulse-dynamics.cpp b/unittest/cpp/impulse-dynamics.cpp similarity index 100% rename from unittest/impulse-dynamics.cpp rename to unittest/cpp/impulse-dynamics.cpp diff --git a/unittest/joint-composite.cpp b/unittest/cpp/joint-composite.cpp similarity index 100% rename from unittest/joint-composite.cpp rename to unittest/cpp/joint-composite.cpp diff --git a/unittest/joint-configurations.cpp b/unittest/cpp/joint-configurations.cpp similarity index 100% rename from unittest/joint-configurations.cpp rename to unittest/cpp/joint-configurations.cpp diff --git a/unittest/joint-ellipsoid.cpp b/unittest/cpp/joint-ellipsoid.cpp similarity index 100% rename from unittest/joint-ellipsoid.cpp rename to unittest/cpp/joint-ellipsoid.cpp diff --git a/unittest/joint-free-flyer.cpp b/unittest/cpp/joint-free-flyer.cpp similarity index 100% rename from unittest/joint-free-flyer.cpp rename to unittest/cpp/joint-free-flyer.cpp diff --git a/unittest/joint-friction-constraint.cpp b/unittest/cpp/joint-friction-constraint.cpp similarity index 100% rename from unittest/joint-friction-constraint.cpp rename to unittest/cpp/joint-friction-constraint.cpp diff --git a/unittest/joint-generic.cpp b/unittest/cpp/joint-generic.cpp similarity index 100% rename from unittest/joint-generic.cpp rename to unittest/cpp/joint-generic.cpp diff --git a/unittest/joint-helical.cpp b/unittest/cpp/joint-helical.cpp similarity index 98% rename from unittest/joint-helical.cpp rename to unittest/cpp/joint-helical.cpp index 0ab2d619fc..83250ea8f9 100644 --- a/unittest/joint-helical.cpp +++ b/unittest/cpp/joint-helical.cpp @@ -30,7 +30,6 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointHelical) BOOST_AUTO_TEST_CASE(vsPXRX) { @@ -129,7 +128,7 @@ BOOST_AUTO_TEST_CASE(vsPXRX) BOOST_CHECK(v_body_hx.isApprox(v_body_PXRX)); } -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(helical_spatial) { typedef TransformHelicalTpl TransformX; typedef TransformHelicalTpl TransformY; @@ -190,9 +189,7 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(v.cross(mh_z).isApprox(v.cross(mh_dense_z))); } -BOOST_AUTO_TEST_SUITE_END() -BOOST_AUTO_TEST_SUITE(JointHelicalUnaligned) BOOST_AUTO_TEST_CASE(vsHX) { @@ -274,4 +271,3 @@ BOOST_AUTO_TEST_CASE(vsHX) BOOST_CHECK(jacobianPX.isApprox(jacobianPrismaticUnaligned)); } -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-jacobian.cpp b/unittest/cpp/joint-jacobian.cpp similarity index 100% rename from unittest/joint-jacobian.cpp rename to unittest/cpp/joint-jacobian.cpp diff --git a/unittest/joint-limit-constraint.cpp b/unittest/cpp/joint-limit-constraint.cpp similarity index 100% rename from unittest/joint-limit-constraint.cpp rename to unittest/cpp/joint-limit-constraint.cpp diff --git a/unittest/joint-mimic.cpp b/unittest/cpp/joint-mimic.cpp similarity index 100% rename from unittest/joint-mimic.cpp rename to unittest/cpp/joint-mimic.cpp diff --git a/unittest/joint-motion-subspace.cpp b/unittest/cpp/joint-motion-subspace.cpp similarity index 100% rename from unittest/joint-motion-subspace.cpp rename to unittest/cpp/joint-motion-subspace.cpp diff --git a/unittest/joint-planar.cpp b/unittest/cpp/joint-planar.cpp similarity index 100% rename from unittest/joint-planar.cpp rename to unittest/cpp/joint-planar.cpp diff --git a/unittest/joint-prismatic.cpp b/unittest/cpp/joint-prismatic.cpp similarity index 97% rename from unittest/joint-prismatic.cpp rename to unittest/cpp/joint-prismatic.cpp index fcd7fa0a59..39ab2769a7 100644 --- a/unittest/joint-prismatic.cpp +++ b/unittest/cpp/joint-prismatic.cpp @@ -31,9 +31,8 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointPrismatic) -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(prismatic_spatial) { typedef TransformPrismaticTpl TransformX; typedef TransformPrismaticTpl TransformY; @@ -215,11 +214,9 @@ BOOST_AUTO_TEST_CASE(test_crba) BOOST_CHECK(M_expected.isApprox(data.M, 1e-10)); } -BOOST_AUTO_TEST_SUITE_END() -BOOST_AUTO_TEST_SUITE(JointPrismaticUnaligned) -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(prismatic_unaligned_spatial) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -314,4 +311,3 @@ BOOST_AUTO_TEST_CASE(vsPX) BOOST_CHECK(jacobianPX.isApprox(jacobianPrismaticUnaligned)); } -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-revolute.cpp b/unittest/cpp/joint-revolute.cpp similarity index 96% rename from unittest/joint-revolute.cpp rename to unittest/cpp/joint-revolute.cpp index 2e8c490de3..dc81d489e0 100644 --- a/unittest/joint-revolute.cpp +++ b/unittest/cpp/joint-revolute.cpp @@ -33,9 +33,7 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointRevoluteUnaligned) - -BOOST_AUTO_TEST_CASE(vsRX) +BOOST_AUTO_TEST_CASE(revolute_unaligned_vsRX) { using namespace pinocchio; typedef SE3::Vector3 Vector3; @@ -114,9 +112,6 @@ BOOST_AUTO_TEST_CASE(vsRX) BOOST_CHECK(jacobianRX.isApprox(jacobianRevoluteUnaligned)); } -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(JointRevoluteUnboundedUnaligned) BOOST_AUTO_TEST_CASE(vsRUX) { @@ -205,11 +200,7 @@ BOOST_AUTO_TEST_CASE(vsRUX) BOOST_CHECK(jacobianRUX.isApprox(jacobianRevoluteUnboundedUnaligned)); } -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(JointRevoluteUnbounded) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(revolute_unbounded_spatial) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -239,7 +230,7 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(v.cross(mp_z).isApprox(v.cross(mp_dense_z))); } -BOOST_AUTO_TEST_CASE(vsRX) +BOOST_AUTO_TEST_CASE(revolute_unbounded_vsRX) { typedef SE3::Vector3 Vector3; typedef SE3::Matrix3 Matrix3; @@ -338,11 +329,8 @@ BOOST_AUTO_TEST_CASE(tangent_map) BOOST_CHECK(mat_block2.rows() == 1); BOOST_CHECK(mat_block2.cols() == 1); } -BOOST_AUTO_TEST_SUITE_END() -BOOST_AUTO_TEST_SUITE(JointRevolute) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(revolute_spatial) { typedef TransformRevoluteTpl TransformX; typedef TransformRevoluteTpl TransformY; @@ -404,11 +392,7 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(v.cross(mp_z).isApprox(v.cross(mp_dense_z))); } -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(JointRevoluteUnaligned) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(revolute_unaligned_spatial) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -421,5 +405,3 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(v.cross(mp).isApprox(v.cross(mp_dense))); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-spherical.cpp b/unittest/cpp/joint-spherical.cpp similarity index 97% rename from unittest/joint-spherical.cpp rename to unittest/cpp/joint-spherical.cpp index d10065365e..e5aa08ccbe 100644 --- a/unittest/joint-spherical.cpp +++ b/unittest/cpp/joint-spherical.cpp @@ -31,9 +31,7 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } -BOOST_AUTO_TEST_SUITE(JointSpherical) - -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(spherical_spatial) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -47,7 +45,7 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(v.cross(mp).isApprox(v.cross(mp_dense))); } -BOOST_AUTO_TEST_CASE(vsFreeFlyer) +BOOST_AUTO_TEST_CASE(spherical_vsFreeFlyer) { using namespace pinocchio; typedef SE3::Vector3 Vector3; @@ -139,11 +137,8 @@ BOOST_AUTO_TEST_CASE(vsFreeFlyer) BOOST_CHECK(jacobian_planar.isApprox(jacobian_expected)); } -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(JointSphericalZYX) -BOOST_AUTO_TEST_CASE(spatial) +BOOST_AUTO_TEST_CASE(spherical_zyx_spatial) { SE3 M(SE3::Random()); Motion v(Motion::Random()); @@ -157,7 +152,7 @@ BOOST_AUTO_TEST_CASE(spatial) BOOST_CHECK(v.cross(mp).isApprox(v.cross(mp_dense))); } -BOOST_AUTO_TEST_CASE(vsFreeFlyer) +BOOST_AUTO_TEST_CASE(spherical_zyx_vsFreeFlyer) { // WARNIG : Dynamic algorithm's results cannot be compared to FreeFlyer's ones because // of the representation of the rotation and the ConstraintSubspace difference. @@ -293,5 +288,3 @@ BOOST_AUTO_TEST_CASE(test_crba) BOOST_CHECK(M_expected.isApprox(data.M, 1e-10)); } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/unittest/joint-translation.cpp b/unittest/cpp/joint-translation.cpp similarity index 100% rename from unittest/joint-translation.cpp rename to unittest/cpp/joint-translation.cpp diff --git a/unittest/joint-universal.cpp b/unittest/cpp/joint-universal.cpp similarity index 100% rename from unittest/joint-universal.cpp rename to unittest/cpp/joint-universal.cpp diff --git a/unittest/joint-visitors.cpp b/unittest/cpp/joint-visitors.cpp similarity index 100% rename from unittest/joint-visitors.cpp rename to unittest/cpp/joint-visitors.cpp diff --git a/unittest/kinematics-derivatives.cpp b/unittest/cpp/kinematics-derivatives.cpp similarity index 100% rename from unittest/kinematics-derivatives.cpp rename to unittest/cpp/kinematics-derivatives.cpp diff --git a/unittest/kinematics.cpp b/unittest/cpp/kinematics.cpp similarity index 100% rename from unittest/kinematics.cpp rename to unittest/cpp/kinematics.cpp diff --git a/unittest/lanczos-decomposition.cpp b/unittest/cpp/lanczos-decomposition.cpp similarity index 100% rename from unittest/lanczos-decomposition.cpp rename to unittest/cpp/lanczos-decomposition.cpp diff --git a/unittest/liegroups.cpp b/unittest/cpp/liegroups.cpp similarity index 100% rename from unittest/liegroups.cpp rename to unittest/cpp/liegroups.cpp diff --git a/unittest/loop-constrained-aba.cpp b/unittest/cpp/loop-constrained-aba.cpp similarity index 100% rename from unittest/loop-constrained-aba.cpp rename to unittest/cpp/loop-constrained-aba.cpp diff --git a/unittest/macros.cpp b/unittest/cpp/macros.cpp similarity index 100% rename from unittest/macros.cpp rename to unittest/cpp/macros.cpp diff --git a/unittest/matrix-block-element.cpp b/unittest/cpp/matrix-block-element.cpp similarity index 100% rename from unittest/matrix-block-element.cpp rename to unittest/cpp/matrix-block-element.cpp diff --git a/unittest/matrix-inverse.cpp b/unittest/cpp/matrix-inverse.cpp similarity index 100% rename from unittest/matrix-inverse.cpp rename to unittest/cpp/matrix-inverse.cpp diff --git a/unittest/matrix-product.cpp b/unittest/cpp/matrix-product.cpp similarity index 100% rename from unittest/matrix-product.cpp rename to unittest/cpp/matrix-product.cpp diff --git a/unittest/matrix-stack.cpp b/unittest/cpp/matrix-stack.cpp similarity index 100% rename from unittest/matrix-stack.cpp rename to unittest/cpp/matrix-stack.cpp diff --git a/unittest/matrix.cpp b/unittest/cpp/matrix.cpp similarity index 100% rename from unittest/matrix.cpp rename to unittest/cpp/matrix.cpp diff --git a/unittest/mjcf.cpp b/unittest/cpp/mjcf.cpp similarity index 100% rename from unittest/mjcf.cpp rename to unittest/cpp/mjcf.cpp diff --git a/unittest/model-configuration-converter.cpp b/unittest/cpp/model-configuration-converter.cpp similarity index 100% rename from unittest/model-configuration-converter.cpp rename to unittest/cpp/model-configuration-converter.cpp diff --git a/unittest/model-graph.cpp b/unittest/cpp/model-graph.cpp similarity index 100% rename from unittest/model-graph.cpp rename to unittest/cpp/model-graph.cpp diff --git a/unittest/model.cpp b/unittest/cpp/model.cpp similarity index 100% rename from unittest/model.cpp rename to unittest/cpp/model.cpp diff --git a/unittest/multiprecision-mpfr.cpp b/unittest/cpp/multiprecision-mpfr.cpp similarity index 100% rename from unittest/multiprecision-mpfr.cpp rename to unittest/cpp/multiprecision-mpfr.cpp diff --git a/unittest/multiprecision.cpp b/unittest/cpp/multiprecision.cpp similarity index 100% rename from unittest/multiprecision.cpp rename to unittest/cpp/multiprecision.cpp diff --git a/unittest/openmp-exception.cpp b/unittest/cpp/openmp-exception.cpp similarity index 100% rename from unittest/openmp-exception.cpp rename to unittest/cpp/openmp-exception.cpp diff --git a/unittest/orthant-cone-jordan-operation.cpp b/unittest/cpp/orthant-cone-jordan-operation.cpp similarity index 100% rename from unittest/orthant-cone-jordan-operation.cpp rename to unittest/cpp/orthant-cone-jordan-operation.cpp diff --git a/unittest/orthant-cone.cpp b/unittest/cpp/orthant-cone.cpp similarity index 100% rename from unittest/orthant-cone.cpp rename to unittest/cpp/orthant-cone.cpp diff --git a/unittest/parallel-aba.cpp b/unittest/cpp/parallel-aba.cpp similarity index 100% rename from unittest/parallel-aba.cpp rename to unittest/cpp/parallel-aba.cpp diff --git a/unittest/parallel-geometry.cpp b/unittest/cpp/parallel-geometry.cpp similarity index 100% rename from unittest/parallel-geometry.cpp rename to unittest/cpp/parallel-geometry.cpp diff --git a/unittest/parallel-rnea.cpp b/unittest/cpp/parallel-rnea.cpp similarity index 100% rename from unittest/parallel-rnea.cpp rename to unittest/cpp/parallel-rnea.cpp diff --git a/unittest/pgs-solver.cpp b/unittest/cpp/pgs-solver.cpp similarity index 100% rename from unittest/pgs-solver.cpp rename to unittest/cpp/pgs-solver.cpp diff --git a/unittest/point-anchor-constraint.cpp b/unittest/cpp/point-anchor-constraint.cpp similarity index 100% rename from unittest/point-anchor-constraint.cpp rename to unittest/cpp/point-anchor-constraint.cpp diff --git a/unittest/point-contact-constraint.cpp b/unittest/cpp/point-contact-constraint.cpp similarity index 100% rename from unittest/point-contact-constraint.cpp rename to unittest/cpp/point-contact-constraint.cpp diff --git a/unittest/preconditioner.cpp b/unittest/cpp/preconditioner.cpp similarity index 100% rename from unittest/preconditioner.cpp rename to unittest/cpp/preconditioner.cpp diff --git a/unittest/promote-static-eval.cpp b/unittest/cpp/promote-static-eval.cpp similarity index 100% rename from unittest/promote-static-eval.cpp rename to unittest/cpp/promote-static-eval.cpp diff --git a/unittest/promote-static-op.cpp b/unittest/cpp/promote-static-op.cpp similarity index 100% rename from unittest/promote-static-op.cpp rename to unittest/cpp/promote-static-op.cpp diff --git a/unittest/pv-solver.cpp b/unittest/cpp/pv-solver.cpp similarity index 100% rename from unittest/pv-solver.cpp rename to unittest/cpp/pv-solver.cpp diff --git a/unittest/python_parser.cpp b/unittest/cpp/python_parser.cpp similarity index 100% rename from unittest/python_parser.cpp rename to unittest/cpp/python_parser.cpp diff --git a/unittest/quaternion.cpp b/unittest/cpp/quaternion.cpp similarity index 100% rename from unittest/quaternion.cpp rename to unittest/cpp/quaternion.cpp diff --git a/unittest/reachable-workspace.cpp b/unittest/cpp/reachable-workspace.cpp similarity index 100% rename from unittest/reachable-workspace.cpp rename to unittest/cpp/reachable-workspace.cpp diff --git a/unittest/reference.cpp b/unittest/cpp/reference.cpp similarity index 100% rename from unittest/reference.cpp rename to unittest/cpp/reference.cpp diff --git a/unittest/regressor.cpp b/unittest/cpp/regressor.cpp similarity index 100% rename from unittest/regressor.cpp rename to unittest/cpp/regressor.cpp diff --git a/unittest/rigid-constraint-conversion.cpp b/unittest/cpp/rigid-constraint-conversion.cpp similarity index 100% rename from unittest/rigid-constraint-conversion.cpp rename to unittest/cpp/rigid-constraint-conversion.cpp diff --git a/unittest/rnea-derivatives.cpp b/unittest/cpp/rnea-derivatives.cpp similarity index 100% rename from unittest/rnea-derivatives.cpp rename to unittest/cpp/rnea-derivatives.cpp diff --git a/unittest/rnea-second-order-derivatives.cpp b/unittest/cpp/rnea-second-order-derivatives.cpp similarity index 100% rename from unittest/rnea-second-order-derivatives.cpp rename to unittest/cpp/rnea-second-order-derivatives.cpp diff --git a/unittest/rnea.cpp b/unittest/cpp/rnea.cpp similarity index 100% rename from unittest/rnea.cpp rename to unittest/cpp/rnea.cpp diff --git a/unittest/rotation.cpp b/unittest/cpp/rotation.cpp similarity index 100% rename from unittest/rotation.cpp rename to unittest/cpp/rotation.cpp diff --git a/unittest/rpy.cpp b/unittest/cpp/rpy.cpp similarity index 100% rename from unittest/rpy.cpp rename to unittest/cpp/rpy.cpp diff --git a/unittest/sample-models.cpp b/unittest/cpp/sample-models.cpp similarity index 100% rename from unittest/sample-models.cpp rename to unittest/cpp/sample-models.cpp diff --git a/unittest/sdf.cpp b/unittest/cpp/sdf.cpp similarity index 100% rename from unittest/sdf.cpp rename to unittest/cpp/sdf.cpp diff --git a/unittest/second-order-cone-jordan-operation.cpp b/unittest/cpp/second-order-cone-jordan-operation.cpp similarity index 100% rename from unittest/second-order-cone-jordan-operation.cpp rename to unittest/cpp/second-order-cone-jordan-operation.cpp diff --git a/unittest/serialization-algorithm.cpp b/unittest/cpp/serialization-algorithm.cpp similarity index 100% rename from unittest/serialization-algorithm.cpp rename to unittest/cpp/serialization-algorithm.cpp diff --git a/unittest/serialization-constraints.cpp b/unittest/cpp/serialization-constraints.cpp similarity index 100% rename from unittest/serialization-constraints.cpp rename to unittest/cpp/serialization-constraints.cpp diff --git a/unittest/serialization-math.cpp b/unittest/cpp/serialization-math.cpp similarity index 100% rename from unittest/serialization-math.cpp rename to unittest/cpp/serialization-math.cpp diff --git a/unittest/serialization-multibody-joint.cpp b/unittest/cpp/serialization-multibody-joint.cpp similarity index 100% rename from unittest/serialization-multibody-joint.cpp rename to unittest/cpp/serialization-multibody-joint.cpp diff --git a/unittest/serialization-multibody.cpp b/unittest/cpp/serialization-multibody.cpp similarity index 100% rename from unittest/serialization-multibody.cpp rename to unittest/cpp/serialization-multibody.cpp diff --git a/unittest/serialization.cpp b/unittest/cpp/serialization.cpp similarity index 100% rename from unittest/serialization.cpp rename to unittest/cpp/serialization.cpp diff --git a/unittest/serialization.hpp b/unittest/cpp/serialization.hpp similarity index 100% rename from unittest/serialization.hpp rename to unittest/cpp/serialization.hpp diff --git a/unittest/sincos.cpp b/unittest/cpp/sincos.cpp similarity index 100% rename from unittest/sincos.cpp rename to unittest/cpp/sincos.cpp diff --git a/unittest/size-in-bytes.cpp b/unittest/cpp/size-in-bytes.cpp similarity index 100% rename from unittest/size-in-bytes.cpp rename to unittest/cpp/size-in-bytes.cpp diff --git a/unittest/spatial.cpp b/unittest/cpp/spatial.cpp similarity index 100% rename from unittest/spatial.cpp rename to unittest/cpp/spatial.cpp diff --git a/unittest/srdf.cpp b/unittest/cpp/srdf.cpp similarity index 100% rename from unittest/srdf.cpp rename to unittest/cpp/srdf.cpp diff --git a/unittest/symmetric.cpp b/unittest/cpp/symmetric.cpp similarity index 100% rename from unittest/symmetric.cpp rename to unittest/cpp/symmetric.cpp diff --git a/unittest/tree-broadphase.cpp b/unittest/cpp/tree-broadphase.cpp similarity index 100% rename from unittest/tree-broadphase.cpp rename to unittest/cpp/tree-broadphase.cpp diff --git a/unittest/tridiagonal-matrix.cpp b/unittest/cpp/tridiagonal-matrix.cpp similarity index 100% rename from unittest/tridiagonal-matrix.cpp rename to unittest/cpp/tridiagonal-matrix.cpp diff --git a/unittest/urdf.cpp b/unittest/cpp/urdf.cpp similarity index 100% rename from unittest/urdf.cpp rename to unittest/cpp/urdf.cpp diff --git a/unittest/utils.hpp b/unittest/cpp/utils.hpp similarity index 100% rename from unittest/utils.hpp rename to unittest/cpp/utils.hpp diff --git a/unittest/utils/macros.hpp b/unittest/cpp/utils/macros.hpp similarity index 100% rename from unittest/utils/macros.hpp rename to unittest/cpp/utils/macros.hpp diff --git a/unittest/utils/model-generator.hpp b/unittest/cpp/utils/model-generator.hpp similarity index 100% rename from unittest/utils/model-generator.hpp rename to unittest/cpp/utils/model-generator.hpp diff --git a/unittest/value.cpp b/unittest/cpp/value.cpp similarity index 100% rename from unittest/value.cpp rename to unittest/cpp/value.cpp diff --git a/unittest/vector.cpp b/unittest/cpp/vector.cpp similarity index 100% rename from unittest/vector.cpp rename to unittest/cpp/vector.cpp diff --git a/unittest/version.cpp b/unittest/cpp/version.cpp similarity index 100% rename from unittest/version.cpp rename to unittest/cpp/version.cpp diff --git a/unittest/visitor.cpp b/unittest/cpp/visitor.cpp similarity index 100% rename from unittest/visitor.cpp rename to unittest/cpp/visitor.cpp diff --git a/unittest/visualizer.cpp b/unittest/cpp/visualizer.cpp similarity index 100% rename from unittest/visualizer.cpp rename to unittest/cpp/visualizer.cpp diff --git a/unittest/zero-cone.cpp b/unittest/cpp/zero-cone.cpp similarity index 100% rename from unittest/zero-cone.cpp rename to unittest/cpp/zero-cone.cpp diff --git a/unittest/cppad/CMakeLists.txt b/unittest/cppad/CMakeLists.txt deleted file mode 100644 index 4f2cf8d41a..0000000000 --- a/unittest/cppad/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# Copyright (c) 2021 INRIA -# - -# Automatic differentiation -macro(ADD_CPPAD_UNIT_TEST name) - include_directories(SYSTEM ${cppad_INCLUDE_DIR}) - add_pinocchio_unit_test(${name} CPPAD) - get_cpp_test_name(${name} ${CMAKE_CURRENT_SOURCE_DIR} TEST_NAME) - add_dependencies(${PROJECT_NAME}-test-cpp-cppad ${TEST_NAME}) -endmacro() - -if(BUILD_WITH_AUTODIFF_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) - add_custom_target(${PROJECT_NAME}-test-cpp-cppad) - set_target_properties( - ${PROJECT_NAME}-test-cpp-cppad - PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True - ) - - add_cppad_unit_test(basic) - add_cppad_unit_test(spatial) - add_cppad_unit_test(joints) - add_cppad_unit_test(algorithms) - add_cppad_unit_test(derivatives) - add_cppad_unit_test(joint-configurations) -endif() diff --git a/unittest/cppadcg/CMakeLists.txt b/unittest/cppadcg/CMakeLists.txt deleted file mode 100644 index 3bd5ff193f..0000000000 --- a/unittest/cppadcg/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -macro(ADD_CPPADCG_UNIT_TEST name) - include_directories(SYSTEM ${cppad_INCLUDE_DIR}) - include_directories(SYSTEM ${cppadcodegen_INCLUDE_DIR}) - add_pinocchio_unit_test(${name} PACKAGES ${cppad_LIBRARY} ${CMAKE_DL_LIBS}) - get_cpp_test_name(${name} ${CMAKE_CURRENT_SOURCE_DIR} TEST_NAME) - add_dependencies(${PROJECT_NAME}-test-cpp-cppadcg ${TEST_NAME}) - target_compile_definitions( - ${TEST_NAME} - PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" - ) -endmacro() - -if(BUILD_WITH_AUTODIFF_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) - if(BUILD_WITH_CODEGEN_SUPPORT) - add_custom_target(${PROJECT_NAME}-test-cpp-cppadcg) - set_target_properties( - ${PROJECT_NAME}-test-cpp-cppadcg - PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True - ) - - add_cppadcg_unit_test(basic) - if(BUILD_ADVANCED_TESTING) - add_cppadcg_unit_test(algorithms) - add_cppadcg_unit_test(joint-configurations) - add_cppadcg_unit_test(contact-dynamics) - endif() - endif() -endif() From a86d2b4a24bc7fe3e82be43985739bb83ae49ab3 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Thu, 23 Jul 2026 17:23:30 +0200 Subject: [PATCH 09/32] cmake :cppad and cppadcg finders (jrl_v1) --- cmake/find-external/CppAD/Findcppad.cmake | 47 +++++++++++++++++++++ cmake/find-external/CppAD/Findcppadcg.cmake | 42 ++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 cmake/find-external/CppAD/Findcppad.cmake create mode 100644 cmake/find-external/CppAD/Findcppadcg.cmake diff --git a/cmake/find-external/CppAD/Findcppad.cmake b/cmake/find-external/CppAD/Findcppad.cmake new file mode 100644 index 0000000000..5faca0b9c8 --- /dev/null +++ b/cmake/find-external/CppAD/Findcppad.cmake @@ -0,0 +1,47 @@ +# +# Copyright 2020 CNRS INRIA +# +# Author: Guilhem Saurel, Rohan Budhiraja +# + +# Try to find cppad in standard prefixes and in ${cppad_PREFIX} Once done this +# will define cppad_FOUND - System has cppad cppad_INCLUDE_DIR - The cppad +# include directories cppad_LIBRARY - The libraries needed to use cppad +# cppad_DEFINITIONS - Compiler switches required for using cppad cppad_VERSION - +# Version of cppad found + +find_path( + cppad_INCLUDE_DIR + NAMES cppad/configure.hpp + PATHS ${cppad_PREFIX} + PATH_SUFFIXES include +) +find_library( + cppad_LIBRARY + NAMES cppad_lib + PATHS ${cppad_PREFIX} + PATH_SUFFIXES lib +) + +if(cppad_INCLUDE_DIR AND EXISTS "${cppad_INCLUDE_DIR}/cppad/configure.hpp") + file( + STRINGS "${cppad_INCLUDE_DIR}/cppad/configure.hpp" + cppad_version_str + REGEX "^# *define[\t ]+CPPAD_PACKAGE_STRING[\t ]+\"cppad-.*\"" + ) + string( + REGEX REPLACE + "^# *define[\t ]+CPPAD_PACKAGE_STRING[\t ]+\"cppad-([^\"]*)\".*" + "\\1" + cppad_VERSION + "${cppad_version_str}" + ) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + cppad + REQUIRED_VARS cppad_LIBRARY cppad_INCLUDE_DIR + VERSION_VAR cppad_VERSION +) +mark_as_advanced(cppad_INCLUDE_DIR cppad_LIBRARY) diff --git a/cmake/find-external/CppAD/Findcppadcg.cmake b/cmake/find-external/CppAD/Findcppadcg.cmake new file mode 100644 index 0000000000..ca0acb700a --- /dev/null +++ b/cmake/find-external/CppAD/Findcppadcg.cmake @@ -0,0 +1,42 @@ +# +# Copyright 2020 CNRS INRIA +# +# Author: Guilhem Saurel +# + +# Try to find cppadcg in standard prefixes and in ${cppadcg_PREFIX} Once done +# this will define cppadcg_FOUND - System has cppadcg cppadcg_INCLUDE_DIR - The +# cppadcg include directories cppadcg_VERSION - Version of cppadcg found + +find_path( + cppadcg_INCLUDE_DIR + NAMES cppad/cg.hpp + PATHS ${cppadcg_PREFIX} + PATH_SUFFIXES include +) + +if( + cppadcg_INCLUDE_DIR + AND EXISTS "${cppadcg_INCLUDE_DIR}/cppad/cg/configure.hpp" +) + file( + STRINGS "${cppadcg_INCLUDE_DIR}/cppad/cg/configure.hpp" + cppadcg_version_str + REGEX "^#define[\t ]+CPPAD_CG_VERSION[\t ]+\"cppadcg-.*\"" + ) + string( + REGEX REPLACE + "^#define[\t ]+CPPAD_CG_VERSION[\t ]+\"cppadcg-([^\"]*)\".*" + "\\1" + cppadcg_VERSION + "${cppadcg_version_str}" + ) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + cppadcg + REQUIRED_VARS cppadcg_INCLUDE_DIR + VERSION_VAR cppadcg_VERSION +) +mark_as_advanced(cppadcg_INCLUDE_DIR) From f5600c393176947da3c0564b82030fb84ad2b0b9 Mon Sep 17 00:00:00 2001 From: Joris Vaillant Date: Fri, 24 Jul 2026 11:05:04 +0200 Subject: [PATCH 10/32] cmake: Modify Findcppad.cmake to create a target --- cmake/find-external/CppAD/Findcppad.cmake | 57 ++++++++++------------- 1 file changed, 25 insertions(+), 32 deletions(-) diff --git a/cmake/find-external/CppAD/Findcppad.cmake b/cmake/find-external/CppAD/Findcppad.cmake index 5faca0b9c8..043a2ee90c 100644 --- a/cmake/find-external/CppAD/Findcppad.cmake +++ b/cmake/find-external/CppAD/Findcppad.cmake @@ -1,41 +1,24 @@ -# -# Copyright 2020 CNRS INRIA -# -# Author: Guilhem Saurel, Rohan Budhiraja -# +# Copyright 2026 Inria -# Try to find cppad in standard prefixes and in ${cppad_PREFIX} Once done this -# will define cppad_FOUND - System has cppad cppad_INCLUDE_DIR - The cppad -# include directories cppad_LIBRARY - The libraries needed to use cppad -# cppad_DEFINITIONS - Compiler switches required for using cppad cppad_VERSION - -# Version of cppad found +find_path(cppad_INCLUDE_DIR NAMES cppad/configure.hpp) +find_library(cppad_LIBRARY NAMES cppad_lib) -find_path( - cppad_INCLUDE_DIR - NAMES cppad/configure.hpp - PATHS ${cppad_PREFIX} - PATH_SUFFIXES include -) -find_library( - cppad_LIBRARY - NAMES cppad_lib - PATHS ${cppad_PREFIX} - PATH_SUFFIXES lib -) +mark_as_advanced(cppad_LIBRARY cppad_INCLUDE_DIR) -if(cppad_INCLUDE_DIR AND EXISTS "${cppad_INCLUDE_DIR}/cppad/configure.hpp") +if(cppad_INCLUDE_DIR AND NOT TARGET cppad::cppad) file( - STRINGS "${cppad_INCLUDE_DIR}/cppad/configure.hpp" - cppad_version_str - REGEX "^# *define[\t ]+CPPAD_PACKAGE_STRING[\t ]+\"cppad-.*\"" + READ "${cppad_INCLUDE_DIR}/cppad/configure.hpp" + cppad_configure_hpp ) + # Version is stored on the following line: + # `# define CPPAD_PACKAGE_STRING "cppad-20260000.0"` string( - REGEX REPLACE - "^# *define[\t ]+CPPAD_PACKAGE_STRING[\t ]+\"cppad-([^\"]*)\".*" - "\\1" - cppad_VERSION - "${cppad_version_str}" + REGEX MATCH + "#[\t ]+define[\t ]+CPPAD_PACKAGE_STRING[\t ]+\"cppad-([0-9\.]*)\"" + _ + ${cppad_configure_hpp} ) + set(cppad_VERSION ${CMAKE_MATCH_1}) endif() include(FindPackageHandleStandardArgs) @@ -44,4 +27,14 @@ find_package_handle_standard_args( REQUIRED_VARS cppad_LIBRARY cppad_INCLUDE_DIR VERSION_VAR cppad_VERSION ) -mark_as_advanced(cppad_INCLUDE_DIR cppad_LIBRARY) + +if(cppad_FOUND AND NOT TARGET cppad::cppad) + add_library(cppad::cppad UNKNOWN IMPORTED) + set_target_properties( + cppad::cppad + PROPERTIES + IMPORTED_LOCATION ${cppad_LIBRARY} + VERSION ${cppad_VERSION} + INCLUDE_DIRECTORIES ${cppad_INCLUDE_DIR} + ) +endif() From c61bc877c4422836e90f5f6828cfca3dd3359359 Mon Sep 17 00:00:00 2001 From: Joris Vaillant Date: Fri, 24 Jul 2026 11:17:43 +0200 Subject: [PATCH 11/32] cmake: Modify Findcppadcg.cmake to create a target --- cmake/find-external/CppAD/Findcppadcg.cmake | 47 ++++++++++----------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/cmake/find-external/CppAD/Findcppadcg.cmake b/cmake/find-external/CppAD/Findcppadcg.cmake index ca0acb700a..a743214991 100644 --- a/cmake/find-external/CppAD/Findcppadcg.cmake +++ b/cmake/find-external/CppAD/Findcppadcg.cmake @@ -1,36 +1,26 @@ -# -# Copyright 2020 CNRS INRIA -# -# Author: Guilhem Saurel -# - -# Try to find cppadcg in standard prefixes and in ${cppadcg_PREFIX} Once done -# this will define cppadcg_FOUND - System has cppadcg cppadcg_INCLUDE_DIR - The -# cppadcg include directories cppadcg_VERSION - Version of cppadcg found +# Copyright 2026 Inria find_path( cppadcg_INCLUDE_DIR NAMES cppad/cg.hpp - PATHS ${cppadcg_PREFIX} - PATH_SUFFIXES include ) -if( - cppadcg_INCLUDE_DIR - AND EXISTS "${cppadcg_INCLUDE_DIR}/cppad/cg/configure.hpp" -) +mark_as_advanced(cppadcg_INCLUDE_DIR) + +if(cppadcg_INCLUDE_DIR AND NOT TARGET cppadcg::cppadcg) file( - STRINGS "${cppadcg_INCLUDE_DIR}/cppad/cg/configure.hpp" - cppadcg_version_str - REGEX "^#define[\t ]+CPPAD_CG_VERSION[\t ]+\"cppadcg-.*\"" + READ "${cppadcg_INCLUDE_DIR}/cppad/cg/configure.hpp" + cppadcg_configure_hpp ) + # Version is stored on the following line: + # `#define CPPAD_CG_VERSION "cppadcg-2.5.0"` string( - REGEX REPLACE - "^#define[\t ]+CPPAD_CG_VERSION[\t ]+\"cppadcg-([^\"]*)\".*" - "\\1" - cppadcg_VERSION - "${cppadcg_version_str}" + REGEX MATCH + "#define[\t ]+CPPAD_CG_VERSION[\t ]+\"cppadcg-([0-9\.]*)\"" + _ + ${cppadcg_configure_hpp} ) + set(cppadcg_VERSION ${CMAKE_MATCH_1}) endif() include(FindPackageHandleStandardArgs) @@ -39,4 +29,13 @@ find_package_handle_standard_args( REQUIRED_VARS cppadcg_INCLUDE_DIR VERSION_VAR cppadcg_VERSION ) -mark_as_advanced(cppadcg_INCLUDE_DIR) + +if(cppadcg_FOUND AND NOT TARGET cppadcg::cppadcg) + add_library(cppadcg::cppadcg INTERFACE IMPORTED) + set_target_properties( + cppadcg::cppadcg + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${cppadcg_INCLUDE_DIR} + INTERFACE_VERSION ${cppadcg_VERSION} + ) +endif() From f2168b073b507309ea21bd4568f173784f4869a9 Mon Sep 17 00:00:00 2001 From: Joris Vaillant Date: Fri, 24 Jul 2026 11:39:11 +0200 Subject: [PATCH 12/32] cmake: Link cppad to dl --- cmake/find-external/CppAD/Findcppad.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/find-external/CppAD/Findcppad.cmake b/cmake/find-external/CppAD/Findcppad.cmake index 043a2ee90c..bda743bbb0 100644 --- a/cmake/find-external/CppAD/Findcppad.cmake +++ b/cmake/find-external/CppAD/Findcppad.cmake @@ -36,5 +36,6 @@ if(cppad_FOUND AND NOT TARGET cppad::cppad) IMPORTED_LOCATION ${cppad_LIBRARY} VERSION ${cppad_VERSION} INCLUDE_DIRECTORIES ${cppad_INCLUDE_DIR} + INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS} ) endif() From 53e9123f4dcee675c9f3d8bbeddc5bb141139d06 Mon Sep 17 00:00:00 2001 From: Joris Vaillant Date: Fri, 24 Jul 2026 11:48:02 +0200 Subject: [PATCH 13/32] cmake: Link cppadcg to cppad --- cmake/find-external/CppAD/Findcppadcg.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmake/find-external/CppAD/Findcppadcg.cmake b/cmake/find-external/CppAD/Findcppadcg.cmake index a743214991..a7acebed8e 100644 --- a/cmake/find-external/CppAD/Findcppadcg.cmake +++ b/cmake/find-external/CppAD/Findcppadcg.cmake @@ -30,6 +30,9 @@ find_package_handle_standard_args( VERSION_VAR cppadcg_VERSION ) +include(CMakeFindDependencyMacro) +find_dependency(cppad REQUIRED) + if(cppadcg_FOUND AND NOT TARGET cppadcg::cppadcg) add_library(cppadcg::cppadcg INTERFACE IMPORTED) set_target_properties( @@ -37,5 +40,6 @@ if(cppadcg_FOUND AND NOT TARGET cppadcg::cppadcg) PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${cppadcg_INCLUDE_DIR} INTERFACE_VERSION ${cppadcg_VERSION} + INTERFACE_LINK_LIBRARIES cppad::cppad ) endif() From 7432617978b016d1e7d0fbbc9c9330b28ac188ea Mon Sep 17 00:00:00 2001 From: Joris Vaillant Date: Fri, 24 Jul 2026 13:21:21 +0200 Subject: [PATCH 14/32] =?UTF-8?q?cmake:=C2=A0Don't=20use=20find=5Fdependen?= =?UTF-8?q?cy=20in=20find=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmake/find-external/CppAD/Findcppadcg.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/find-external/CppAD/Findcppadcg.cmake b/cmake/find-external/CppAD/Findcppadcg.cmake index a7acebed8e..db6f2f1f45 100644 --- a/cmake/find-external/CppAD/Findcppadcg.cmake +++ b/cmake/find-external/CppAD/Findcppadcg.cmake @@ -30,8 +30,8 @@ find_package_handle_standard_args( VERSION_VAR cppadcg_VERSION ) -include(CMakeFindDependencyMacro) -find_dependency(cppad REQUIRED) +# cppadcg depend of cppad +find_package(cppad REQUIRED) if(cppadcg_FOUND AND NOT TARGET cppadcg::cppadcg) add_library(cppadcg::cppadcg INTERFACE IMPORTED) From 660a0df467a7f3db548cf03c21a402a62349690d Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Fri, 24 Jul 2026 17:25:56 +0200 Subject: [PATCH 15/32] cmake: port cppad and cppadcg --- CMakeLists.txt | 264 ++++++++++++++++---- unittest/cpp/CMakeLists.txt | 55 ++-- unittest/cpp/cppad-joint-configurations.cpp | 2 +- 3 files changed, 248 insertions(+), 73 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c85dc5729a..75d466e83d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,7 +39,7 @@ jrl_option( BUILD_WITH_CASADI_SUPPORT "Build the library with the support of CAS jrl_option(BUILD_WITH_CODEGEN_SUPPORT "Build the library with the support of code generation (via CppADCodeGen)" OFF - CONDITION WIN32 + CONDITION "NOT WIN32" FALLBACK OFF ) jrl_option(BUILD_WITH_OPENMP_SUPPORT "Build the library with the OpenMP support" OFF) @@ -100,13 +100,27 @@ if(BUILD_WITH_URDF_SUPPORT) jrl_find_package(urdfdom REQUIRED) endif() +if(BUILD_WITH_CODEGEN_SUPPORT) + list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find-external/CppAD") + jrl_find_package(cppadcg REQUIRED) + set(BUILD_WITH_CPPAD_CODEGEN_SUPPORT TRUE) + set(BUILD_WITH_AUTODIFF_SUPPORT TRUE) +endif(BUILD_WITH_CODEGEN_SUPPORT) + + +if(BUILD_WITH_AUTODIFF_SUPPORT) +# TODO remove when jrl v2 provide findcppad in find modules + list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find-external/CppAD") + jrl_find_package(cppad REQUIRED) + +endif() + set(PINOCCHIO_MODEL_DIR "${PROJECT_SOURCE_DIR}/models") jrl_find_package(example-robot-data CONFIG REQUIRED EXPECTED_TARGETS example-robot-data::example-robot-data) # ---------------------------------------------------- # --- MAIN LIBRARY ----------------------------------- # ---------------------------------------------------- - add_library(pinocchio_headers INTERFACE) target_compile_features(pinocchio_headers INTERFACE cxx_std_17) jrl_target_generate_config_header(pinocchio_headers INTERFACE FILENAME pinocchio/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio) @@ -620,44 +634,48 @@ if(BUILD_WITH_COLLISION_SUPPORT) list(APPEND EXPORTED_TARGETS pinocchio_collision) endif() + +set(PINOCCHIO_CORE_INSTANTIATION_SOURCES + src/algorithm/cholesky.cpp + src/algorithm/aba.cpp + src/algorithm/regressor.cpp + src/algorithm/contact-dynamics.cpp + src/algorithm/frames-derivatives.cpp + src/algorithm/impulse-dynamics.cpp + src/algorithm/model.cpp + src/algorithm/constrained-dynamics.cpp + src/algorithm/rnea-derivatives.cpp + src/algorithm/compute-all-terms.cpp + src/algorithm/jacobian.cpp + src/algorithm/energy.cpp + src/algorithm/centroidal-derivatives.cpp + src/algorithm/frames.cpp + src/algorithm/constrained-dynamics-derivatives.cpp + src/algorithm/center-of-mass.cpp + src/algorithm/geometry.cpp + src/algorithm/kinematics.cpp + src/algorithm/rnea.cpp + src/algorithm/centroidal.cpp + src/algorithm/aba-derivatives.cpp + src/algorithm/crba.cpp + src/algorithm/constraint-cholesky.cpp + src/algorithm/joint-configuration.cpp + src/algorithm/center-of-mass-derivatives.cpp + src/algorithm/solvers/admm-solver.cpp + src/algorithm/solvers/pgs-solver.cpp + src/algorithm/kinematics-derivatives.cpp + src/algorithm/constraints/utils.cpp + src/multibody/model.cpp + src/multibody/data.cpp + src/multibody/sample-models.cpp + ) + if(ENABLE_TEMPLATE_INSTANTIATION) add_library(pinocchio_template_instantiation_default SHARED) target_sources( pinocchio_template_instantiation_default - PRIVATE - src/algorithm/cholesky.cpp - src/algorithm/aba.cpp - src/algorithm/regressor.cpp - src/algorithm/contact-dynamics.cpp - src/algorithm/frames-derivatives.cpp - src/algorithm/impulse-dynamics.cpp - src/algorithm/model.cpp - src/algorithm/constrained-dynamics.cpp - src/algorithm/rnea-derivatives.cpp - src/algorithm/compute-all-terms.cpp - src/algorithm/jacobian.cpp - src/algorithm/energy.cpp - src/algorithm/centroidal-derivatives.cpp - src/algorithm/frames.cpp - src/algorithm/constrained-dynamics-derivatives.cpp - src/algorithm/center-of-mass.cpp - src/algorithm/geometry.cpp - src/algorithm/kinematics.cpp - src/algorithm/rnea.cpp - src/algorithm/centroidal.cpp - src/algorithm/aba-derivatives.cpp - src/algorithm/crba.cpp - src/algorithm/constraint-cholesky.cpp - src/algorithm/joint-configuration.cpp - src/algorithm/center-of-mass-derivatives.cpp - src/algorithm/solvers/admm-solver.cpp - src/algorithm/solvers/pgs-solver.cpp - src/algorithm/kinematics-derivatives.cpp - src/algorithm/constraints/utils.cpp - src/multibody/model.cpp - src/multibody/data.cpp - src/multibody/sample-models.cpp + PRIVATE ${PINOCCHIO_CORE_INSTANTIATION_SOURCES} ) target_link_libraries( @@ -670,19 +688,17 @@ if(ENABLE_TEMPLATE_INSTANTIATION) PUBLIC PINOCCHIO_ENABLE_TEMPLATE_INSTANTIATION ) + set_target_properties(pinocchio_template_instantiation_default PROPERTIES DEFINE_SYMBOL "pinocchio_EXPORTS") + jrl_target_set_default_compile_options(pinocchio_template_instantiation_default PRIVATE) jrl_target_enforce_msvc_conformance(pinocchio_template_instantiation_default PRIVATE) - target_link_libraries( - pinocchio_default - INTERFACE pinocchio_template_instantiation_default - ) + target_link_libraries(pinocchio_default INTERFACE pinocchio_template_instantiation_default) list(APPEND EXPORTED_TARGETS pinocchio_template_instantiation_default) endif() # handle parsers - if(BUILD_WITH_URDF_SUPPORT OR BUILD_WITH_SDF_SUPPORT) set(BUILD_WITH_PARSERS_SUPPORT TRUE) else() @@ -795,7 +811,7 @@ if(BUILD_WITH_PARSERS_SUPPORT) BASE_DIRS include ) - # the following lines allows to link to SDFormat, indeed SDFormat has its version number in its target until version ==16, + # the following lines allows to link to SDFormat, indeed SDFormat has its version number in its target until version ==16 set( SDF_VERSIONS "15" @@ -826,7 +842,7 @@ if(BUILD_WITH_PARSERS_SUPPORT) pinocchio_parsers PUBLIC PINOCCHIO_WITH_SDFORMAT ) - + endif() @@ -847,6 +863,170 @@ if(BUILD_WITH_PARSERS_SUPPORT) list(APPEND EXPORTED_TARGETS pinocchio_parsers) endif() +# handle special scalars +if (BUILD_WITH_AUTODIFF_SUPPORT) + add_library(pinocchio_cppad_headers INTERFACE) + + # hpp + jrl_target_headers(pinocchio_cppad_headers PUBLIC + HEADERS + include/pinocchio/autodiff/cppad.hpp + BASE_DIRS include + ) + + # hxx + jrl_target_headers(pinocchio_cppad_headers PUBLIC + HEADERS + include/pinocchio/src/autodiff/cppad/algorithm/aba.hxx + include/pinocchio/src/autodiff/cppad/math/quaternion.hxx + include/pinocchio/src/autodiff/cppad/math/taylor-series-expansion.hxx + include/pinocchio/src/autodiff/cppad/spatial/log.hxx + include/pinocchio/src/autodiff/cppad/spatial/se3-tpl.hxx + include/pinocchio/src/autodiff/cppad/utils/static-if.hxx + BASE_DIRS include + ) + + target_link_libraries( + pinocchio_cppad_headers + INTERFACE pinocchio_headers ${cppad_LIBRARY} + ) + + target_include_directories( + pinocchio_cppad_headers SYSTEM + INTERFACE $ + ) + + target_compile_definitions( + pinocchio_cppad_headers + INTERFACE CPPAD_DEBUG_AND_RELEASE + ) + + add_library(pinocchio_cppad INTERFACE) + target_link_libraries(pinocchio_cppad INTERFACE pinocchio_cppad_headers) + target_compile_definitions( + pinocchio_cppad + INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppad.hxx" + ) + list(APPEND EXPORTED_TARGETS pinocchio_cppad pinocchio_cppad_headers) + + if(ENABLE_TEMPLATE_INSTANTIATION) + add_library(pinocchio_template_instantiation_cppad SHARED) + + target_sources( + pinocchio_template_instantiation_cppad + PRIVATE ${PINOCCHIO_CORE_INSTANTIATION_SOURCES} + ) + + target_link_libraries( + pinocchio_template_instantiation_cppad + PUBLIC pinocchio_cppad_headers + ) + + target_compile_definitions( + pinocchio_template_instantiation_cppad + PUBLIC PINOCCHIO_ENABLE_TEMPLATE_INSTANTIATION + PRIVATE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppad.hxx" + + ) + + # By default DEFINE_SYMBOL add -D${LIB_NAME}_EXPORTS. Don't use ${LIB_NAME}_EXPORTS define since + # pinocchio/config.hpp use pinocchio_EXPORTS. This allow to use the same DLLAPI define for all + # template instantiation libraries. + set_target_properties(pinocchio_template_instantiation_cppad PROPERTIES DEFINE_SYMBOL "pinocchio_EXPORTS") + + jrl_target_set_default_compile_options(pinocchio_template_instantiation_cppad PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_template_instantiation_cppad PRIVATE) + + target_link_libraries(pinocchio_cppad INTERFACE pinocchio_template_instantiation_cppad) + list(APPEND EXPORTED_TARGETS pinocchio_template_instantiation_cppad) + + endif() + +endif() + +if(BUILD_WITH_CODEGEN_SUPPORT) + add_library(pinocchio_cppadcg_headers INTERFACE) + + # hpp + jrl_target_headers(pinocchio_cppadcg_headers PUBLIC + HEADERS + include/pinocchio/codegen/cppadcg-algo.hpp + include/pinocchio/codegen/cppadcg.hpp + BASE_DIRS include + ) + + # hxx + jrl_target_headers(pinocchio_cppadcg_headers PUBLIC + HEADERS + include/pinocchio/src/codegen/cppadcg/algorithm/code-generator-algo.hxx + include/pinocchio/src/codegen/cppadcg/algorithm/code-generator-base.hxx + include/pinocchio/src/codegen/cppadcg/math/cast.hxx + include/pinocchio/src/codegen/cppadcg/math/taylor-series-expansion.hxx + BASE_DIRS include + ) + + target_link_libraries( + pinocchio_cppadcg_headers + INTERFACE + pinocchio_headers + ${cppadcg_LIBRARY} + ${cppad_LIBRARY} + ${CMAKE_DL_LIBS} + ) + + target_include_directories( + pinocchio_cppadcg_headers SYSTEM + INTERFACE + $ + $ + ) + + target_compile_definitions( + pinocchio_cppadcg_headers + INTERFACE CPPAD_DEBUG_AND_RELEASE) + + add_library(pinocchio_cppadcg INTERFACE) + target_link_libraries(pinocchio_cppadcg INTERFACE pinocchio_cppadcg_headers) + + target_compile_definitions( + pinocchio_cppadcg + INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppadcg.hxx") + + list(APPEND EXPORTED_TARGETS pinocchio_cppadcg pinocchio_cppadcg_headers) + + if(ENABLE_TEMPLATE_INSTANTIATION) + add_library(pinocchio_template_instantiation_cppadcg SHARED) + + target_sources( + pinocchio_template_instantiation_cppadcg + PRIVATE ${PINOCCHIO_CORE_INSTANTIATION_SOURCES} + ) + + target_link_libraries( + pinocchio_template_instantiation_cppadcg + PUBLIC pinocchio_cppadcg_headers + ) + + target_compile_definitions( + pinocchio_template_instantiation_cppadcg + PUBLIC PINOCCHIO_ENABLE_TEMPLATE_INSTANTIATION + PRIVATE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppadcg.hxx" + + ) + + set_target_properties(pinocchio_template_instantiation_cppadcg PROPERTIES DEFINE_SYMBOL "pinocchio_EXPORTS") + + jrl_target_set_default_compile_options(pinocchio_template_instantiation_cppadcg PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_template_instantiation_cppadcg PRIVATE) + + target_link_libraries(pinocchio_cppadcg INTERFACE pinocchio_template_instantiation_cppadcg) + list(APPEND EXPORTED_TARGETS pinocchio_template_instantiation_cppadcg) + + endif() +endif() + + + # ---------------------------------------------------- # --- UNIT TESTS --------------------------------------- # ---------------------------------------------------- diff --git a/unittest/cpp/CMakeLists.txt b/unittest/cpp/CMakeLists.txt index 37fe314d8f..0e8ae9144d 100644 --- a/unittest/cpp/CMakeLists.txt +++ b/unittest/cpp/CMakeLists.txt @@ -231,9 +231,9 @@ endif() if(BUILD_WITH_AUTODIFF_SUPPORT) macro(ADD_CPPAD_UNIT_TEST name) - include_directories(SYSTEM ${cppad_INCLUDE_DIR}) add_pinocchio_unit_test(${name}) - add_dependencies(pinocchio-test-cpp-cppad ${NAME}) + add_dependencies(pinocchio-test-cpp-cppad pinocchio-test-cpp-${name}) + target_link_libraries(pinocchio-test-cpp-${name} PRIVATE pinocchio_cppad_headers) endmacro() if(BUILD_WITH_AUTODIFF_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) @@ -241,42 +241,37 @@ if(BUILD_WITH_AUTODIFF_SUPPORT) set_target_properties(pinocchio-test-cpp-cppad PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True ) - - add_cppad_unit_test(basic) - add_cppad_unit_test(spatial) - add_cppad_unit_test(joints) - add_cppad_unit_test(algorithms) - add_cppad_unit_test(derivatives) - add_cppad_unit_test(joint-configurations) + add_cppad_unit_test(cppad-basic) + add_cppad_unit_test(cppad-spatial) + add_cppad_unit_test(cppad-joints) + add_cppad_unit_test(cppad-algorithms) + add_cppad_unit_test(cppad-derivatives) + add_cppad_unit_test(cppad-joint-configurations) endif() endif() if(BUILD_WITH_CODEGEN_SUPPORT) macro(ADD_CPPADCG_UNIT_TEST name) - include_directories(SYSTEM ${cppad_INCLUDE_DIR}) - include_directories(SYSTEM ${cppadcodegen_INCLUDE_DIR}) - add_pinocchio_unit_test(${name} PACKAGES ${cppad_LIBRARY} ${CMAKE_DL_LIBS}) - add_dependencies(pinocchio-test-cpp-cppadcg ${NAME}) + add_pinocchio_unit_test(${name}) + add_dependencies(pinocchio-test-cpp-cppadcg pinocchio-test-cpp-${name}) target_compile_definitions( - ${NAME} + pinocchio-test-cpp-${name} PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" ) + target_link_libraries(pinocchio-test-cpp-${name} PRIVATE pinocchio_cppadcg_headers) endmacro() - if(BUILD_WITH_AUTODIFF_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) - if(BUILD_WITH_CODEGEN_SUPPORT) - add_custom_target(pinocchio-test-cpp-cppadcg) - set_target_properties( - pinocchio-test-cpp-cppadcg - PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True - ) - - add_cppadcg_unit_test(basic) - if(BUILD_ADVANCED_TESTING) - add_cppadcg_unit_test(algorithms) - add_cppadcg_unit_test(joint-configurations) - add_cppadcg_unit_test(contact-dynamics) - endif() + if( NOT BUILD_STANDALONE_PYTHON_INTERFACE) + add_custom_target(pinocchio-test-cpp-cppadcg) + set_target_properties( + pinocchio-test-cpp-cppadcg + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True + ) + add_cppadcg_unit_test(cppadcg-basic) + if(BUILD_ADVANCED_TESTING) + add_cppadcg_unit_test(cppadcg-algorithms) + add_cppadcg_unit_test(cppadcg-joint-configurations) + add_cppadcg_unit_test(cppadcg-contact-dynamics) endif() endif() endif() @@ -284,8 +279,8 @@ endif() if(BUILD_WITH_CASADI_SUPPORT) macro(ADD_CASADI_UNIT_TEST name) add_pinocchio_unit_test(${name} PACKAGES casadi::casadi) - set_tests_properties(${NAME} PROPERTIES TIMEOUT 3000) - add_dependencies(pinocchio-test-casadi ${NAME}) + set_tests_properties(${name} PROPERTIES TIMEOUT 3000) + add_dependencies(pinocchio-test-casadi ${name}) endmacro() if(BUILD_WITH_CASADI_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) diff --git a/unittest/cpp/cppad-joint-configurations.cpp b/unittest/cpp/cppad-joint-configurations.cpp index aa3e4e2726..49c2ba1dfd 100644 --- a/unittest/cpp/cppad-joint-configurations.cpp +++ b/unittest/cpp/cppad-joint-configurations.cpp @@ -8,7 +8,7 @@ #include "pinocchio/multibody.hpp" -#include "../utils/model-generator.hpp" +#include "utils/model-generator.hpp" #include From 2336b31164374681b180e0ce7ab0be40438307aa Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Mon, 27 Jul 2026 15:03:19 +0200 Subject: [PATCH 16/32] cmake: refactor header and template instantiation targets creation and port casadi --- CMakeLists.txt | 291 ++++++++++++++++++------------------ unittest/cpp/CMakeLists.txt | 10 +- 2 files changed, 147 insertions(+), 154 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 75d466e83d..9092675489 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -118,18 +118,105 @@ endif() set(PINOCCHIO_MODEL_DIR "${PROJECT_SOURCE_DIR}/models") jrl_find_package(example-robot-data CONFIG REQUIRED EXPECTED_TARGETS example-robot-data::example-robot-data) +if(BUILD_WITH_CASADI_SUPPORT) + jrl_find_package(casadi REQUIRED) + # TODO remove ? + # if(NOT TARGET casadi::casadi AND TARGET casadi) + # add_library(casadi::casadi ALIAS casadi) + # endif() +endif() + +# ---------------------------------------------------- +# --- FUNCTIONS ------------------------------------- +# ---------------------------------------------------- +macro(add_header_and_template_instantiation_targets name) + add_library(${name}_headers INTERFACE) + + add_library(${name} INTERFACE) + target_link_libraries(${name} INTERFACE ${name}_headers) + list(APPEND EXPORTED_TARGETS ${name} ${name}_headers) + + if(ENABLE_TEMPLATE_INSTANTIATION) + add_library(${name}_template_instantiation SHARED) + target_sources( + ${name}_template_instantiation + PRIVATE ${PINOCCHIO_CORE_INSTANTIATION_SOURCES} + ) + + target_link_libraries( + ${name}_template_instantiation + PUBLIC ${name}_headers + ) + + target_compile_definitions( + ${name}_template_instantiation + PUBLIC PINOCCHIO_ENABLE_TEMPLATE_INSTANTIATION + ) + # By default DEFINE_SYMBOL add -D${LIB_NAME}_EXPORTS. Don't use ${LIB_NAME}_EXPORTS define since + # pinocchio/config.hpp use pinocchio_EXPORTS. This allow to use the same DLLAPI define for all + # template instantiation libraries. + set_target_properties(${name}_template_instantiation PROPERTIES DEFINE_SYMBOL "pinocchio_EXPORTS") + jrl_target_set_default_compile_options(${name}_template_instantiation PRIVATE) + jrl_target_enforce_msvc_conformance(${name}_template_instantiation PRIVATE) + target_link_libraries(${name} INTERFACE ${name}_template_instantiation) + + list(APPEND EXPORTED_TARGETS ${name}_template_instantiation) + endif() +endmacro() + +set(PINOCCHIO_CORE_INSTANTIATION_SOURCES + src/algorithm/cholesky.cpp + src/algorithm/aba.cpp + src/algorithm/regressor.cpp + src/algorithm/contact-dynamics.cpp + src/algorithm/frames-derivatives.cpp + src/algorithm/impulse-dynamics.cpp + src/algorithm/model.cpp + src/algorithm/constrained-dynamics.cpp + src/algorithm/rnea-derivatives.cpp + src/algorithm/compute-all-terms.cpp + src/algorithm/jacobian.cpp + src/algorithm/energy.cpp + src/algorithm/centroidal-derivatives.cpp + src/algorithm/frames.cpp + src/algorithm/constrained-dynamics-derivatives.cpp + src/algorithm/center-of-mass.cpp + src/algorithm/geometry.cpp + src/algorithm/kinematics.cpp + src/algorithm/rnea.cpp + src/algorithm/centroidal.cpp + src/algorithm/aba-derivatives.cpp + src/algorithm/crba.cpp + src/algorithm/constraint-cholesky.cpp + src/algorithm/joint-configuration.cpp + src/algorithm/center-of-mass-derivatives.cpp + src/algorithm/solvers/admm-solver.cpp + src/algorithm/solvers/pgs-solver.cpp + src/algorithm/kinematics-derivatives.cpp + src/algorithm/constraints/utils.cpp + src/multibody/model.cpp + src/multibody/data.cpp + src/multibody/sample-models.cpp +) + # ---------------------------------------------------- # --- MAIN LIBRARY ----------------------------------- # ---------------------------------------------------- -add_library(pinocchio_headers INTERFACE) -target_compile_features(pinocchio_headers INTERFACE cxx_std_17) -jrl_target_generate_config_header(pinocchio_headers INTERFACE FILENAME pinocchio/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio) -jrl_target_generate_warning_header(pinocchio_headers INTERFACE FILENAME pinocchio/warning.hpp LIBRARY_NAME pinocchio) -jrl_target_generate_deprecated_header(pinocchio_headers INTERFACE FILENAME pinocchio/deprecated.hpp LIBRARY_NAME pinocchio) -jrl_target_generate_tracy_header(pinocchio_headers INTERFACE FILENAME pinocchio/tracy.hpp LIBRARY_NAME pinocchio) +# Target to link against all pinocchio libraries +add_library(pinocchio INTERFACE) +add_library(pinocchio::pinocchio ALIAS pinocchio) +set(EXPORTED_TARGETS pinocchio) + +add_header_and_template_instantiation_targets(pinocchio_default) + +target_compile_features(pinocchio_default_headers INTERFACE cxx_std_17) +jrl_target_generate_config_header(pinocchio_default_headers INTERFACE FILENAME pinocchio/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio) +jrl_target_generate_warning_header(pinocchio_default_headers INTERFACE FILENAME pinocchio/warning.hpp LIBRARY_NAME pinocchio) +jrl_target_generate_deprecated_header(pinocchio_default_headers INTERFACE FILENAME pinocchio/deprecated.hpp LIBRARY_NAME pinocchio) +jrl_target_generate_tracy_header(pinocchio_default_headers INTERFACE FILENAME pinocchio/tracy.hpp LIBRARY_NAME pinocchio) target_compile_definitions( - pinocchio_headers + pinocchio_default_headers INTERFACE BOOST_MPL_LIMIT_LIST_SIZE=30 BOOST_MPL_LIMIT_VECTOR_SIZE=30 @@ -140,12 +227,12 @@ target_compile_definitions( ) target_link_libraries( - pinocchio_headers + pinocchio_default_headers INTERFACE Eigen3::Eigen Boost::boost Boost::serialization ) target_include_directories( - pinocchio_headers + pinocchio_default_headers INTERFACE $ $ @@ -153,7 +240,7 @@ target_include_directories( # Dependency free headers # Root, algorithm, common, containers, math, multibody, serialization, spatial, utils -jrl_target_headers(pinocchio_headers PUBLIC +jrl_target_headers(pinocchio_default_headers PUBLIC HEADERS include/pinocchio/algorithm/aba-derivatives.hpp include/pinocchio/algorithm/aba.hpp @@ -263,7 +350,7 @@ jrl_target_headers(pinocchio_headers PUBLIC BASE_DIRS include ) -jrl_target_headers(pinocchio_headers PUBLIC +jrl_target_headers(pinocchio_default_headers PUBLIC HEADERS include/pinocchio/src/visualizers/base-visualizer.hxx include/pinocchio/src/common/fwd.hxx @@ -271,10 +358,7 @@ jrl_target_headers(pinocchio_headers PUBLIC include/pinocchio/src/common/data-entity.hxx include/pinocchio/src/eigen-macros.hxx include/pinocchio/src/context/generic.hxx - include/pinocchio/src/context/casadi.hxx - include/pinocchio/src/context/cppad.hxx include/pinocchio/src/context/default.hxx - include/pinocchio/src/context/cppadcg.hxx include/pinocchio/src/multibody/data.hxx include/pinocchio/src/multibody/model-item.hxx include/pinocchio/src/multibody/joint-motion-subspace-base.hxx @@ -567,16 +651,8 @@ jrl_target_headers(pinocchio_headers PUBLIC BASE_DIRS include ) -# Target to link against all pinocchio libraries -add_library(pinocchio INTERFACE) -add_library(pinocchio::pinocchio ALIAS pinocchio) - -add_library(pinocchio_default INTERFACE) -target_link_libraries(pinocchio_default INTERFACE pinocchio_headers) target_link_libraries(pinocchio INTERFACE pinocchio_default) -# List of exported targets -set(EXPORTED_TARGETS pinocchio pinocchio_default pinocchio_headers) if(BUILD_WITH_COLLISION_SUPPORT) add_library(pinocchio_collision SHARED) @@ -634,70 +710,6 @@ if(BUILD_WITH_COLLISION_SUPPORT) list(APPEND EXPORTED_TARGETS pinocchio_collision) endif() - -set(PINOCCHIO_CORE_INSTANTIATION_SOURCES - src/algorithm/cholesky.cpp - src/algorithm/aba.cpp - src/algorithm/regressor.cpp - src/algorithm/contact-dynamics.cpp - src/algorithm/frames-derivatives.cpp - src/algorithm/impulse-dynamics.cpp - src/algorithm/model.cpp - src/algorithm/constrained-dynamics.cpp - src/algorithm/rnea-derivatives.cpp - src/algorithm/compute-all-terms.cpp - src/algorithm/jacobian.cpp - src/algorithm/energy.cpp - src/algorithm/centroidal-derivatives.cpp - src/algorithm/frames.cpp - src/algorithm/constrained-dynamics-derivatives.cpp - src/algorithm/center-of-mass.cpp - src/algorithm/geometry.cpp - src/algorithm/kinematics.cpp - src/algorithm/rnea.cpp - src/algorithm/centroidal.cpp - src/algorithm/aba-derivatives.cpp - src/algorithm/crba.cpp - src/algorithm/constraint-cholesky.cpp - src/algorithm/joint-configuration.cpp - src/algorithm/center-of-mass-derivatives.cpp - src/algorithm/solvers/admm-solver.cpp - src/algorithm/solvers/pgs-solver.cpp - src/algorithm/kinematics-derivatives.cpp - src/algorithm/constraints/utils.cpp - src/multibody/model.cpp - src/multibody/data.cpp - src/multibody/sample-models.cpp - ) - -if(ENABLE_TEMPLATE_INSTANTIATION) - add_library(pinocchio_template_instantiation_default SHARED) - - target_sources( - pinocchio_template_instantiation_default - PRIVATE ${PINOCCHIO_CORE_INSTANTIATION_SOURCES} - ) - - target_link_libraries( - pinocchio_template_instantiation_default - PUBLIC pinocchio_headers - ) - - target_compile_definitions( - pinocchio_template_instantiation_default - PUBLIC PINOCCHIO_ENABLE_TEMPLATE_INSTANTIATION - ) - - set_target_properties(pinocchio_template_instantiation_default PROPERTIES DEFINE_SYMBOL "pinocchio_EXPORTS") - - jrl_target_set_default_compile_options(pinocchio_template_instantiation_default PRIVATE) - jrl_target_enforce_msvc_conformance(pinocchio_template_instantiation_default PRIVATE) - - target_link_libraries(pinocchio_default INTERFACE pinocchio_template_instantiation_default) - - list(APPEND EXPORTED_TARGETS pinocchio_template_instantiation_default) -endif() - # handle parsers if(BUILD_WITH_URDF_SUPPORT OR BUILD_WITH_SDF_SUPPORT) set(BUILD_WITH_PARSERS_SUPPORT TRUE) @@ -865,16 +877,13 @@ endif() # handle special scalars if (BUILD_WITH_AUTODIFF_SUPPORT) - add_library(pinocchio_cppad_headers INTERFACE) + add_header_and_template_instantiation_targets(pinocchio_cppad) - # hpp jrl_target_headers(pinocchio_cppad_headers PUBLIC HEADERS include/pinocchio/autodiff/cppad.hpp BASE_DIRS include ) - - # hxx jrl_target_headers(pinocchio_cppad_headers PUBLIC HEADERS include/pinocchio/src/autodiff/cppad/algorithm/aba.hxx @@ -888,7 +897,7 @@ if (BUILD_WITH_AUTODIFF_SUPPORT) target_link_libraries( pinocchio_cppad_headers - INTERFACE pinocchio_headers ${cppad_LIBRARY} + INTERFACE pinocchio_default_headers ${cppad_LIBRARY} ) target_include_directories( @@ -901,53 +910,24 @@ if (BUILD_WITH_AUTODIFF_SUPPORT) INTERFACE CPPAD_DEBUG_AND_RELEASE ) - add_library(pinocchio_cppad INTERFACE) - target_link_libraries(pinocchio_cppad INTERFACE pinocchio_cppad_headers) target_compile_definitions( pinocchio_cppad INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppad.hxx" ) - list(APPEND EXPORTED_TARGETS pinocchio_cppad pinocchio_cppad_headers) if(ENABLE_TEMPLATE_INSTANTIATION) - add_library(pinocchio_template_instantiation_cppad SHARED) - - target_sources( - pinocchio_template_instantiation_cppad - PRIVATE ${PINOCCHIO_CORE_INSTANTIATION_SOURCES} - ) - - target_link_libraries( - pinocchio_template_instantiation_cppad - PUBLIC pinocchio_cppad_headers - ) - target_compile_definitions( - pinocchio_template_instantiation_cppad - PUBLIC PINOCCHIO_ENABLE_TEMPLATE_INSTANTIATION + pinocchio_cppad_template_instantiation PRIVATE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppad.hxx" ) - - # By default DEFINE_SYMBOL add -D${LIB_NAME}_EXPORTS. Don't use ${LIB_NAME}_EXPORTS define since - # pinocchio/config.hpp use pinocchio_EXPORTS. This allow to use the same DLLAPI define for all - # template instantiation libraries. - set_target_properties(pinocchio_template_instantiation_cppad PROPERTIES DEFINE_SYMBOL "pinocchio_EXPORTS") - - jrl_target_set_default_compile_options(pinocchio_template_instantiation_cppad PRIVATE) - jrl_target_enforce_msvc_conformance(pinocchio_template_instantiation_cppad PRIVATE) - - target_link_libraries(pinocchio_cppad INTERFACE pinocchio_template_instantiation_cppad) - list(APPEND EXPORTED_TARGETS pinocchio_template_instantiation_cppad) - endif() endif() if(BUILD_WITH_CODEGEN_SUPPORT) - add_library(pinocchio_cppadcg_headers INTERFACE) + add_header_and_template_instantiation_targets(pinocchio_cppadcg) - # hpp jrl_target_headers(pinocchio_cppadcg_headers PUBLIC HEADERS include/pinocchio/codegen/cppadcg-algo.hpp @@ -955,7 +935,6 @@ if(BUILD_WITH_CODEGEN_SUPPORT) BASE_DIRS include ) - # hxx jrl_target_headers(pinocchio_cppadcg_headers PUBLIC HEADERS include/pinocchio/src/codegen/cppadcg/algorithm/code-generator-algo.hxx @@ -968,7 +947,7 @@ if(BUILD_WITH_CODEGEN_SUPPORT) target_link_libraries( pinocchio_cppadcg_headers INTERFACE - pinocchio_headers + pinocchio_default_headers ${cppadcg_LIBRARY} ${cppad_LIBRARY} ${CMAKE_DL_LIBS} @@ -985,48 +964,62 @@ if(BUILD_WITH_CODEGEN_SUPPORT) pinocchio_cppadcg_headers INTERFACE CPPAD_DEBUG_AND_RELEASE) - add_library(pinocchio_cppadcg INTERFACE) - target_link_libraries(pinocchio_cppadcg INTERFACE pinocchio_cppadcg_headers) - target_compile_definitions( pinocchio_cppadcg INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppadcg.hxx") - list(APPEND EXPORTED_TARGETS pinocchio_cppadcg pinocchio_cppadcg_headers) - if(ENABLE_TEMPLATE_INSTANTIATION) - add_library(pinocchio_template_instantiation_cppadcg SHARED) - - target_sources( - pinocchio_template_instantiation_cppadcg - PRIVATE ${PINOCCHIO_CORE_INSTANTIATION_SOURCES} - ) - - target_link_libraries( - pinocchio_template_instantiation_cppadcg - PUBLIC pinocchio_cppadcg_headers - ) - target_compile_definitions( - pinocchio_template_instantiation_cppadcg - PUBLIC PINOCCHIO_ENABLE_TEMPLATE_INSTANTIATION + pinocchio_cppadcg_template_instantiation PRIVATE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppadcg.hxx" - ) + endif() +endif() - set_target_properties(pinocchio_template_instantiation_cppadcg PROPERTIES DEFINE_SYMBOL "pinocchio_EXPORTS") +if (BUILD_WITH_CASADI_SUPPORT) + add_header_and_template_instantiation_targets(pinocchio_casadi) + + jrl_target_headers(pinocchio_cppadcg_headers PUBLIC + HEADERS + include/pinocchio/autodiff/casadi-algo.hpp + include/pinocchio/autodiff/casadi.hpp + BASE_DIRS include + ) - jrl_target_set_default_compile_options(pinocchio_template_instantiation_cppadcg PRIVATE) - jrl_target_enforce_msvc_conformance(pinocchio_template_instantiation_cppadcg PRIVATE) + jrl_target_headers(pinocchio_cppadcg_headers PUBLIC + HEADERS + include/pinocchio/src/autodiff/casadi/algorithm/algo.hxx + include/pinocchio/src/autodiff/casadi/math/alias.hxx + include/pinocchio/src/autodiff/casadi/math/matrix.hxx + include/pinocchio/src/autodiff/casadi/math/quaternion.hxx + include/pinocchio/src/autodiff/casadi/math/taylor-series-expansion.hxx + include/pinocchio/src/autodiff/casadi/math/triangular-matrix.hxx + include/pinocchio/src/autodiff/casadi/spatial/se3-tpl.hxx + include/pinocchio/src/autodiff/casadi/utils/static-if.hxx + BASE_DIRS include + ) - target_link_libraries(pinocchio_cppadcg INTERFACE pinocchio_template_instantiation_cppadcg) - list(APPEND EXPORTED_TARGETS pinocchio_template_instantiation_cppadcg) + target_link_libraries( + pinocchio_casadi_headers + INTERFACE + pinocchio_default_headers + casadi::casadi + ) + target_compile_definitions( + pinocchio_casadi + INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/casadi.hxx") + if(ENABLE_TEMPLATE_INSTANTIATION) + target_compile_definitions( + pinocchio_casadi_template_instantiation + PRIVATE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/casadi.hxx" + ) endif() endif() + # ---------------------------------------------------- # --- UNIT TESTS --------------------------------------- # ---------------------------------------------------- diff --git a/unittest/cpp/CMakeLists.txt b/unittest/cpp/CMakeLists.txt index 0e8ae9144d..7b46296a8c 100644 --- a/unittest/cpp/CMakeLists.txt +++ b/unittest/cpp/CMakeLists.txt @@ -278,14 +278,14 @@ endif() if(BUILD_WITH_CASADI_SUPPORT) macro(ADD_CASADI_UNIT_TEST name) - add_pinocchio_unit_test(${name} PACKAGES casadi::casadi) - set_tests_properties(${name} PROPERTIES TIMEOUT 3000) - add_dependencies(pinocchio-test-casadi ${name}) + add_pinocchio_unit_test(${name}) + add_dependencies(pinocchio-test-cpp-casadi pinocchio-test-cpp-${name}) + target_link_libraries(pinocchio-test-cpp-${name} PRIVATE pinocchio_casadi_headers) endmacro() if(BUILD_WITH_CASADI_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) - add_custom_target(pinocchio-test-casadi) - set_target_properties( pinocchio-test-casadi + add_custom_target(pinocchio-test-cpp-casadi) + set_target_properties( pinocchio-test-cpp-casadi PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True ) From a62961d8d63f93dcc37316f11c24414cdde5f807 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Tue, 28 Jul 2026 10:27:06 +0200 Subject: [PATCH 17/32] cmake: port extra support --- CMakeLists.txt | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9092675489..d40eb1dbd3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -126,6 +126,10 @@ if(BUILD_WITH_CASADI_SUPPORT) # endif() endif() +if(BUILD_WITH_EXTRA_SUPPORT) + jrl_find_package(Qhull COMPONENTS qhullcpp qhull_r REQUIRED) +endif() + # ---------------------------------------------------- # --- FUNCTIONS ------------------------------------- # ---------------------------------------------------- @@ -1017,7 +1021,43 @@ if (BUILD_WITH_CASADI_SUPPORT) endif() endif() +if(BUILD_WITH_EXTRA_SUPPORT) + add_library(pinocchio_extra SHARED) + + target_sources( + pinocchio_extra + PRIVATE src/extra/reachable-workspace.cpp + ) + jrl_target_headers(pinocchio_extra PUBLIC + HEADERS + include/pinocchio/extra/reachable-workspace.hpp + BASE_DIRS include + ) + + jrl_target_headers(pinocchio_extra PUBLIC + HEADERS + include/pinocchio/src/extra/reachable-workspace.hxx + BASE_DIRS include + ) + + target_link_libraries( + pinocchio_extra + PUBLIC pinocchio_default Qhull::qhullcpp Qhull::qhull_r + ) + + target_compile_definitions( + pinocchio_extra + PUBLIC PINOCCHIO_WITH_EXTRA_SUPPORT + ) + + jrl_target_set_default_compile_options(pinocchio_extra PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_extra PRIVATE) + jrl_target_generate_config_header(pinocchio_extra INTERFACE FILENAME pinocchio/extra/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_extra) + + target_link_libraries(pinocchio INTERFACE pinocchio_extra) + list(APPEND EXPORTED_TARGETS pinocchio_extra) +endif() # ---------------------------------------------------- From e333cd30bd10ac7418b35a869ffa28bca3d9383c Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Tue, 28 Jul 2026 16:25:12 +0200 Subject: [PATCH 18/32] cmake: port RTSAN --- unittest/cpp/CMakeLists.txt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/unittest/cpp/CMakeLists.txt b/unittest/cpp/CMakeLists.txt index 7b46296a8c..f54cffe793 100644 --- a/unittest/cpp/CMakeLists.txt +++ b/unittest/cpp/CMakeLists.txt @@ -307,18 +307,16 @@ endif() if(BUILD_WITH_RTSAN) add_pinocchio_unit_test(dynamic-allocations) - #TODO remove following line when BUILD_WITH_RTSAN is handled - #get_cpp_test_name(dynamic-allocations ${CMAKE_CURRENT_SOURCE_DIR} test_name) - target_compile_options(${test_name} PRIVATE -fsanitize=realtime) - target_link_options(${test_name} PRIVATE -fsanitize=realtime) + target_compile_options(pinocchio-test-cpp-dynamic-allocations PRIVATE -fsanitize=realtime) + target_link_options(pinocchio-test-cpp-dynamic-allocations PRIVATE -fsanitize=realtime) # On osx-arm64 mutex are called to initialize some static variables. # We use a suppression file to make this test pass. if(APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") set_tests_properties( - ${test_name} + pinocchio-test-cpp-dynamic-allocations PROPERTIES ENVIRONMENT_MODIFICATION "RTSAN_OPTIONS=path_list_append:suppressions=${CMAKE_CURRENT_SOURCE_DIR}/dynamic-allocations-osx-arm64.supp" ) endif() -endif() +endif() \ No newline at end of file From f92b52d1c826460459431f71e5250edd7792ad32 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Tue, 28 Jul 2026 17:24:52 +0200 Subject: [PATCH 19/32] cmake: port GMP and MPFR and DEPRECATED_HEADERS --- CMakeLists.txt | 188 +++++++++++++++++++++++- cmake/find-external/GMP/FindGMP.cmake | 37 +++++ cmake/find-external/MPFR/FindMPFR.cmake | 119 +++++++++++++++ unittest/cpp/CMakeLists.txt | 2 +- 4 files changed, 344 insertions(+), 2 deletions(-) create mode 100644 cmake/find-external/GMP/FindGMP.cmake create mode 100644 cmake/find-external/MPFR/FindMPFR.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index d40eb1dbd3..51e4993425 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -130,6 +130,17 @@ if(BUILD_WITH_EXTRA_SUPPORT) jrl_find_package(Qhull COMPONENTS qhullcpp qhull_r REQUIRED) endif() +if( + PINOCCHIO_BUILD_MPFR_TESTING + OR BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT +) + list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find-external/GMP") + list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find-external/MPFR") + + find_package(GMP REQUIRED 6.0.0) + find_package(MPFR REQUIRED 4.0.0) +endif() + # ---------------------------------------------------- # --- FUNCTIONS ------------------------------------- # ---------------------------------------------------- @@ -657,7 +668,6 @@ jrl_target_headers(pinocchio_default_headers PUBLIC target_link_libraries(pinocchio INTERFACE pinocchio_default) - if(BUILD_WITH_COLLISION_SUPPORT) add_library(pinocchio_collision SHARED) @@ -1060,6 +1070,182 @@ if(BUILD_WITH_EXTRA_SUPPORT) endif() +# Header only part + deprecated +if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) + target_include_directories( + ${PROJECT_NAME}_default_headers + INTERFACE + $ + $ + ) + jrl_target_headers(pinocchio_default_headers PUBLIC + HEADERS + include/pinocchio/deprecated/pinocchio/math/gram-schmidt-orthonormalisation.hpp + include/pinocchio/deprecated/pinocchio/math/comparison-operators.hpp + include/pinocchio/deprecated/pinocchio/math/matrix-inverse-code-generated.hpp + include/pinocchio/deprecated/pinocchio/container/boost-container-limits.hpp + include/pinocchio/deprecated/pinocchio/container/aligned-vector.hpp + include/pinocchio/deprecated/pinocchio/math/tridiagonal-matrix.hpp + include/pinocchio/deprecated/pinocchio/math/matrix-product.hpp + include/pinocchio/deprecated/pinocchio/math/quaternion.hpp + include/pinocchio/deprecated/pinocchio/math/alias.hpp + include/pinocchio/deprecated/pinocchio/math/rotation.hpp + include/pinocchio/deprecated/pinocchio/math/sincos.hpp + include/pinocchio/deprecated/pinocchio/math/sign.hpp + include/pinocchio/deprecated/pinocchio/math/lanczos-decomposition.hpp + include/pinocchio/deprecated/pinocchio/math/matrix.hpp + include/pinocchio/deprecated/pinocchio/math/matrix-block.hpp + include/pinocchio/deprecated/pinocchio/math/taylor-expansion.hpp + include/pinocchio/deprecated/pinocchio/math/matrix-inverse.hpp + include/pinocchio/deprecated/pinocchio/math/rpy.hpp + include/pinocchio/deprecated/pinocchio/math/eigenvalues.hpp + include/pinocchio/deprecated/pinocchio/math/eigenvalues-tridiagonal-matrix.hpp + include/pinocchio/deprecated/pinocchio/math/triangular-matrix.hpp + include/pinocchio/deprecated/pinocchio/math/tensor.hpp + include/pinocchio/deprecated/pinocchio/multibody/model-item.hpp + include/pinocchio/deprecated/pinocchio/multibody/fcl.hpp + include/pinocchio/deprecated/pinocchio/multibody/geometry-object.hpp + include/pinocchio/deprecated/pinocchio/multibody/geometry-object-filter.hpp + include/pinocchio/deprecated/pinocchio/utils/file-explorer.hpp + include/pinocchio/deprecated/pinocchio/spatial/se3.hpp + include/pinocchio/deprecated/pinocchio/serialization/se3.hpp + include/pinocchio/deprecated/pinocchio/serialization/aligned-vector.hpp + include/pinocchio/deprecated/pinocchio/spatial/inertia.hpp + include/pinocchio/deprecated/pinocchio/serialization/inertia.hpp + include/pinocchio/deprecated/pinocchio/spatial/force.hpp + include/pinocchio/deprecated/pinocchio/serialization/csv.hpp + include/pinocchio/deprecated/pinocchio/spatial/skew.hpp + include/pinocchio/deprecated/pinocchio/serialization/joints.hpp + include/pinocchio/deprecated/pinocchio/spatial/motion.hpp + include/pinocchio/deprecated/pinocchio/serialization/force.hpp + include/pinocchio/deprecated/pinocchio/spatial/cartesian-axis.hpp + include/pinocchio/deprecated/pinocchio/serialization/joints-transform.hpp + include/pinocchio/deprecated/pinocchio/spatial/act-on-set.hpp + include/pinocchio/deprecated/pinocchio/serialization/spatial.hpp + include/pinocchio/deprecated/pinocchio/spatial/symmetric3.hpp + include/pinocchio/deprecated/pinocchio/serialization/joints-data.hpp + include/pinocchio/deprecated/pinocchio/spatial/classic-acceleration.hpp + include/pinocchio/deprecated/pinocchio/spatial/spatial-axis.hpp + include/pinocchio/deprecated/pinocchio/spatial/explog.hpp + include/pinocchio/deprecated/pinocchio/algorithm/contact-cholesky.hpp + include/pinocchio/deprecated/pinocchio/algorithm/contact-info.hpp + include/pinocchio/deprecated/pinocchio/algorithm/contact-jacobian.hpp + include/pinocchio/deprecated/pinocchio/serialization/constraints-set.hpp + include/pinocchio/deprecated/pinocchio/serialization/motion.hpp + include/pinocchio/deprecated/pinocchio/serialization/model.hpp + include/pinocchio/deprecated/pinocchio/serialization/joints-motion.hpp + include/pinocchio/deprecated/pinocchio/serialization/block-diagonal-matrix.hpp + include/pinocchio/deprecated/pinocchio/serialization/delassus.hpp + include/pinocchio/deprecated/pinocchio/serialization/joints-motion-subspace.hpp + include/pinocchio/deprecated/pinocchio/serialization/constraints-model.hpp + include/pinocchio/deprecated/pinocchio/serialization/geometry.hpp + include/pinocchio/deprecated/pinocchio/serialization/constraints-data.hpp + include/pinocchio/deprecated/pinocchio/serialization/coal.hpp + include/pinocchio/deprecated/pinocchio/serialization/fcl.hpp + include/pinocchio/deprecated/pinocchio/serialization/matrix-block-element.hpp + include/pinocchio/deprecated/pinocchio/serialization/symmetric3.hpp + include/pinocchio/deprecated/pinocchio/serialization/frame.hpp + include/pinocchio/deprecated/pinocchio/serialization/joints-model.hpp + include/pinocchio/deprecated/pinocchio/serialization/static-buffer.hpp + include/pinocchio/deprecated/pinocchio/serialization/vector.hpp + include/pinocchio/deprecated/pinocchio/serialization/data.hpp + include/pinocchio/deprecated/pinocchio/multibody/frame.hpp + include/pinocchio/deprecated/pinocchio/multibody/data.hpp + include/pinocchio/deprecated/pinocchio/multibody/coal.hpp + include/pinocchio/deprecated/pinocchio/multibody/geometry.hpp + include/pinocchio/deprecated/pinocchio/multibody/model.hpp + include/pinocchio/deprecated/pinocchio/multibody/instance-filter.hpp + include/pinocchio/deprecated/pinocchio/algorithm/constraints/constraint-model-base.hp + include/pinocchio/deprecated/pinocchio/multibody/pool/geometry.hpp + include/pinocchio/deprecated/pinocchio/multibody/force-set.hpp + include/pinocchio/deprecated/pinocchio/multibody/pool/model.hpp + include/pinocchio/deprecated/pinocchio/multibody/visitor/fusion.hpp + include/pinocchio/deprecated/pinocchio/algorithm/constraints/constraint-model-generic + include/pinocchio/deprecated/pinocchio/algorithm/constraints/constraint-data-generic. + include/pinocchio/deprecated/pinocchio/algorithm/constraints/constraint-data-base.hpp + include/pinocchio/deprecated/pinocchio/algorithm/constraints/coulomb-friction-cone.hp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup-base.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup-algo.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup-variant-visitors.h + include/pinocchio/deprecated/pinocchio/multibody/liegroup/vector-space.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup-collection.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/cartesian-product.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup-generic.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/special-orthogonal.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup-joint.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/cartesian-product-variant.h + include/pinocchio/deprecated/pinocchio/multibody/liegroup/liegroup.hpp + include/pinocchio/deprecated/pinocchio/multibody/liegroup/special-euclidean.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-basic-visitors.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-planar.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-spherical.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-revolute-unaligned.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-universal.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-common-operations.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-helical-unaligned.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-free-flyer.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-spherical-ZYX.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-prismatic.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-ellipsoid.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-composite.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-translation.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-mimic.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-base.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-revolute-unbounded.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-revolute.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-prismatic-unaligned.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joints.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-generic.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-revolute-unbounded-unali + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-collection.hpp + include/pinocchio/deprecated/pinocchio/multibody/joint/joint-helical.hpp + BASE_DIRS include + ) + + if (BUILD_WITH_COLLISION_SUPPORT) + jrl_target_headers(pinocchio_collision PUBLIC + HEADERS + include/pinocchio/deprecated/pinocchio/collision/fcl-pinocchio-conversions.hpp + BASE_DIRS include + ) + endif() + + if (BUILD_WITH_CODEGEN_SUPPORT) + jrl_target_headers(pinocchio_cppadcg_headers PUBLIC + HEADERS + include/pinocchio/deprecated/pinocchio/codegen/code-generator-algo.hpp + BASE_DIRS include + ) + endif() + + if (BUILD_WITH_PARSERS_SUPPORT) + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/deprecated/pinocchio/parsers/graph/joints.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/model-graph.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/model-configuration-converter.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/graph-visitor.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/model-graph-algo-geometry.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/model-graph-algo.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/frames.hpp + include/pinocchio/deprecated/pinocchio/parsers/graph/geometries.hpp + include/pinocchio/deprecated/pinocchio/parsers/mjcf/mjcf-graph.hpp + BASE_DIRS include + ) + endif() + if (BUILD_WITH_URDF_SUPPORT) + jrl_target_headers(pinocchio_parsers PUBLIC + HEADERS + include/pinocchio/deprecated/pinocchio/parsers/urdf/utils.hpp + BASE_DIRS include + ) + endif() + + if(BUILD_WITH_OPENMP_SUPPORT) + # TODO + endif() +endif() + # ---------------------------------------------------- # --- UNIT TESTS --------------------------------------- # ---------------------------------------------------- diff --git a/cmake/find-external/GMP/FindGMP.cmake b/cmake/find-external/GMP/FindGMP.cmake new file mode 100644 index 0000000000..94eea7b704 --- /dev/null +++ b/cmake/find-external/GMP/FindGMP.cmake @@ -0,0 +1,37 @@ +# Try to find the GNU Multiple Precision Arithmetic Library (GMP) See +# http://gmplib.org/ + +if(GMP_INCLUDES AND GMP_LIBRARIES) + set(GMP_FIND_QUIETLY TRUE) +endif(GMP_INCLUDES AND GMP_LIBRARIES) + +find_path(GMP_INCLUDES NAMES gmp.h PATHS $ENV{GMPDIR} ${INCLUDE_INSTALL_DIR}) + +find_library(GMP_LIBRARIES NAMES gmp PATHS $ENV{GMPDIR} ${LIB_INSTALL_DIR}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(GMP DEFAULT_MSG GMP_INCLUDES GMP_LIBRARIES) + +# Set gmp target +if(GMP_FOUND) + add_library(gmp SHARED IMPORTED) + set_target_properties( + gmp + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIR}" + IMPORTED_CONFIGURATIONS "RELEASE" + ) + if(WIN32) + set_target_properties( + gmp + PROPERTIES IMPORTED_IMPLIB_RELEASE "${GMP_LIBRARIES}" + ) + else() + set_target_properties( + gmp + PROPERTIES IMPORTED_LOCATION_RELEASE "${GMP_LIBRARIES}" + ) + endif() +endif() + +mark_as_advanced(GMP_INCLUDES GMP_LIBRARIES) diff --git a/cmake/find-external/MPFR/FindMPFR.cmake b/cmake/find-external/MPFR/FindMPFR.cmake new file mode 100644 index 0000000000..298ebdbb01 --- /dev/null +++ b/cmake/find-external/MPFR/FindMPFR.cmake @@ -0,0 +1,119 @@ +# Try to find the MPFR library See http://www.mpfr.org/ +# +# This module supports requiring a minimum version, e.g. you can do +# find_package(MPFR 2.3.0) to require version 2.3.0 to newer of MPFR. +# +# Once done this will define +# +# MPFR_FOUND - system has MPFR lib with correct version MPFR_INCLUDES - the MPFR +# include directory MPFR_LIBRARIES - the MPFR library MPFR_VERSION - MPFR +# version + +# Copyright (c) 2006, 2007 Montel Laurent, Copyright (c) 2008, +# 2009 Gael Guennebaud, Copyright (c) 2010 Jitse Niesen, +# Copyright (c) 2022 Justin Carpentier Redistribution +# and use is allowed according to the terms of the BSD license. + +# Set MPFR_INCLUDES + +find_path(MPFR_INCLUDES NAMES mpfr.h PATHS $ENV{GMPDIR} ${INCLUDE_INSTALL_DIR}) + +# Set MPFR_FIND_VERSION to 1.0.0 if no minimum version is specified + +if(NOT MPFR_FIND_VERSION) + if(NOT MPFR_FIND_VERSION_MAJOR) + set(MPFR_FIND_VERSION_MAJOR 1) + endif(NOT MPFR_FIND_VERSION_MAJOR) + if(NOT MPFR_FIND_VERSION_MINOR) + set(MPFR_FIND_VERSION_MINOR 0) + endif(NOT MPFR_FIND_VERSION_MINOR) + if(NOT MPFR_FIND_VERSION_PATCH) + set(MPFR_FIND_VERSION_PATCH 0) + endif(NOT MPFR_FIND_VERSION_PATCH) + + set( + MPFR_FIND_VERSION + "${MPFR_FIND_VERSION_MAJOR}.${MPFR_FIND_VERSION_MINOR}.${MPFR_FIND_VERSION_PATCH}" + ) +endif(NOT MPFR_FIND_VERSION) + +if(MPFR_INCLUDES) + # Set MPFR_VERSION + + file(READ "${MPFR_INCLUDES}/mpfr.h" _mpfr_version_header) + + string( + REGEX MATCH "define[ \t]+MPFR_VERSION_MAJOR[ \t]+([0-9]+)" + _mpfr_major_version_match + "${_mpfr_version_header}" + ) + set(MPFR_MAJOR_VERSION "${CMAKE_MATCH_1}") + string( + REGEX MATCH "define[ \t]+MPFR_VERSION_MINOR[ \t]+([0-9]+)" + _mpfr_minor_version_match + "${_mpfr_version_header}" + ) + set(MPFR_MINOR_VERSION "${CMAKE_MATCH_1}") + string( + REGEX MATCH "define[ \t]+MPFR_VERSION_PATCHLEVEL[ \t]+([0-9]+)" + _mpfr_patchlevel_version_match + "${_mpfr_version_header}" + ) + set(MPFR_PATCHLEVEL_VERSION "${CMAKE_MATCH_1}") + + set( + MPFR_VERSION + ${MPFR_MAJOR_VERSION}.${MPFR_MINOR_VERSION}.${MPFR_PATCHLEVEL_VERSION} + ) + + # Check whether found version exceeds minimum version + + if(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION}) + set(MPFR_VERSION_OK FALSE) + message( + STATUS + "MPFR version ${MPFR_VERSION} found in ${MPFR_INCLUDES}, " + "but at least version ${MPFR_FIND_VERSION} is required" + ) + else(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION}) + set(MPFR_VERSION_OK TRUE) + endif(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION}) +endif(MPFR_INCLUDES) + +# Set MPFR_LIBRARIES + +find_library(MPFR_LIBRARIES mpfr PATHS $ENV{GMPDIR} ${LIB_INSTALL_DIR}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + MPFR + DEFAULT_MSG + MPFR_INCLUDES + MPFR_LIBRARIES + MPFR_VERSION_OK +) + +# Set mpfr target +if(MPFR_FOUND) + add_library(mpfr SHARED IMPORTED) + set_target_properties( + mpfr + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${MPFR_INCLUDE_DIR}" + IMPORTED_CONFIGURATIONS "RELEASE" + ) + if(WIN32) + set_target_properties( + mpfr + PROPERTIES IMPORTED_IMPLIB_RELEASE "${MPFR_LIBRARIES}" + ) + else() + set_target_properties( + mpfr + PROPERTIES IMPORTED_LOCATION_RELEASE "${MPFR_LIBRARIES}" + ) + endif() +endif() + +# Epilogue +mark_as_advanced(MPFR_INCLUDES MPFR_LIBRARIES) diff --git a/unittest/cpp/CMakeLists.txt b/unittest/cpp/CMakeLists.txt index f54cffe793..e67d782eb3 100644 --- a/unittest/cpp/CMakeLists.txt +++ b/unittest/cpp/CMakeLists.txt @@ -225,7 +225,7 @@ add_pinocchio_unit_test(algorithm-utils-force) if(BUILD_ADVANCED_TESTING) add_pinocchio_unit_test(multiprecision) if(PINOCCHIO_BUILD_MPFR_TESTING) - add_pinocchio_unit_test(multiprecision-mpfr PACKAGES mpfr gmp) + add_pinocchio_unit_test(multiprecision-mpfr) endif() endif() From 9adf0150b5741afcf407f7e3aeb1ee051b3cd898 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Tue, 28 Jul 2026 17:39:50 +0200 Subject: [PATCH 20/32] cmake: port visualizers --- CMakeLists.txt | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 51e4993425..8d69b87c5a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1069,6 +1069,45 @@ if(BUILD_WITH_EXTRA_SUPPORT) list(APPEND EXPORTED_TARGETS pinocchio_extra) endif() +# Define the visualizers target +if(PINOCCHIO_BUILD_VISUALIZERS) + + add_library(pinocchio_visualizers) + target_sources( + pinocchio_visualizers + PRIVATE src/visualizers/base-visualizer.cpp + ) + + jrl_target_headers(pinocchio_visualizers PUBLIC + HEADERS + include/pinocchio/visualizers/base-visualizer.hpp + BASE_DIRS include + ) + + jrl_target_headers(pinocchio_visualizers PUBLIC + HEADERS + include/pinocchio/src/visualizers/base-visualizer.hxx + BASE_DIRS include + ) + + target_link_libraries( + pinocchio_visualizers + PUBLIC pinocchio_default + ) + + jrl_target_set_default_compile_options(pinocchio_visualizers PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_visualizers PRIVATE) + jrl_target_generate_config_header(pinocchio_visualizers INTERFACE FILENAME pinocchio/visualizers/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_visualizers) + + target_link_libraries(pinocchio INTERFACE pinocchio_visualizers) + list(APPEND EXPORTED_TARGETS pinocchio_visualizers) + if(BUILD_WITH_COLLISION_SUPPORT) + target_compile_definitions(pinocchio_visualizers + PUBLIC PINOCCHIO_WITH_COLLISION + ) + target_link_libraries(pinocchio_visualizers PUBLIC coal::coal) + endif() +endif() # Header only part + deprecated if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) From 8deaec7f763fff282cbc2299ed7aab23950848b3 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Wed, 29 Jul 2026 14:08:35 +0200 Subject: [PATCH 21/32] cmake: port tracy, OPENMP and ADVANCED_TESTING --- CMakeLists.txt | 111 ++++++++++++++++-- .../src/autodiff/casadi/algorithm/algo.hxx | 17 ++- unittest/cpp/CMakeLists.txt | 70 ++++++----- unittest/cpp/casadi-aba-derivatives.cpp | 2 +- unittest/cpp/casadi-aba.cpp | 2 +- ...casadi-constraint-dynamics-derivatives.cpp | 2 +- unittest/cpp/casadi-constraint-dynamics.cpp | 2 +- unittest/cpp/cppadcg-joint-configurations.cpp | 2 +- 8 files changed, 156 insertions(+), 52 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d69b87c5a..4ce69f2e84 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,9 +121,9 @@ jrl_find_package(example-robot-data CONFIG REQUIRED EXPECTED_TARGETS example-rob if(BUILD_WITH_CASADI_SUPPORT) jrl_find_package(casadi REQUIRED) # TODO remove ? - # if(NOT TARGET casadi::casadi AND TARGET casadi) - # add_library(casadi::casadi ALIAS casadi) - # endif() + if(NOT TARGET casadi::casadi AND TARGET casadi) + add_library(casadi::casadi ALIAS casadi) + endif() endif() if(BUILD_WITH_EXTRA_SUPPORT) @@ -137,8 +137,21 @@ if( list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find-external/GMP") list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find-external/MPFR") - find_package(GMP REQUIRED 6.0.0) - find_package(MPFR REQUIRED 4.0.0) + jrl_find_package(GMP REQUIRED) + jrl_find_package(MPFR REQUIRED) +endif() + +if(PINOCCHIO_BUILD_WITH_TRACY) + # assume it is installed somewhere + jrl_find_package(Tracy REQUIRED) + set_target_properties( + Tracy::TracyClient + PROPERTIES POSITION_INDEPENDENT_CODE True + ) +endif(PINOCCHIO_BUILD_WITH_TRACY) + +if(BUILD_WITH_OPENMP_SUPPORT) + jrl_find_package(OpenMP REQUIRED) endif() # ---------------------------------------------------- @@ -743,6 +756,13 @@ if(BUILD_WITH_PARSERS_SUPPORT) src/parsers/graph/model-graph.cpp src/parsers/graph/model-graph-algo.cpp ) + if(BUILD_WITH_COLLISION_SUPPORT) + target_sources( + pinocchio_parsers + PRIVATE + src/parsers/graph/model-graph-algo-geometry.cpp + ) + endif() jrl_target_headers(pinocchio_parsers PUBLIC HEADERS @@ -993,14 +1013,14 @@ endif() if (BUILD_WITH_CASADI_SUPPORT) add_header_and_template_instantiation_targets(pinocchio_casadi) - jrl_target_headers(pinocchio_cppadcg_headers PUBLIC + jrl_target_headers(pinocchio_casadi_headers PUBLIC HEADERS include/pinocchio/autodiff/casadi-algo.hpp include/pinocchio/autodiff/casadi.hpp BASE_DIRS include ) - jrl_target_headers(pinocchio_cppadcg_headers PUBLIC + jrl_target_headers(pinocchio_casadi_headers PUBLIC HEADERS include/pinocchio/src/autodiff/casadi/algorithm/algo.hxx include/pinocchio/src/autodiff/casadi/math/alias.hxx @@ -1072,7 +1092,7 @@ endif() # Define the visualizers target if(PINOCCHIO_BUILD_VISUALIZERS) - add_library(pinocchio_visualizers) + add_library(pinocchio_visualizers SHARED) target_sources( pinocchio_visualizers PRIVATE src/visualizers/base-visualizer.cpp @@ -1109,10 +1129,77 @@ if(PINOCCHIO_BUILD_VISUALIZERS) endif() endif() +if(PINOCCHIO_BUILD_WITH_TRACY) + add_library(pinocchio_tracy INTERFACE) + target_link_libraries(pinocchio_tracy INTERFACE Tracy::TracyClient) + target_link_libraries(pinocchio_default INTERFACE pinocchio_tracy) + list(APPEND EXPORTED_TARGETS pinocchio_tracy) +endif(PINOCCHIO_BUILD_WITH_TRACY) + +# Define the parallel target +if(BUILD_WITH_OPENMP_SUPPORT) + + add_library(pinocchio_parallel INTERFACE) + + jrl_target_headers(pinocchio_parallel PUBLIC + HEADERS + include/pinocchio/algorithm/parallel/aba.hpp + include/pinocchio/algorithm/parallel/rnea.hpp + BASE_DIRS include + ) + + jrl_target_headers(pinocchio_parallel PUBLIC + HEADERS + include/pinocchio/src/algorithm/parallel/aba.hxx + include/pinocchio/src/algorithm/parallel/rnea.hxx + BASE_DIRS include + ) + + target_link_libraries( + pinocchio_parallel + INTERFACE pinocchio_default OpenMP::OpenMP_CXX + ) + + jrl_target_set_default_compile_options(pinocchio_parallel INTERFACE) + jrl_target_enforce_msvc_conformance(pinocchio_parallel INTERFACE) + + target_link_libraries(pinocchio INTERFACE pinocchio_parallel) + list(APPEND EXPORTED_TARGETS pinocchio_parallel) + if(BUILD_WITH_COLLISION_SUPPORT) + + add_library(pinocchio_collision_parallel INTERFACE) + + jrl_target_headers(pinocchio_parallel PUBLIC + HEADERS + include/pinocchio/collision/parallel/broadphase.hpp + include/pinocchio/collision/parallel/geometry.hpp + BASE_DIRS include + ) + + jrl_target_headers(pinocchio_parallel PUBLIC + HEADERS + include/pinocchio/src/collision/parallel/broadphase.hxx + include/pinocchio/src/collision/parallel/geometry.hxx + BASE_DIRS include + ) + + target_compile_definitions(pinocchio_collision_parallel + INTERFACE PINOCCHIO_WITH_COLLISION + ) + + target_link_libraries(pinocchio_collision_parallel INTERFACE pinocchio_collision OpenMP::OpenMP_CXX) + target_link_libraries(pinocchio INTERFACE pinocchio_collision_parallel) + list(APPEND EXPORTED_TARGETS pinocchio_collision_parallel) + + + endif() +endif() + + # Header only part + deprecated if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) target_include_directories( - ${PROJECT_NAME}_default_headers + pinocchio_default_headers INTERFACE $ $ @@ -1281,7 +1368,11 @@ if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) endif() if(BUILD_WITH_OPENMP_SUPPORT) - # TODO + jrl_target_headers(pinocchio_parallel PUBLIC + HEADERS + include/pinocchio/deprecated/pinocchio/algorithm/parallel/omp.hpp + BASE_DIRS include + ) endif() endif() diff --git a/include/pinocchio/src/autodiff/casadi/algorithm/algo.hxx b/include/pinocchio/src/autodiff/casadi/algorithm/algo.hxx index ca2fed4df4..bda459b4b4 100644 --- a/include/pinocchio/src/autodiff/casadi/algorithm/algo.hxx +++ b/include/pinocchio/src/autodiff/casadi/algorithm/algo.hxx @@ -86,17 +86,18 @@ namespace pinocchio return file.good(); } - void compileLib() + void compileLib( + const std::string & compiler_path = "/user/bin/gcc", + const std::string & compile_options = "-Ofast") { - std::string compile_command = - "clang -fPIC -shared -Ofast -DNDEBUG " + filename + ".c -o " + libname + ".so"; + std::string compile_command = compiler_path + " -x c -fPIC -shared -DNDEBUG " + filename + + ".c -o " + libname + ".so " + compile_options; #ifdef __APPLE__ compile_command += " -isysroot " "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/" "Developer/SDKs/MacOSX.sdk"; #endif - const int flag = system(compile_command.c_str()); if (flag != 0) { @@ -104,10 +105,14 @@ namespace pinocchio } } - void loadLib(const bool generate_if_not_exist = true) + void loadLib( + const bool generate_if_not_exist = true, + const std::string & compiler_path = "/usr/bin/gcc", + const std::string & compile_options = "-Ofast") + { if (!existLib() && generate_if_not_exist) - compileLib(); + compileLib(compiler_path, compile_options); fun = ::casadi::external(fun_name, "./" + libname + ".so"); if (build_jacobian) diff --git a/unittest/cpp/CMakeLists.txt b/unittest/cpp/CMakeLists.txt index e67d782eb3..f49520b879 100644 --- a/unittest/cpp/CMakeLists.txt +++ b/unittest/cpp/CMakeLists.txt @@ -35,12 +35,7 @@ add_pinocchio_unit_test(aba-derivatives) add_pinocchio_unit_test(centroidal-derivatives) add_pinocchio_unit_test(center-of-mass-derivatives) add_pinocchio_unit_test(constrained-dynamics-derivatives) - -# if(BUILD_WITH_SDF_SUPPORT) -# add_pinocchio_unit_test(contact-dynamics-derivatives PARSERS) -# else() add_pinocchio_unit_test(contact-dynamics-derivatives) -# endif() add_pinocchio_unit_test(impulse-dynamics-derivatives) add_pinocchio_unit_test(rnea-second-order-derivatives) @@ -48,11 +43,7 @@ add_pinocchio_unit_test(rnea-second-order-derivatives) add_pinocchio_unit_test(spatial) add_pinocchio_unit_test(symmetric) add_pinocchio_unit_test(aba) -# TODO handle paralle -#add_pinocchio_parallel_unit_test(parallel-aba) add_pinocchio_unit_test(rnea) -# TODO handle paralle -#add_pinocchio_parallel_unit_test(parallel-rnea) add_pinocchio_unit_test(crba) add_pinocchio_unit_test(centroidal) add_pinocchio_unit_test(com) @@ -73,8 +64,7 @@ add_pinocchio_unit_test(contact-inverse-dynamics) add_pinocchio_unit_test(closed-loop-dynamics) add_pinocchio_unit_test(loop-constrained-aba) add_pinocchio_unit_test(impulse-dynamics) -# TODO handle collision -#add_pinocchio_unit_test(sample-models COLLISION_OPTIONAL) +add_pinocchio_unit_test(sample-models) add_pinocchio_unit_test(kinematics) add_pinocchio_unit_test(delassus) add_pinocchio_unit_test(delassus-operations) @@ -85,13 +75,11 @@ add_pinocchio_unit_test(delassus-operator-rigid-body) add_pinocchio_unit_test(preconditioner) add_pinocchio_unit_test(pv-solver) -# TODO handle parallel ut -# add_pinocchio_parallel_unit_test(openmp-exception) + +# parsers if(BUILD_WITH_URDF_SUPPORT) - add_pinocchio_unit_test( - urdf - ) + add_pinocchio_unit_test(urdf) add_pinocchio_unit_test(value) if(BUILD_WITH_COLLISION_SUPPORT) @@ -108,8 +96,6 @@ if(BUILD_WITH_URDF_SUPPORT) add_pinocchio_unit_test( tree-broadphase ) - # TODO handle parallel - #add_pinocchio_parallel_unit_test(parallel-geometry) add_pinocchio_unit_test( srdf ) @@ -119,12 +105,11 @@ endif() if(BUILD_WITH_SDF_SUPPORT) add_pinocchio_unit_test(sdf) endif() -# TODO handle parsers ut -# add_pinocchio_unit_test( -# mjcf -# PARSERS -# COLLISION_OPTIONAL -# ) +if(BUILD_WITH_PARSERS_SUPPORT) + add_pinocchio_unit_test(mjcf) + add_pinocchio_unit_test(model-graph) + add_pinocchio_unit_test(model-configuration-converter) +endif() if(BUILD_WITH_EXTRA_SUPPORT) add_pinocchio_unit_test( @@ -133,7 +118,7 @@ if(BUILD_WITH_EXTRA_SUPPORT) endif() if(PINOCCHIO_BUILD_VISUALIZERS) - add_pinocchio_unit_test(visualizer VISUALIZERS) + add_pinocchio_unit_test(visualizer) endif() if(BUILD_WITH_PYTHON_PARSER_SUPPORT) @@ -161,8 +146,7 @@ add_pinocchio_unit_test(joint-universal) add_pinocchio_unit_test(joint-visitors) # Main corpus -# TODO : Collision check -#add_pinocchio_unit_test(model) +add_pinocchio_unit_test(model) add_pinocchio_unit_test(data) add_pinocchio_unit_test(joint-motion-subspace) add_pinocchio_unit_test(compute-all-terms) @@ -175,9 +159,7 @@ add_pinocchio_unit_test(explog) add_pinocchio_unit_test(finite-differences) add_pinocchio_unit_test(visitor) add_pinocchio_unit_test(algo-check) -# TODO : parsers -#add_pinocchio_unit_test(model-graph) -#add_pinocchio_unit_test(model-configuration-converter) + # Warning ignore with pragma doesn't work for a part of this test, so we ignore two warning globally add_pinocchio_unit_test(liegroups) @@ -226,9 +208,15 @@ if(BUILD_ADVANCED_TESTING) add_pinocchio_unit_test(multiprecision) if(PINOCCHIO_BUILD_MPFR_TESTING) add_pinocchio_unit_test(multiprecision-mpfr) + target_link_libraries( + pinocchio-test-cpp-multiprecision-mpfr + PRIVATE mpfr gmp + ) + endif() endif() +# special scalars if(BUILD_WITH_AUTODIFF_SUPPORT) macro(ADD_CPPAD_UNIT_TEST name) add_pinocchio_unit_test(${name}) @@ -280,6 +268,10 @@ if(BUILD_WITH_CASADI_SUPPORT) macro(ADD_CASADI_UNIT_TEST name) add_pinocchio_unit_test(${name}) add_dependencies(pinocchio-test-cpp-casadi pinocchio-test-cpp-${name}) + target_compile_definitions( + pinocchio-test-cpp-${name} + PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" + ) target_link_libraries(pinocchio-test-cpp-${name} PRIVATE pinocchio_casadi_headers) endmacro() @@ -305,6 +297,7 @@ if(BUILD_WITH_CASADI_SUPPORT) endif() endif() +# rtsan if(BUILD_WITH_RTSAN) add_pinocchio_unit_test(dynamic-allocations) target_compile_options(pinocchio-test-cpp-dynamic-allocations PRIVATE -fsanitize=realtime) @@ -319,4 +312,19 @@ if(BUILD_WITH_RTSAN) "RTSAN_OPTIONS=path_list_append:suppressions=${CMAKE_CURRENT_SOURCE_DIR}/dynamic-allocations-osx-arm64.supp" ) endif() -endif() \ No newline at end of file +endif() + +if (BUILD_WITH_OPENMP_SUPPORT) + macro(add_pinocchio_parallel_unit_test name) + add_pinocchio_unit_test(${name}) + target_link_libraries(pinocchio-test-cpp-${name} PUBLIC pinocchio_parallel) + endmacro() + + add_pinocchio_parallel_unit_test(parallel-aba) + add_pinocchio_parallel_unit_test(openmp-exception) + add_pinocchio_parallel_unit_test(parallel-rnea) + + if(BUILD_WITH_URDF_SUPPORT AND BUILD_WITH_COLLISION_SUPPORT) + add_pinocchio_parallel_unit_test(parallel-geometry) + endif() +endif() diff --git a/unittest/cpp/casadi-aba-derivatives.cpp b/unittest/cpp/casadi-aba-derivatives.cpp index 4b6d0a43c1..d3f324c3bd 100644 --- a/unittest/cpp/casadi-aba-derivatives.cpp +++ b/unittest/cpp/casadi-aba-derivatives.cpp @@ -44,7 +44,7 @@ BOOST_AUTO_TEST_CASE(test_aba_derivatives_casadi_algo) pinocchio::casadi::AutoDiffABADerivatives ad_casadi(model); ad_casadi.initLib(); - ad_casadi.loadLib(); + ad_casadi.loadLib(true, PINOCCHIO_CXX_COMPILER); ad_casadi.evalFunction(q, v, tau); diff --git a/unittest/cpp/casadi-aba.cpp b/unittest/cpp/casadi-aba.cpp index f33ef6dccb..aa940270a4 100644 --- a/unittest/cpp/casadi-aba.cpp +++ b/unittest/cpp/casadi-aba.cpp @@ -209,7 +209,7 @@ BOOST_AUTO_TEST_CASE(test_aba_casadi_algo) << "\n"; std::cout << "Number of operations in the ABA derivs function = " << ad_casadi.getFunDerivsOperationCount() << "\n"; - ad_casadi.loadLib(); + ad_casadi.loadLib(true, PINOCCHIO_CXX_COMPILER); ad_casadi.evalFunction(q, v, tau); ad_casadi.evalJacobian(q, v, tau); diff --git a/unittest/cpp/casadi-constraint-dynamics-derivatives.cpp b/unittest/cpp/casadi-constraint-dynamics-derivatives.cpp index 7c10ae712e..b88cfa674b 100644 --- a/unittest/cpp/casadi-constraint-dynamics-derivatives.cpp +++ b/unittest/cpp/casadi-constraint-dynamics-derivatives.cpp @@ -63,7 +63,7 @@ BOOST_AUTO_TEST_CASE(test_constraintDynamicsDerivatives_casadi_algo) pinocchio::casadi::AutoDiffConstraintDynamicsDerivatives ad_casadi(model, contact_models); ad_casadi.initLib(); - ad_casadi.loadLib(); + ad_casadi.loadLib(true, PINOCCHIO_CXX_COMPILER); ad_casadi.evalFunction(q, v, tau); BOOST_CHECK(ad_casadi.ddq.isApprox(data.ddq, 1e1 * prec)); diff --git a/unittest/cpp/casadi-constraint-dynamics.cpp b/unittest/cpp/casadi-constraint-dynamics.cpp index 250fac9702..df00d26f83 100644 --- a/unittest/cpp/casadi-constraint-dynamics.cpp +++ b/unittest/cpp/casadi-constraint-dynamics.cpp @@ -63,7 +63,7 @@ BOOST_AUTO_TEST_CASE(test_constraintDynamics_casadi_algo) pinocchio::computeConstraintDynamicsDerivatives(model, data, contact_models, contact_data); pinocchio::casadi::AutoDiffConstraintDynamics ad_casadi(model, contact_models); ad_casadi.initLib(); - ad_casadi.loadLib(); + ad_casadi.loadLib(true, PINOCCHIO_CXX_COMPILER); ad_casadi.evalFunction(q, v, tau); BOOST_CHECK(ad_casadi.ddq.isApprox(data.ddq, 1e2 * prec)); diff --git a/unittest/cpp/cppadcg-joint-configurations.cpp b/unittest/cpp/cppadcg-joint-configurations.cpp index 6e62d1e18c..ecaada18a0 100644 --- a/unittest/cpp/cppadcg-joint-configurations.cpp +++ b/unittest/cpp/cppadcg-joint-configurations.cpp @@ -9,7 +9,7 @@ #include "pinocchio/multibody.hpp" -#include "../utils/model-generator.hpp" +#include "utils/model-generator.hpp" #include From ea85c8846f895c4d185716a02ea548de9839d3f6 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Wed, 29 Jul 2026 17:39:51 +0200 Subject: [PATCH 22/32] cmake: apply pre-commit --- CMakeLists.txt | 248 ++++++++++-------- cmake/find-external/CppAD/Findcppad.cmake | 29 +- cmake/find-external/CppAD/Findcppadcg.cmake | 36 ++- cmake/find-external/GMP/FindGMP.cmake | 34 +-- cmake/find-external/MPFR/FindMPFR.cmake | 146 +++++------ unittest/CMakeLists.txt | 5 +- unittest/cpp/CMakeLists.txt | 52 ++-- unittest/cpp/contact-dynamics-derivatives.cpp | 1 - unittest/cpp/joint-helical.cpp | 3 - unittest/cpp/joint-prismatic.cpp | 4 - 10 files changed, 285 insertions(+), 273 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4ce69f2e84..f2d31e1530 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -101,18 +101,22 @@ if(BUILD_WITH_URDF_SUPPORT) endif() if(BUILD_WITH_CODEGEN_SUPPORT) - list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find-external/CppAD") + list( + APPEND CMAKE_MODULE_PATH + "${PROJECT_SOURCE_DIR}/cmake/find-external/CppAD" + ) jrl_find_package(cppadcg REQUIRED) set(BUILD_WITH_CPPAD_CODEGEN_SUPPORT TRUE) set(BUILD_WITH_AUTODIFF_SUPPORT TRUE) endif(BUILD_WITH_CODEGEN_SUPPORT) - if(BUILD_WITH_AUTODIFF_SUPPORT) -# TODO remove when jrl v2 provide findcppad in find modules - list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find-external/CppAD") + # TODO remove when jrl v2 provide findcppad in find modules + list( + APPEND CMAKE_MODULE_PATH + "${PROJECT_SOURCE_DIR}/cmake/find-external/CppAD" + ) jrl_find_package(cppad REQUIRED) - endif() set(PINOCCHIO_MODEL_DIR "${PROJECT_SOURCE_DIR}/models") @@ -120,9 +124,8 @@ jrl_find_package(example-robot-data CONFIG REQUIRED EXPECTED_TARGETS example-rob if(BUILD_WITH_CASADI_SUPPORT) jrl_find_package(casadi REQUIRED) - # TODO remove ? if(NOT TARGET casadi::casadi AND TARGET casadi) - add_library(casadi::casadi ALIAS casadi) + add_library(casadi::casadi ALIAS casadi) endif() endif() @@ -134,9 +137,15 @@ if( PINOCCHIO_BUILD_MPFR_TESTING OR BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT ) - list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find-external/GMP") - list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find-external/MPFR") - + list( + APPEND CMAKE_MODULE_PATH + "${PROJECT_SOURCE_DIR}/cmake/find-external/GMP" + ) + list( + APPEND CMAKE_MODULE_PATH + "${PROJECT_SOURCE_DIR}/cmake/find-external/MPFR" + ) + jrl_find_package(GMP REQUIRED) jrl_find_package(MPFR REQUIRED) endif() @@ -154,6 +163,12 @@ if(BUILD_WITH_OPENMP_SUPPORT) jrl_find_package(OpenMP REQUIRED) endif() +if(BUILD_PYTHON_INTERFACE) + jrl_find_python(3.10 REQUIRED COMPONENTS Interpreter Development.Module) + jrl_find_package(Boost CONFIG REQUIRED COMPONENTS python EXPECTED_TARGETS Boost::python) + jrl_find_package(eigenpy CONFIG REQUIRED EXPECTED_TARGETS eigenpy::eigenpy) +endif() + # ---------------------------------------------------- # --- FUNCTIONS ------------------------------------- # ---------------------------------------------------- @@ -162,7 +177,7 @@ macro(add_header_and_template_instantiation_targets name) add_library(${name} INTERFACE) target_link_libraries(${name} INTERFACE ${name}_headers) - list(APPEND EXPORTED_TARGETS ${name} ${name}_headers) + list(APPEND EXPORTED_TARGETS ${name} ${name}_headers) if(ENABLE_TEMPLATE_INSTANTIATION) add_library(${name}_template_instantiation SHARED) @@ -183,7 +198,10 @@ macro(add_header_and_template_instantiation_targets name) # By default DEFINE_SYMBOL add -D${LIB_NAME}_EXPORTS. Don't use ${LIB_NAME}_EXPORTS define since # pinocchio/config.hpp use pinocchio_EXPORTS. This allow to use the same DLLAPI define for all # template instantiation libraries. - set_target_properties(${name}_template_instantiation PROPERTIES DEFINE_SYMBOL "pinocchio_EXPORTS") + set_target_properties( + ${name}_template_instantiation + PROPERTIES DEFINE_SYMBOL "pinocchio_EXPORTS" + ) jrl_target_set_default_compile_options(${name}_template_instantiation PRIVATE) jrl_target_enforce_msvc_conformance(${name}_template_instantiation PRIVATE) target_link_libraries(${name} INTERFACE ${name}_template_instantiation) @@ -193,38 +211,38 @@ macro(add_header_and_template_instantiation_targets name) endmacro() set(PINOCCHIO_CORE_INSTANTIATION_SOURCES - src/algorithm/cholesky.cpp - src/algorithm/aba.cpp - src/algorithm/regressor.cpp - src/algorithm/contact-dynamics.cpp - src/algorithm/frames-derivatives.cpp - src/algorithm/impulse-dynamics.cpp - src/algorithm/model.cpp - src/algorithm/constrained-dynamics.cpp - src/algorithm/rnea-derivatives.cpp - src/algorithm/compute-all-terms.cpp - src/algorithm/jacobian.cpp - src/algorithm/energy.cpp - src/algorithm/centroidal-derivatives.cpp - src/algorithm/frames.cpp - src/algorithm/constrained-dynamics-derivatives.cpp - src/algorithm/center-of-mass.cpp - src/algorithm/geometry.cpp - src/algorithm/kinematics.cpp - src/algorithm/rnea.cpp - src/algorithm/centroidal.cpp - src/algorithm/aba-derivatives.cpp - src/algorithm/crba.cpp - src/algorithm/constraint-cholesky.cpp - src/algorithm/joint-configuration.cpp - src/algorithm/center-of-mass-derivatives.cpp - src/algorithm/solvers/admm-solver.cpp - src/algorithm/solvers/pgs-solver.cpp - src/algorithm/kinematics-derivatives.cpp - src/algorithm/constraints/utils.cpp - src/multibody/model.cpp - src/multibody/data.cpp - src/multibody/sample-models.cpp + src/algorithm/cholesky.cpp + src/algorithm/aba.cpp + src/algorithm/regressor.cpp + src/algorithm/contact-dynamics.cpp + src/algorithm/frames-derivatives.cpp + src/algorithm/impulse-dynamics.cpp + src/algorithm/model.cpp + src/algorithm/constrained-dynamics.cpp + src/algorithm/rnea-derivatives.cpp + src/algorithm/compute-all-terms.cpp + src/algorithm/jacobian.cpp + src/algorithm/energy.cpp + src/algorithm/centroidal-derivatives.cpp + src/algorithm/frames.cpp + src/algorithm/constrained-dynamics-derivatives.cpp + src/algorithm/center-of-mass.cpp + src/algorithm/geometry.cpp + src/algorithm/kinematics.cpp + src/algorithm/rnea.cpp + src/algorithm/centroidal.cpp + src/algorithm/aba-derivatives.cpp + src/algorithm/crba.cpp + src/algorithm/constraint-cholesky.cpp + src/algorithm/joint-configuration.cpp + src/algorithm/center-of-mass-derivatives.cpp + src/algorithm/solvers/admm-solver.cpp + src/algorithm/solvers/pgs-solver.cpp + src/algorithm/kinematics-derivatives.cpp + src/algorithm/constraints/utils.cpp + src/multibody/model.cpp + src/multibody/data.cpp + src/multibody/sample-models.cpp ) # ---------------------------------------------------- @@ -759,8 +777,7 @@ if(BUILD_WITH_PARSERS_SUPPORT) if(BUILD_WITH_COLLISION_SUPPORT) target_sources( pinocchio_parsers - PRIVATE - src/parsers/graph/model-graph-algo-geometry.cpp + PRIVATE src/parsers/graph/model-graph-algo-geometry.cpp ) endif() @@ -858,27 +875,25 @@ if(BUILD_WITH_PARSERS_SUPPORT) ) # the following lines allows to link to SDFormat, indeed SDFormat has its version number in its target until version ==16 - set( - SDF_VERSIONS - "15" - "13" - "12" - ) + set(SDF_VERSIONS "15" "13" "12") list(APPEND SDF_VERSIONS "") foreach(version IN LISTS SDF_VERSIONS) - find_package(SDFormat${version} QUIET) - if(SDFormat${version}_FOUND) - set(SDFormat_FOUND True) - jrl_find_package(SDFormat${version} CONFIG) - message(STATUS "SDFormat${version} Found") - add_library(pinocchio_sdformat ALIAS sdformat${version}::sdformat${version}) - break() - endif() + find_package(SDFormat${version} QUIET) + if(SDFormat${version}_FOUND) + set(SDFormat_FOUND True) + jrl_find_package(SDFormat${version} CONFIG) + message(STATUS "SDFormat${version} Found") + add_library( + pinocchio_sdformat + ALIAS sdformat${version}::sdformat${version} + ) + break() + endif() endforeach(version) if(NOT SDFormat_FOUND) message( - FATAL_ERROR - "SDFormat not found. Accepted versions: ${SDF_VERSIONS}" + FATAL_ERROR + "SDFormat not found. Accepted versions: ${SDF_VERSIONS}" ) endif() @@ -888,10 +903,8 @@ if(BUILD_WITH_PARSERS_SUPPORT) pinocchio_parsers PUBLIC PINOCCHIO_WITH_SDFORMAT ) - endif() - target_link_libraries( pinocchio_parsers PUBLIC pinocchio_default Boost::filesystem @@ -910,7 +923,7 @@ if(BUILD_WITH_PARSERS_SUPPORT) endif() # handle special scalars -if (BUILD_WITH_AUTODIFF_SUPPORT) +if(BUILD_WITH_AUTODIFF_SUPPORT) add_header_and_template_instantiation_targets(pinocchio_cppad) jrl_target_headers(pinocchio_cppad_headers PUBLIC @@ -929,34 +942,33 @@ if (BUILD_WITH_AUTODIFF_SUPPORT) BASE_DIRS include ) - target_link_libraries( + target_link_libraries( pinocchio_cppad_headers INTERFACE pinocchio_default_headers ${cppad_LIBRARY} ) target_include_directories( - pinocchio_cppad_headers SYSTEM - INTERFACE $ + pinocchio_cppad_headers + SYSTEM + INTERFACE $ ) target_compile_definitions( - pinocchio_cppad_headers - INTERFACE CPPAD_DEBUG_AND_RELEASE + pinocchio_cppad_headers + INTERFACE CPPAD_DEBUG_AND_RELEASE ) target_compile_definitions( - pinocchio_cppad - INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppad.hxx" + pinocchio_cppad + INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppad.hxx" ) if(ENABLE_TEMPLATE_INSTANTIATION) target_compile_definitions( pinocchio_cppad_template_instantiation PRIVATE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppad.hxx" - ) endif() - endif() if(BUILD_WITH_CODEGEN_SUPPORT) @@ -988,19 +1000,22 @@ if(BUILD_WITH_CODEGEN_SUPPORT) ) target_include_directories( - pinocchio_cppadcg_headers SYSTEM - INTERFACE - $ - $ + pinocchio_cppadcg_headers + SYSTEM + INTERFACE + $ + $ ) target_compile_definitions( - pinocchio_cppadcg_headers - INTERFACE CPPAD_DEBUG_AND_RELEASE) + pinocchio_cppadcg_headers + INTERFACE CPPAD_DEBUG_AND_RELEASE + ) target_compile_definitions( - pinocchio_cppadcg - INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppadcg.hxx") + pinocchio_cppadcg + INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/cppadcg.hxx" + ) if(ENABLE_TEMPLATE_INSTANTIATION) target_compile_definitions( @@ -1010,7 +1025,7 @@ if(BUILD_WITH_CODEGEN_SUPPORT) endif() endif() -if (BUILD_WITH_CASADI_SUPPORT) +if(BUILD_WITH_CASADI_SUPPORT) add_header_and_template_instantiation_targets(pinocchio_casadi) jrl_target_headers(pinocchio_casadi_headers PUBLIC @@ -1035,13 +1050,13 @@ if (BUILD_WITH_CASADI_SUPPORT) target_link_libraries( pinocchio_casadi_headers - INTERFACE - pinocchio_default_headers - casadi::casadi + INTERFACE pinocchio_default_headers casadi::casadi ) + target_compile_definitions( - pinocchio_casadi - INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/casadi.hxx") + pinocchio_casadi + INTERFACE PINOCCHIO_CONTEXT_FILE="pinocchio/src/context/casadi.hxx" + ) if(ENABLE_TEMPLATE_INSTANTIATION) target_compile_definitions( @@ -1052,12 +1067,9 @@ if (BUILD_WITH_CASADI_SUPPORT) endif() if(BUILD_WITH_EXTRA_SUPPORT) - add_library(pinocchio_extra SHARED) + add_library(pinocchio_extra SHARED) - target_sources( - pinocchio_extra - PRIVATE src/extra/reachable-workspace.cpp - ) + target_sources(pinocchio_extra PRIVATE src/extra/reachable-workspace.cpp) jrl_target_headers(pinocchio_extra PUBLIC HEADERS @@ -1091,9 +1103,8 @@ endif() # Define the visualizers target if(PINOCCHIO_BUILD_VISUALIZERS) - add_library(pinocchio_visualizers SHARED) - target_sources( + target_sources( pinocchio_visualizers PRIVATE src/visualizers/base-visualizer.cpp ) @@ -1110,10 +1121,7 @@ if(PINOCCHIO_BUILD_VISUALIZERS) BASE_DIRS include ) - target_link_libraries( - pinocchio_visualizers - PUBLIC pinocchio_default - ) + target_link_libraries(pinocchio_visualizers PUBLIC pinocchio_default) jrl_target_set_default_compile_options(pinocchio_visualizers PRIVATE) jrl_target_enforce_msvc_conformance(pinocchio_visualizers PRIVATE) @@ -1122,7 +1130,8 @@ if(PINOCCHIO_BUILD_VISUALIZERS) target_link_libraries(pinocchio INTERFACE pinocchio_visualizers) list(APPEND EXPORTED_TARGETS pinocchio_visualizers) if(BUILD_WITH_COLLISION_SUPPORT) - target_compile_definitions(pinocchio_visualizers + target_compile_definitions( + pinocchio_visualizers PUBLIC PINOCCHIO_WITH_COLLISION ) target_link_libraries(pinocchio_visualizers PUBLIC coal::coal) @@ -1138,7 +1147,6 @@ endif(PINOCCHIO_BUILD_WITH_TRACY) # Define the parallel target if(BUILD_WITH_OPENMP_SUPPORT) - add_library(pinocchio_parallel INTERFACE) jrl_target_headers(pinocchio_parallel PUBLIC @@ -1165,8 +1173,8 @@ if(BUILD_WITH_OPENMP_SUPPORT) target_link_libraries(pinocchio INTERFACE pinocchio_parallel) list(APPEND EXPORTED_TARGETS pinocchio_parallel) - if(BUILD_WITH_COLLISION_SUPPORT) + if(BUILD_WITH_COLLISION_SUPPORT) add_library(pinocchio_collision_parallel INTERFACE) jrl_target_headers(pinocchio_parallel PUBLIC @@ -1183,19 +1191,20 @@ if(BUILD_WITH_OPENMP_SUPPORT) BASE_DIRS include ) - target_compile_definitions(pinocchio_collision_parallel + target_compile_definitions( + pinocchio_collision_parallel INTERFACE PINOCCHIO_WITH_COLLISION ) - target_link_libraries(pinocchio_collision_parallel INTERFACE pinocchio_collision OpenMP::OpenMP_CXX) + target_link_libraries( + pinocchio_collision_parallel + INTERFACE pinocchio_collision OpenMP::OpenMP_CXX + ) target_link_libraries(pinocchio INTERFACE pinocchio_collision_parallel) list(APPEND EXPORTED_TARGETS pinocchio_collision_parallel) - - endif() endif() - # Header only part + deprecated if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) target_include_directories( @@ -1328,23 +1337,23 @@ if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) BASE_DIRS include ) - if (BUILD_WITH_COLLISION_SUPPORT) + if(BUILD_WITH_COLLISION_SUPPORT) jrl_target_headers(pinocchio_collision PUBLIC HEADERS include/pinocchio/deprecated/pinocchio/collision/fcl-pinocchio-conversions.hpp BASE_DIRS include - ) + ) endif() - if (BUILD_WITH_CODEGEN_SUPPORT) + if(BUILD_WITH_CODEGEN_SUPPORT) jrl_target_headers(pinocchio_cppadcg_headers PUBLIC HEADERS include/pinocchio/deprecated/pinocchio/codegen/code-generator-algo.hpp BASE_DIRS include - ) + ) endif() - if (BUILD_WITH_PARSERS_SUPPORT) + if(BUILD_WITH_PARSERS_SUPPORT) jrl_target_headers(pinocchio_parsers PUBLIC HEADERS include/pinocchio/deprecated/pinocchio/parsers/graph/joints.hpp @@ -1357,14 +1366,15 @@ if(PINOCCHIO_INSTALL_DEPRECATED_HEADERS) include/pinocchio/deprecated/pinocchio/parsers/graph/geometries.hpp include/pinocchio/deprecated/pinocchio/parsers/mjcf/mjcf-graph.hpp BASE_DIRS include - ) + ) endif() - if (BUILD_WITH_URDF_SUPPORT) + + if(BUILD_WITH_URDF_SUPPORT) jrl_target_headers(pinocchio_parsers PUBLIC HEADERS include/pinocchio/deprecated/pinocchio/parsers/urdf/utils.hpp BASE_DIRS include - ) + ) endif() if(BUILD_WITH_OPENMP_SUPPORT) @@ -1384,6 +1394,14 @@ if(BUILD_TESTING) add_subdirectory(unittest) endif() +# ---------------------------------------------------- +# --- BINDINGS --------------------------------------- +# ---------------------------------------------------- +if(BUILD_PYTHON_INTERFACE) + add_subdirectory(bindings) + list(APPEND EXPORTED_TARGETS pinocchio_pywrap_headers) +endif() + # ---------------------------------------------------- # --- EXPORT ---------------------------------------- # ---------------------------------------------------- diff --git a/cmake/find-external/CppAD/Findcppad.cmake b/cmake/find-external/CppAD/Findcppad.cmake index bda743bbb0..a41adbe03e 100644 --- a/cmake/find-external/CppAD/Findcppad.cmake +++ b/cmake/find-external/CppAD/Findcppad.cmake @@ -6,26 +6,23 @@ find_library(cppad_LIBRARY NAMES cppad_lib) mark_as_advanced(cppad_LIBRARY cppad_INCLUDE_DIR) if(cppad_INCLUDE_DIR AND NOT TARGET cppad::cppad) - file( - READ "${cppad_INCLUDE_DIR}/cppad/configure.hpp" - cppad_configure_hpp - ) - # Version is stored on the following line: - # `# define CPPAD_PACKAGE_STRING "cppad-20260000.0"` - string( - REGEX MATCH - "#[\t ]+define[\t ]+CPPAD_PACKAGE_STRING[\t ]+\"cppad-([0-9\.]*)\"" - _ - ${cppad_configure_hpp} - ) - set(cppad_VERSION ${CMAKE_MATCH_1}) + file(READ "${cppad_INCLUDE_DIR}/cppad/configure.hpp" cppad_configure_hpp) + # Version is stored on the following line: + # `# define CPPAD_PACKAGE_STRING "cppad-20260000.0"` + string( + REGEX MATCH + "#[\t ]+define[\t ]+CPPAD_PACKAGE_STRING[\t ]+\"cppad-([0-9\.]*)\"" + _ + ${cppad_configure_hpp} + ) + set(cppad_VERSION ${CMAKE_MATCH_1}) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args( - cppad - REQUIRED_VARS cppad_LIBRARY cppad_INCLUDE_DIR - VERSION_VAR cppad_VERSION + cppad + REQUIRED_VARS cppad_LIBRARY cppad_INCLUDE_DIR + VERSION_VAR cppad_VERSION ) if(cppad_FOUND AND NOT TARGET cppad::cppad) diff --git a/cmake/find-external/CppAD/Findcppadcg.cmake b/cmake/find-external/CppAD/Findcppadcg.cmake index db6f2f1f45..5665895c85 100644 --- a/cmake/find-external/CppAD/Findcppadcg.cmake +++ b/cmake/find-external/CppAD/Findcppadcg.cmake @@ -1,33 +1,29 @@ # Copyright 2026 Inria -find_path( - cppadcg_INCLUDE_DIR - NAMES cppad/cg.hpp -) +find_path(cppadcg_INCLUDE_DIR NAMES cppad/cg.hpp) mark_as_advanced(cppadcg_INCLUDE_DIR) if(cppadcg_INCLUDE_DIR AND NOT TARGET cppadcg::cppadcg) - file( - READ "${cppadcg_INCLUDE_DIR}/cppad/cg/configure.hpp" - cppadcg_configure_hpp - ) - # Version is stored on the following line: - # `#define CPPAD_CG_VERSION "cppadcg-2.5.0"` - string( - REGEX MATCH - "#define[\t ]+CPPAD_CG_VERSION[\t ]+\"cppadcg-([0-9\.]*)\"" - _ - ${cppadcg_configure_hpp} - ) - set(cppadcg_VERSION ${CMAKE_MATCH_1}) + file( + READ "${cppadcg_INCLUDE_DIR}/cppad/cg/configure.hpp" + cppadcg_configure_hpp + ) + # Version is stored on the following line: + # `#define CPPAD_CG_VERSION "cppadcg-2.5.0"` + string( + REGEX MATCH "#define[\t ]+CPPAD_CG_VERSION[\t ]+\"cppadcg-([0-9\.]*)\"" + _ + ${cppadcg_configure_hpp} + ) + set(cppadcg_VERSION ${CMAKE_MATCH_1}) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args( - cppadcg - REQUIRED_VARS cppadcg_INCLUDE_DIR - VERSION_VAR cppadcg_VERSION + cppadcg + REQUIRED_VARS cppadcg_INCLUDE_DIR + VERSION_VAR cppadcg_VERSION ) # cppadcg depend of cppad diff --git a/cmake/find-external/GMP/FindGMP.cmake b/cmake/find-external/GMP/FindGMP.cmake index 94eea7b704..3439e9b719 100644 --- a/cmake/find-external/GMP/FindGMP.cmake +++ b/cmake/find-external/GMP/FindGMP.cmake @@ -2,7 +2,7 @@ # http://gmplib.org/ if(GMP_INCLUDES AND GMP_LIBRARIES) - set(GMP_FIND_QUIETLY TRUE) + set(GMP_FIND_QUIETLY TRUE) endif(GMP_INCLUDES AND GMP_LIBRARIES) find_path(GMP_INCLUDES NAMES gmp.h PATHS $ENV{GMPDIR} ${INCLUDE_INSTALL_DIR}) @@ -14,24 +14,24 @@ find_package_handle_standard_args(GMP DEFAULT_MSG GMP_INCLUDES GMP_LIBRARIES) # Set gmp target if(GMP_FOUND) - add_library(gmp SHARED IMPORTED) - set_target_properties( - gmp - PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIR}" - IMPORTED_CONFIGURATIONS "RELEASE" - ) - if(WIN32) + add_library(gmp SHARED IMPORTED) set_target_properties( - gmp - PROPERTIES IMPORTED_IMPLIB_RELEASE "${GMP_LIBRARIES}" + gmp + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIR}" + IMPORTED_CONFIGURATIONS "RELEASE" ) - else() - set_target_properties( - gmp - PROPERTIES IMPORTED_LOCATION_RELEASE "${GMP_LIBRARIES}" - ) - endif() + if(WIN32) + set_target_properties( + gmp + PROPERTIES IMPORTED_IMPLIB_RELEASE "${GMP_LIBRARIES}" + ) + else() + set_target_properties( + gmp + PROPERTIES IMPORTED_LOCATION_RELEASE "${GMP_LIBRARIES}" + ) + endif() endif() mark_as_advanced(GMP_INCLUDES GMP_LIBRARIES) diff --git a/cmake/find-external/MPFR/FindMPFR.cmake b/cmake/find-external/MPFR/FindMPFR.cmake index 298ebdbb01..0de8dfdfc3 100644 --- a/cmake/find-external/MPFR/FindMPFR.cmake +++ b/cmake/find-external/MPFR/FindMPFR.cmake @@ -21,63 +21,61 @@ find_path(MPFR_INCLUDES NAMES mpfr.h PATHS $ENV{GMPDIR} ${INCLUDE_INSTALL_DIR}) # Set MPFR_FIND_VERSION to 1.0.0 if no minimum version is specified if(NOT MPFR_FIND_VERSION) - if(NOT MPFR_FIND_VERSION_MAJOR) - set(MPFR_FIND_VERSION_MAJOR 1) - endif(NOT MPFR_FIND_VERSION_MAJOR) - if(NOT MPFR_FIND_VERSION_MINOR) - set(MPFR_FIND_VERSION_MINOR 0) - endif(NOT MPFR_FIND_VERSION_MINOR) - if(NOT MPFR_FIND_VERSION_PATCH) - set(MPFR_FIND_VERSION_PATCH 0) - endif(NOT MPFR_FIND_VERSION_PATCH) - - set( - MPFR_FIND_VERSION - "${MPFR_FIND_VERSION_MAJOR}.${MPFR_FIND_VERSION_MINOR}.${MPFR_FIND_VERSION_PATCH}" - ) + if(NOT MPFR_FIND_VERSION_MAJOR) + set(MPFR_FIND_VERSION_MAJOR 1) + endif(NOT MPFR_FIND_VERSION_MAJOR) + if(NOT MPFR_FIND_VERSION_MINOR) + set(MPFR_FIND_VERSION_MINOR 0) + endif(NOT MPFR_FIND_VERSION_MINOR) + if(NOT MPFR_FIND_VERSION_PATCH) + set(MPFR_FIND_VERSION_PATCH 0) + endif(NOT MPFR_FIND_VERSION_PATCH) + + set(MPFR_FIND_VERSION + "${MPFR_FIND_VERSION_MAJOR}.${MPFR_FIND_VERSION_MINOR}.${MPFR_FIND_VERSION_PATCH}" + ) endif(NOT MPFR_FIND_VERSION) if(MPFR_INCLUDES) - # Set MPFR_VERSION - - file(READ "${MPFR_INCLUDES}/mpfr.h" _mpfr_version_header) - - string( - REGEX MATCH "define[ \t]+MPFR_VERSION_MAJOR[ \t]+([0-9]+)" - _mpfr_major_version_match - "${_mpfr_version_header}" - ) - set(MPFR_MAJOR_VERSION "${CMAKE_MATCH_1}") - string( - REGEX MATCH "define[ \t]+MPFR_VERSION_MINOR[ \t]+([0-9]+)" - _mpfr_minor_version_match - "${_mpfr_version_header}" - ) - set(MPFR_MINOR_VERSION "${CMAKE_MATCH_1}") - string( - REGEX MATCH "define[ \t]+MPFR_VERSION_PATCHLEVEL[ \t]+([0-9]+)" - _mpfr_patchlevel_version_match - "${_mpfr_version_header}" - ) - set(MPFR_PATCHLEVEL_VERSION "${CMAKE_MATCH_1}") - - set( - MPFR_VERSION - ${MPFR_MAJOR_VERSION}.${MPFR_MINOR_VERSION}.${MPFR_PATCHLEVEL_VERSION} - ) - - # Check whether found version exceeds minimum version - - if(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION}) - set(MPFR_VERSION_OK FALSE) - message( - STATUS - "MPFR version ${MPFR_VERSION} found in ${MPFR_INCLUDES}, " - "but at least version ${MPFR_FIND_VERSION} is required" + # Set MPFR_VERSION + + file(READ "${MPFR_INCLUDES}/mpfr.h" _mpfr_version_header) + + string( + REGEX MATCH "define[ \t]+MPFR_VERSION_MAJOR[ \t]+([0-9]+)" + _mpfr_major_version_match + "${_mpfr_version_header}" + ) + set(MPFR_MAJOR_VERSION "${CMAKE_MATCH_1}") + string( + REGEX MATCH "define[ \t]+MPFR_VERSION_MINOR[ \t]+([0-9]+)" + _mpfr_minor_version_match + "${_mpfr_version_header}" + ) + set(MPFR_MINOR_VERSION "${CMAKE_MATCH_1}") + string( + REGEX MATCH "define[ \t]+MPFR_VERSION_PATCHLEVEL[ \t]+([0-9]+)" + _mpfr_patchlevel_version_match + "${_mpfr_version_header}" ) - else(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION}) - set(MPFR_VERSION_OK TRUE) - endif(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION}) + set(MPFR_PATCHLEVEL_VERSION "${CMAKE_MATCH_1}") + + set(MPFR_VERSION + ${MPFR_MAJOR_VERSION}.${MPFR_MINOR_VERSION}.${MPFR_PATCHLEVEL_VERSION} + ) + + # Check whether found version exceeds minimum version + + if(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION}) + set(MPFR_VERSION_OK FALSE) + message( + STATUS + "MPFR version ${MPFR_VERSION} found in ${MPFR_INCLUDES}, " + "but at least version ${MPFR_FIND_VERSION} is required" + ) + else(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION}) + set(MPFR_VERSION_OK TRUE) + endif(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION}) endif(MPFR_INCLUDES) # Set MPFR_LIBRARIES @@ -86,33 +84,33 @@ find_library(MPFR_LIBRARIES mpfr PATHS $ENV{GMPDIR} ${LIB_INSTALL_DIR}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args( - MPFR - DEFAULT_MSG - MPFR_INCLUDES - MPFR_LIBRARIES - MPFR_VERSION_OK + MPFR + DEFAULT_MSG + MPFR_INCLUDES + MPFR_LIBRARIES + MPFR_VERSION_OK ) # Set mpfr target if(MPFR_FOUND) - add_library(mpfr SHARED IMPORTED) - set_target_properties( - mpfr - PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${MPFR_INCLUDE_DIR}" - IMPORTED_CONFIGURATIONS "RELEASE" - ) - if(WIN32) - set_target_properties( - mpfr - PROPERTIES IMPORTED_IMPLIB_RELEASE "${MPFR_LIBRARIES}" - ) - else() + add_library(mpfr SHARED IMPORTED) set_target_properties( - mpfr - PROPERTIES IMPORTED_LOCATION_RELEASE "${MPFR_LIBRARIES}" + mpfr + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${MPFR_INCLUDE_DIR}" + IMPORTED_CONFIGURATIONS "RELEASE" ) - endif() + if(WIN32) + set_target_properties( + mpfr + PROPERTIES IMPORTED_IMPLIB_RELEASE "${MPFR_LIBRARIES}" + ) + else() + set_target_properties( + mpfr + PROPERTIES IMPORTED_LOCATION_RELEASE "${MPFR_LIBRARIES}" + ) + endif() endif() # Epilogue diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index 5c85e329a2..73a90d2c98 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -3,7 +3,6 @@ # Copyright (c) 2018-2026 INRIA # Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. # -# TODO test link with pinocchio add_library(pinocchio-tests-resources INTERFACE) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/serialization-data) @@ -45,5 +44,5 @@ add_subdirectory(cpp) # Python tests if(BUILD_PYTHON_INTERFACE) - add_subdirectory(python) -endif() \ No newline at end of file + #add_subdirectory(python) +endif() diff --git a/unittest/cpp/CMakeLists.txt b/unittest/cpp/CMakeLists.txt index f49520b879..ba0df7e62f 100644 --- a/unittest/cpp/CMakeLists.txt +++ b/unittest/cpp/CMakeLists.txt @@ -75,12 +75,9 @@ add_pinocchio_unit_test(delassus-operator-rigid-body) add_pinocchio_unit_test(preconditioner) add_pinocchio_unit_test(pv-solver) - - # parsers if(BUILD_WITH_URDF_SUPPORT) add_pinocchio_unit_test(urdf) - add_pinocchio_unit_test(value) if(BUILD_WITH_COLLISION_SUPPORT) add_pinocchio_unit_test(geometry-object) @@ -105,6 +102,7 @@ endif() if(BUILD_WITH_SDF_SUPPORT) add_pinocchio_unit_test(sdf) endif() + if(BUILD_WITH_PARSERS_SUPPORT) add_pinocchio_unit_test(mjcf) add_pinocchio_unit_test(model-graph) @@ -125,10 +123,6 @@ if(BUILD_WITH_PYTHON_PARSER_SUPPORT) add_pinocchio_unit_test(python_parser PYTHON_PARSER) endif() -if(BUILD_PYTHON_INTERFACE) - add_subdirectory(python) -endif() - # Test over the joints add_pinocchio_unit_test(all-joints) add_pinocchio_unit_test(joint-revolute) @@ -160,7 +154,6 @@ add_pinocchio_unit_test(finite-differences) add_pinocchio_unit_test(visitor) add_pinocchio_unit_test(algo-check) - # Warning ignore with pragma doesn't work for a part of this test, so we ignore two warning globally add_pinocchio_unit_test(liegroups) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") @@ -212,7 +205,6 @@ if(BUILD_ADVANCED_TESTING) pinocchio-test-cpp-multiprecision-mpfr PRIVATE mpfr gmp ) - endif() endif() @@ -221,12 +213,16 @@ if(BUILD_WITH_AUTODIFF_SUPPORT) macro(ADD_CPPAD_UNIT_TEST name) add_pinocchio_unit_test(${name}) add_dependencies(pinocchio-test-cpp-cppad pinocchio-test-cpp-${name}) - target_link_libraries(pinocchio-test-cpp-${name} PRIVATE pinocchio_cppad_headers) + target_link_libraries( + pinocchio-test-cpp-${name} + PRIVATE pinocchio_cppad_headers + ) endmacro() if(BUILD_WITH_AUTODIFF_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) add_custom_target(pinocchio-test-cpp-cppad) - set_target_properties(pinocchio-test-cpp-cppad + set_target_properties( + pinocchio-test-cpp-cppad PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True ) add_cppad_unit_test(cppad-basic) @@ -246,10 +242,13 @@ if(BUILD_WITH_CODEGEN_SUPPORT) pinocchio-test-cpp-${name} PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" ) - target_link_libraries(pinocchio-test-cpp-${name} PRIVATE pinocchio_cppadcg_headers) + target_link_libraries( + pinocchio-test-cpp-${name} + PRIVATE pinocchio_cppadcg_headers + ) endmacro() - if( NOT BUILD_STANDALONE_PYTHON_INTERFACE) + if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) add_custom_target(pinocchio-test-cpp-cppadcg) set_target_properties( pinocchio-test-cpp-cppadcg @@ -272,12 +271,16 @@ if(BUILD_WITH_CASADI_SUPPORT) pinocchio-test-cpp-${name} PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" ) - target_link_libraries(pinocchio-test-cpp-${name} PRIVATE pinocchio_casadi_headers) + target_link_libraries( + pinocchio-test-cpp-${name} + PRIVATE pinocchio_casadi_headers + ) endmacro() if(BUILD_WITH_CASADI_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) add_custom_target(pinocchio-test-cpp-casadi) - set_target_properties( pinocchio-test-cpp-casadi + set_target_properties( + pinocchio-test-cpp-casadi PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True ) @@ -300,8 +303,14 @@ endif() # rtsan if(BUILD_WITH_RTSAN) add_pinocchio_unit_test(dynamic-allocations) - target_compile_options(pinocchio-test-cpp-dynamic-allocations PRIVATE -fsanitize=realtime) - target_link_options(pinocchio-test-cpp-dynamic-allocations PRIVATE -fsanitize=realtime) + target_compile_options( + pinocchio-test-cpp-dynamic-allocations + PRIVATE -fsanitize=realtime + ) + target_link_options( + pinocchio-test-cpp-dynamic-allocations + PRIVATE -fsanitize=realtime + ) # On osx-arm64 mutex are called to initialize some static variables. # We use a suppression file to make this test pass. if(APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") @@ -314,16 +323,19 @@ if(BUILD_WITH_RTSAN) endif() endif() -if (BUILD_WITH_OPENMP_SUPPORT) +if(BUILD_WITH_OPENMP_SUPPORT) macro(add_pinocchio_parallel_unit_test name) add_pinocchio_unit_test(${name}) - target_link_libraries(pinocchio-test-cpp-${name} PUBLIC pinocchio_parallel) + target_link_libraries( + pinocchio-test-cpp-${name} + PUBLIC pinocchio_parallel + ) endmacro() add_pinocchio_parallel_unit_test(parallel-aba) add_pinocchio_parallel_unit_test(openmp-exception) add_pinocchio_parallel_unit_test(parallel-rnea) - + if(BUILD_WITH_URDF_SUPPORT AND BUILD_WITH_COLLISION_SUPPORT) add_pinocchio_parallel_unit_test(parallel-geometry) endif() diff --git a/unittest/cpp/contact-dynamics-derivatives.cpp b/unittest/cpp/contact-dynamics-derivatives.cpp index 3bc484e4fa..a78049caec 100644 --- a/unittest/cpp/contact-dynamics-derivatives.cpp +++ b/unittest/cpp/contact-dynamics-derivatives.cpp @@ -26,7 +26,6 @@ #include "pinocchio/parsers/sdf.hpp" #include "pinocchio/parsers/srdf.hpp" - #endif // PINOCCHIO_WITH_SDFORMAT #include diff --git a/unittest/cpp/joint-helical.cpp b/unittest/cpp/joint-helical.cpp index 83250ea8f9..2f32d0e218 100644 --- a/unittest/cpp/joint-helical.cpp +++ b/unittest/cpp/joint-helical.cpp @@ -30,7 +30,6 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } - BOOST_AUTO_TEST_CASE(vsPXRX) { typedef SE3::Vector3 Vector3; @@ -190,7 +189,6 @@ BOOST_AUTO_TEST_CASE(helical_spatial) BOOST_CHECK(v.cross(mh_z).isApprox(v.cross(mh_dense_z))); } - BOOST_AUTO_TEST_CASE(vsHX) { using namespace pinocchio; @@ -270,4 +268,3 @@ BOOST_AUTO_TEST_CASE(vsHX) BOOST_CHECK(jacobianPX.isApprox(jacobianPrismaticUnaligned)); } - diff --git a/unittest/cpp/joint-prismatic.cpp b/unittest/cpp/joint-prismatic.cpp index 39ab2769a7..7d57cf2f3a 100644 --- a/unittest/cpp/joint-prismatic.cpp +++ b/unittest/cpp/joint-prismatic.cpp @@ -31,7 +31,6 @@ void addJointAndBody( model.appendBodyToJoint(idx, Y); } - BOOST_AUTO_TEST_CASE(prismatic_spatial) { typedef TransformPrismaticTpl TransformX; @@ -214,8 +213,6 @@ BOOST_AUTO_TEST_CASE(test_crba) BOOST_CHECK(M_expected.isApprox(data.M, 1e-10)); } - - BOOST_AUTO_TEST_CASE(prismatic_unaligned_spatial) { SE3 M(SE3::Random()); @@ -310,4 +307,3 @@ BOOST_AUTO_TEST_CASE(vsPX) BOOST_CHECK(jacobianPX.isApprox(jacobianPrismaticUnaligned)); } - From 2d2f717d879f8fd32a307729eae04fd8b6976504 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Wed, 29 Jul 2026 19:13:08 +0200 Subject: [PATCH 23/32] cmake: port bindings --- bindings/CMakeLists.txt | 3 - bindings/python/CMakeLists.txt | 708 ++++++++++++++++----------------- 2 files changed, 342 insertions(+), 369 deletions(-) diff --git a/bindings/CMakeLists.txt b/bindings/CMakeLists.txt index 7c265eb7aa..71e4be5ac2 100644 --- a/bindings/CMakeLists.txt +++ b/bindings/CMakeLists.txt @@ -3,6 +3,3 @@ # add_subdirectory(python) -if(BUILD_PYTHON_INTERFACE) - set(PYWRAP ${PYWRAP} PARENT_SCOPE) -endif(BUILD_PYTHON_INTERFACE) diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt index ab5cb488c3..197c375175 100644 --- a/bindings/python/CMakeLists.txt +++ b/bindings/python/CMakeLists.txt @@ -1,409 +1,385 @@ # # Copyright (c) 2015-2023 CNRS INRIA # Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. -# - -include(${JRL_CMAKE_MODULES}/python-helpers.cmake) -include(${JRL_CMAKE_MODULES}/stubs.cmake) - -# --- PYTHON TARGET --- # -set(PYWRAP ${PROJECT_NAME}_pywrap) -set(PYWRAP ${PYWRAP} PARENT_SCOPE) - -# --- COMPILE WRAPPER -make_directory("${${PROJECT_NAME}_BINARY_DIR}/bindings/python/${PROJECT_NAME}") -set(${PYWRAP}_SOURCES ${${PROJECT_NAME}_BINDINGS_PYTHON_SOURCES}) -set(${PYWRAP}_HEADERS ${${PROJECT_NAME}_BINDINGS_PYTHON_PUBLIC_HEADERS}) -function(PINOCCHIO_PYTHON_BINDINGS_SPECIFIC_TYPE scalar_name) - set(scalar_name "${scalar_name}") - set(PYTHON_LIB_NAME "${PYWRAP}_${scalar_name}") - - string(TOUPPER ${scalar_name} upper_scalar_name) - set(EXTRA_SOURCES - ${${PROJECT_NAME}_BINDINGS_PYTHON_EXTRA_${upper_scalar_name}_SOURCES} - ) - set(EXTRA_HEADERS - ${${PROJECT_NAME}_BINDINGS_PYTHON_EXTRA_${upper_scalar_name}_PUBLIC_HEADERS} +function(pinocchio_add_python_binding scalar_name) + set(target_name pinocchio_pywrap_${scalar_name}) + jrl_boostpy_add_module(${target_name} ${ARGN}) + jrl_target_enforce_msvc_conformance(${target_name} PRIVATE) + jrl_check_python_module_name(${target_name}) + target_link_libraries( + ${target_name} + PRIVATE eigenpy::eigenpy pinocchio_pywrap_headers ) + jrl_target_set_default_compile_options(${target_name} PRIVATE) + jrl_target_set_output_directory(${target_name} OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/site-packages/pinocchio) - set(${PYTHON_LIB_NAME}_SOURCES ${${PYWRAP}_SOURCES} ${EXTRA_SOURCES}) - set(${PYTHON_LIB_NAME}_HEADERS ${${PYWRAP}_HEADERS} ${EXTRA_HEADERS}) - - add_library( - ${PYTHON_LIB_NAME} - SHARED - ${${PYTHON_LIB_NAME}_SOURCES} - ${${PYTHON_LIB_NAME}_HEADERS} + target_compile_definitions( + ${target_name} + PRIVATE + PINOCCHIO_PYTHON_CONTEXT_FILE="pinocchio/bindings/python/context/${scalar_name}.hpp" + PINOCCHIO_PYTHON_MODULE_NAME=${target_name} ) # Links against accelerate if(BUILD_WITH_ACCELERATE_SUPPORT) - # modernize_target_link_libraries(${PYTHON_LIB_NAME} SCOPE PUBLIC TARGETS Accelerate) - target_link_libraries( - ${PYTHON_LIB_NAME} - PRIVATE "-framework accelerate" - ) - endif(BUILD_WITH_ACCELERATE_SUPPORT) + target_link_libraries(${target_name} PRIVATE "-framework accelerate") + endif() if(BUILD_WITH_OPENMP_SUPPORT) # OpenMP is linked with pinocchio_parallel target target_compile_definitions( - ${PYTHON_LIB_NAME} + ${target_name} PRIVATE -DPINOCCHIO_PYTHON_INTERFACE_WITH_OPENMP ) endif() - add_dependencies(${PROJECT_NAME}-python ${PYTHON_LIB_NAME}) - - # Remove lib prefix for the target and use the right define for DLLAPI definition. - # - # Set inlined function visibility to hidden by default. This avoid bug on OSX where two symbol - # from two different binding (`pinocchio::python::exposeSpecificTypeFeatures`) can be wrongly - # loaded (see https://github.com/stack-of-tasks/pinocchio/issues/2462). - set_target_properties( - ${PYTHON_LIB_NAME} - PROPERTIES - PREFIX "" - DEFINE_SYMBOL "${PYWRAP}_EXPORTS" - CXX_VISIBILITY_PRESET hidden - VISIBILITY_INLINES_HIDDEN ON - ) - - # Do not report: - # - # * -Wconversion as the BOOST_PYTHON_FUNCTION_OVERLOADS implicitly converts. - # * -Wcomment as latex equations have multi-line comments. - # * -Wself-assign-overloaded as bp::self operations trigger this (Clang only). - # * -Xclang=-fno-pch-timestamp to allow ccache to use pch - # (https://ccache.dev/manual/latest.html#_precompiled_headers). - cxx_flags_by_compiler_frontend( - GNU -Wno-conversion -Wno-comment -Wno-self-assign-overloaded -Xclang=-fno-pch-timestamp - MSVC -Xclang=-fno-pch-timestamp - OUTPUT PRIVATE_OPTIONS - FILTER - ) - target_compile_options(${PYTHON_LIB_NAME} PRIVATE ${PRIVATE_OPTIONS}) - - set(PINOCCHIO_PYTHON_CONTEXT_FILE_VALUE - "pinocchio/bindings/python/context/${scalar_name}.hpp" - ) - target_compile_definitions( - ${PYTHON_LIB_NAME} - PRIVATE - PINOCCHIO_PYTHON_CONTEXT_FILE="${PINOCCHIO_PYTHON_CONTEXT_FILE_VALUE}" - PINOCCHIO_PYTHON_MODULE_NAME=${PYTHON_LIB_NAME} - ) - - set_target_properties( - ${PYTHON_LIB_NAME} - PROPERTIES VERSION ${PROJECT_VERSION} - ) - if(BUILD_WITH_COMMIT_VERSION) - tag_library_version(${PYTHON_LIB_NAME}) - endif(BUILD_WITH_COMMIT_VERSION) - add_header_group(${PYTHON_LIB_NAME}_HEADERS) - add_source_group(${PYTHON_LIB_NAME}_SOURCES) - - modernize_target_link_libraries( - ${PYTHON_LIB_NAME} - SCOPE PUBLIC - TARGETS eigenpy::eigenpy - ) - target_link_libraries( - ${PYTHON_LIB_NAME} - PUBLIC ${PROJECT_NAME}::${PROJECT_NAME} - ) if(BUILD_WITH_URDF_SUPPORT) # Link directly against console_bridge since we bind some enums and call # console_bridge::setLogLevel function. - modernize_target_link_libraries( - ${PYTHON_LIB_NAME} - SCOPE PUBLIC - TARGETS console_bridge::console_bridge - LIBRARIES ${console_bridge_LIBRARIES} - INCLUDE_DIRS ${console_bridge_INCLUDE_DIRS} - ) + target_link_libraries(${target_name} PUBLIC console_bridge::console_bridge) endif() + if(BUILD_WITH_COLLISION_SUPPORT) target_compile_definitions( - ${PYTHON_LIB_NAME} + ${target_name} PRIVATE PINOCCHIO_PYTHON_INTERFACE_WITH_COLLISION_PYTHON_BINDINGS ) endif() - if(WIN32) - target_link_libraries(${PYTHON_LIB_NAME} PUBLIC ${PYTHON_LIBRARY}) - endif() - - set(${PYWRAP}_INSTALL_DIR ${ABSOLUTE_PYTHON_SITELIB}/${PROJECT_NAME}) - - set_target_properties( - ${PYTHON_LIB_NAME} - PROPERTIES - PREFIX "" - SUFFIX ${PYTHON_EXT_SUFFIX} - OUTPUT_NAME "${PYTHON_LIB_NAME}" - LIBRARY_OUTPUT_DIRECTORY - "${PROJECT_BINARY_DIR}/bindings/python/${PROJECT_NAME}" - # On Windows, shared library are treat as binary - RUNTIME_OUTPUT_DIRECTORY - "${PROJECT_BINARY_DIR}/bindings/python/${PROJECT_NAME}" - ) - - if(UNIX) - get_relative_rpath(${${PYWRAP}_INSTALL_DIR} ${PYWRAP}_INSTALL_RPATH) - set_target_properties( - ${PYTHON_LIB_NAME} - PROPERTIES INSTALL_RPATH "${${PYWRAP}_INSTALL_RPATH}" - ) - endif() - - install( - TARGETS ${PYTHON_LIB_NAME} - EXPORT ${TARGETS_EXPORT_NAME} - DESTINATION ${PINOCCHIO_PYTHON_INSTALL_DIR} - ) -endfunction() - -function(INSTALL_PYTHON_FILES) - set(options) - set(oneValueArgs MODULE) - set(multiValueArgs FILES) - cmake_parse_arguments( - ARGS - "${options}" - "${oneValueArgs}" - "${multiValueArgs}" - ${ARGN} - ) - - set(SOURCE_PATH ${PROJECT_NAME}) - set(INSTALL_PATH ${PINOCCHIO_PYTHON_INSTALL_DIR}) - if(ARGS_MODULE) - set(SOURCE_PATH ${SOURCE_PATH}/${ARGS_MODULE}) - set(INSTALL_PATH ${INSTALL_PATH}/${ARGS_MODULE}) - endif() - - foreach(f ${ARGS_FILES}) - python_build(${SOURCE_PATH} ${f}) - install(FILES ${SOURCE_PATH}/${f} DESTINATION ${INSTALL_PATH}) - endforeach() -endfunction() - -if(BUILD_PYTHON_INTERFACE) - add_custom_target(${PROJECT_NAME}-python) - set_target_properties( - ${PROJECT_NAME}-python - PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True - ) - - python_build_get_target(python_build_target) - add_dependencies(${PROJECT_NAME}-python ${python_build_target}) - if(IS_ABSOLUTE ${PYTHON_SITELIB}) - set(ABSOLUTE_PYTHON_SITELIB ${PYTHON_SITELIB}) - else() - set(ABSOLUTE_PYTHON_SITELIB ${CMAKE_INSTALL_PREFIX}/${PYTHON_SITELIB}) - endif() - set(PINOCCHIO_PYTHON_INSTALL_DIR ${ABSOLUTE_PYTHON_SITELIB}/${PROJECT_NAME}) - - pinocchio_python_bindings_specific_type(default) # Precompiled headers are used to speed up compilation of the Python bindings. We have also tested # precompiling headers for the main library's `pinocchio_default` target, but the time gain there # was negligible compared to the time gained in the Python bindings. We also precompile headers # for other scalar types as well. if(PINOCCHIO_BUILD_BINDING_WITH_PCH) target_precompile_headers( - ${PYWRAP}_default + ${target_name} PRIVATE ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pch.hpp ) endif() - set(PYTHON_LIB_NAME "${PYWRAP}_default") - set(STUBGEN_DEPENDENCIES "${PYWRAP}_default") - - if(BUILD_WITH_AUTODIFF_SUPPORT) - pinocchio_python_bindings_specific_type(cppad cppad) - # CPPAD_DEBUG_AND_RELEASE allow to mix debug and release versions of CppAD in the same program. - # This can happen when Pinocchio is build in Debug mode and pycppad is build in Release mode. - # See - # https://coin-or.github.io/CppAD/doc/preprocessor.htm#Documented%20Here.CPPAD_DEBUG_AND_RELEASE. - target_compile_definitions( - ${PYWRAP}_cppad - PRIVATE - PYCPPAD_EXCLUDE_EIGEN_NUMTRAITS_SPECIALIZATION - CPPAD_DEBUG_AND_RELEASE - ) - target_include_directories( - ${PYWRAP}_cppad - SYSTEM - PUBLIC $ - ) - target_link_libraries(${PYWRAP}_cppad PUBLIC ${cppad_LIBRARY}) - list(APPEND STUBGEN_DEPENDENCIES "${PYWRAP}_cppad") - - if(PINOCCHIO_BUILD_BINDING_WITH_PCH) - target_precompile_headers( - ${PYWRAP}_cppad - PRIVATE - ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pch.hpp - - - ) - endif() - - # --- INSTALL SCRIPTS - install_python_files(MODULE cppad FILES __init__.py) - endif(BUILD_WITH_AUTODIFF_SUPPORT) - - if(BUILD_WITH_CODEGEN_SUPPORT) - pinocchio_python_bindings_specific_type(cppadcg cppadcg) - - # On osx, use default visiblitiy because of an issue with thread_local storage defined in - # cppad/cg/cg.hpp header (see - # https://github.com/stack-of-tasks/pinocchio/pull/2469#issuecomment-2461845127) - if(APPLE) - set_target_properties( - ${PYWRAP}_cppadcg - PROPERTIES CXX_VISIBILITY_PRESET default - ) - endif() - - # CPPAD_DEBUG_AND_RELEASE allow to mix debug and release versions of CppAD in the same program. - target_compile_definitions( - ${PYWRAP}_cppadcg - PRIVATE - PYCPPAD_EXCLUDE_EIGEN_NUMTRAITS_SPECIALIZATION - CPPAD_DEBUG_AND_RELEASE - ) - target_include_directories( - ${PYWRAP}_cppadcg - SYSTEM - PUBLIC $ - ) - target_link_libraries( - ${PYWRAP}_cppadcg - PUBLIC ${cppadcg_LIBRARY} ${cppad_LIBRARY} - ) - list(APPEND STUBGEN_DEPENDENCIES "${PYWRAP}_cppadcg") - - if(PINOCCHIO_BUILD_BINDING_WITH_PCH) - target_precompile_headers( - ${PYWRAP}_cppadcg - PRIVATE - ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pch.hpp - - - - ) - endif() - - # --- INSTALL SCRIPTS - install_python_files(MODULE cppadcg FILES __init__.py) - endif(BUILD_WITH_CODEGEN_SUPPORT) - - if(BUILD_WITH_CASADI_SUPPORT) - pinocchio_python_bindings_specific_type(casadi) - target_link_libraries(${PYWRAP}_casadi PUBLIC casadi::casadi) - list(APPEND STUBGEN_DEPENDENCIES "${PYWRAP}_casadi") - - if(PINOCCHIO_BUILD_BINDING_WITH_PCH) - target_precompile_headers( - ${PYWRAP}_casadi - PRIVATE - ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pch.hpp - - - - ) - endif() - - # --- INSTALL SCRIPTS - install_python_files(MODULE casadi FILES __init__.py) - endif(BUILD_WITH_CASADI_SUPPORT) - - if(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT) - pinocchio_python_bindings_specific_type(mpfr) - - target_link_libraries(${PYWRAP}_mpfr PRIVATE gmp mpfr) - list(APPEND STUBGEN_DEPENDENCIES "${PYWRAP}_mpfr") - - if(PINOCCHIO_BUILD_BINDING_WITH_PCH) - target_precompile_headers( - ${PYWRAP}_mpfr - PRIVATE - ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pch.hpp - - ) - endif() - - # --- INSTALL SCRIPTS - install_python_files(MODULE mpfr FILES __init__.py) - endif() +endfunction() - # --- INSTALL SCRIPTS - install_python_files( - FILES __init__.py - deprecated.py - deprecation.py - utils.py - robot_wrapper.py - romeo_wrapper.py - explog.py - shortcuts.py - windows_dll_manager.py +# Define header interface +add_library(pinocchio_pywrap_headers INTERFACE) +add_library(pinocchio::pinocchio_pywrap_headers ALIAS pinocchio_pywrap_headers) +target_link_libraries(pinocchio_pywrap_headers INTERFACE pinocchio) +target_include_directories( + pinocchio_pywrap_headers + INTERFACE + $ + $ +) + +jrl_target_headers(pinocchio_pywrap_headers INTERFACE + HEADERS + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/explog.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/classic-acceleration.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/symmetric3.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/motion.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/force.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/inertia.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/spatial/se3.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/contact-info.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraint-cholesky.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraint-solver-base.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/delassus-operator.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/proximal.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/algorithms.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/baumgarte-corrector-param + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraint-data-base.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraint-data.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraint-data-inheritan + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraint-model-base.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraint-model.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraint-model-inherita + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraints-datas.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraints-models.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/constraints-variant.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/set-base.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/set-box-set.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/set-coulomb-friction-cone + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/algorithm/constraints/set-trivial-cones.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pybind11-all.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/pybind11.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/constant.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/version.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/pickle-vector.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/macros.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/path.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/std-vector.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/printable.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/dependencies.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/conversions.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/address.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/copyable.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/registration.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/pickle.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/pickle-map.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/list.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/eigen.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/comparable.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/std-map.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/cast.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/deprecation.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/keep-alive.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/model-checker.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/namespace.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/utils/std-aligned-vector.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context/cppadcg.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context/cppad.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context/casadi.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context/default.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context/mpfr.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/context/generic.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/fwd.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/serialization/serialization.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/serialization/serializable.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/math/tridiagonal-matrix.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/math/lanczos-decomposition.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/broadphase-manager-base.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/geometry-functors.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/tree-broadphase-manager.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/data.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/frame.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/geometry-model.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joint.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/model.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joint-model.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joint-derived.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joints-models.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joints-variant.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joints-liegroup.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joints-datas.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/joint/joint-data.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/liegroups.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/geometry-data.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/geometry-object.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/parsers/urdf.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/parsers/sdf.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/parsers/mjcf.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/parsers/srdf.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/parsers/model-graph.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/parsers/graph/model-configuration-converter.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/extra/extras.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/visualizers/visualizer-visitor.hpp + BASE_DIRS include +) + +if(BUILD_WITH_COMMIT_VERSION) + tag_library_version(python/context/) +endif() + +set(COMMON_SOURCES + spatial/expose-symmetric3.cpp + spatial/expose-force.cpp + spatial/expose-inertia.cpp + spatial/expose-SE3.cpp + spatial/expose-motion.cpp + spatial/expose-explog.cpp + spatial/expose-skew.cpp + algorithm/expose-impulse-dynamics.cpp + algorithm/expose-model.cpp + algorithm/expose-centroidal.cpp + algorithm/expose-aba.cpp + algorithm/expose-algorithms.cpp + algorithm/expose-com.cpp + algorithm/expose-frames.cpp + algorithm/expose-energy.cpp + algorithm/expose-contact-dynamics.cpp + algorithm/expose-constrained-dynamics-derivatives.cpp + algorithm/expose-rnea-derivatives.cpp + algorithm/expose-kinematics.cpp + algorithm/expose-geometry.cpp + algorithm/expose-aba-derivatives.cpp + algorithm/expose-constraint-solvers.cpp + algorithm/expose-contact-inverse-dynamics.cpp + algorithm/expose-joints.cpp + algorithm/expose-constrained-dynamics.cpp + algorithm/expose-loop-constrained-aba.cpp + algorithm/expose-rnea.cpp + algorithm/expose-contact-jacobian.cpp + algorithm/constraints/expose-cones.cpp + algorithm/constraints/expose-constraints.cpp + algorithm/expose-cholesky.cpp + algorithm/expose-regressor.cpp + algorithm/expose-kinematics-derivatives.cpp + algorithm/expose-cat.cpp + algorithm/expose-frames-derivatives.cpp + algorithm/expose-centroidal-derivatives.cpp + algorithm/expose-jacobian.cpp + algorithm/expose-delassus.cpp + algorithm/expose-impulse-dynamics-derivatives.cpp + algorithm/expose-kinematic-regressor.cpp + algorithm/expose-crba.cpp + algorithm/solvers/expose-admm-solver.cpp + algorithm/solvers/expose-pgs-solver.cpp + utils/version.cpp + utils/dependencies.cpp + utils/conversions.cpp + utils/path.cpp + math/expose-linalg.cpp + math/expose-tridiagonal-matrix.cpp + math/expose-lanczos-decomposition.cpp + math/expose-gram-schmidt-orthonormalisation.cpp + math/expose-rpy.cpp + math/expose-eigen-types.cpp + serialization/serialization.cpp + multibody/expose-model.cpp + multibody/expose-liegroups.cpp + multibody/expose-geometry.cpp + multibody/expose-frame.cpp + multibody/expose-data.cpp + multibody/joint/expose-joints.cpp + multibody/sample-models.cpp + parsers/sdf/model.cpp + parsers/sdf/geometry.cpp + parsers/expose-parsers.cpp + parsers/urdf/console-bridge.cpp + parsers/urdf/model.cpp + parsers/urdf/geometry.cpp + parsers/srdf.cpp + parsers/mjcf/model.cpp + parsers/mjcf/geometry.cpp + parsers/graph/expose-edges.cpp + parsers/graph/expose-frames.cpp + parsers/graph/expose-geometries.cpp + parsers/graph/expose-model-graph-algo.cpp + parsers/graph/expose-model-graph.cpp + parsers/graph/expose-model-configuration-converter.cpp + extra/expose-extras.cpp + module.cpp +) + +if(BUILD_WITH_EXTRA_SUPPORT) + list( + APPEND COMMON_SOURCES + ${PROJECT_SOURCE_DIR}/bindings/python/extra/expose-reachable-workspace.cpp ) - - # --- INSTALL DERIVATIVE SCRIPTS - install_python_files(MODULE derivative FILES xm.py dcrba.py lambdas.py) - - # --- INSTALL VISUALIZATION SCRIPTS - install_python_files( - MODULE visualize - FILES __init__.py - base_visualizer.py - gepetto_visualizer.py - meshcat_visualizer.py - panda3d_visualizer.py - rviz_visualizer.py - viser_visualizer.py - visualizers.py +endif() + +# default scalar +pinocchio_add_python_binding(default ${COMMON_SOURCES}) +add_library(pinocchio_pywrap ALIAS pinocchio_pywrap_default) + +if(GENERATE_PYTHON_STUBS) + set(STUBGEN_DEPENDENCIES) +endif() + +if(BUILD_WITH_AUTODIFF_SUPPORT) + pinocchio_add_python_binding(cppad ${COMMON_SOURCES}) + # CPPAD_DEBUG_AND_RELEASE allow to mix debug and release versions of CppAD in the same program. + # This can happen when Pinocchio is build in Debug mode and pycppad is build in Release mode. + # See + # https://coin-or.github.io/CppAD/doc/preprocessor.htm#Documented%20Here.CPPAD_DEBUG_AND_RELEASE. + target_compile_definitions( + pinocchio_pywrap_cppad + PRIVATE + PYCPPAD_EXCLUDE_EIGEN_NUMTRAITS_SPECIALIZATION + CPPAD_DEBUG_AND_RELEASE ) - - # --- STUBS --- # - if(GENERATE_PYTHON_STUBS) - python_build_get_target(python_build_target_name) - load_stubgen() - # Set PYWRAP and PROJECT_NAME as stubs dependencies. - # - # PROJECT_NAME is mandatory (even if it's a PYWRAP dependency) to find PROJECT_NAME name DLL on - # windows. - generate_stubs( - ${CMAKE_CURRENT_BINARY_DIR} - ${PROJECT_NAME} - ${ABSOLUTE_PYTHON_SITELIB} - ${PYWRAP}_default - ${PROJECT_NAME}::${PROJECT_NAME}_default - ${STUBGEN_DEPENDENCIES} - ${python_build_target_name} - ) - endif(GENERATE_PYTHON_STUBS) - - # --- PACKAGING --- # - - if(DOXYGEN_FOUND AND DOXYGEN_VERSION VERSION_GREATER 1.8.17) - set(DOXYGEN_GENERATE_HTML YES) - set(DOXYGEN_GENERATE_LATEX NO) - set(DOXYGEN_PROJECT_NAME "Pinocchio PyBind11 helpers.") - set(_source_headers_root - "../../include/${PROJECT_NAME}/bindings/python" - ) - doxygen_add_docs( - doc_pybind11 - ${_source_headers_root}/pybind11.hpp - ${_source_headers_root}/pybind11-all.hpp - USE_STAMP_FILE - COMMENT "Generating documentation of the PyBind11 helpers." + target_include_directories( + pinocchio_pywrap_cppad + SYSTEM + PUBLIC $ + ) + target_link_libraries(pinocchio_pywrap_cppad PUBLIC ${cppad_LIBRARY}) + list(APPEND STUBGEN_DEPENDENCIES "pinocchio_pywrap_cppad") +endif() + +if(BUILD_WITH_CODEGEN_SUPPORT) + pinocchio_add_python_binding(cppadcg ${COMMON_SOURCES}) + # On osx, use default visiblitiy because of an issue with thread_local storage defined in + # cppad/cg/cg.hpp header (see + # https://github.com/stack-of-tasks/pinocchio/pull/2469#issuecomment-2461845127) + if(APPLE) + set_target_properties( + pinocchio_pywrap_cppadcg + PROPERTIES CXX_VISIBILITY_PRESET default ) endif() -endif(BUILD_PYTHON_INTERFACE) + # CPPAD_DEBUG_AND_RELEASE allow to mix debug and release versions of CppAD in the same program. + target_compile_definitions( + pinocchio_pywrap_cppadcg + PRIVATE + PYCPPAD_EXCLUDE_EIGEN_NUMTRAITS_SPECIALIZATION + CPPAD_DEBUG_AND_RELEASE + ) + target_include_directories( + pinocchio_pywrap_cppadcg + SYSTEM + PUBLIC $ + ) + target_link_libraries( + pinocchio_pywrap_cppadcg + PUBLIC ${cppadcg_LIBRARY} ${cppad_LIBRARY} + ) + list(APPEND STUBGEN_DEPENDENCIES "pinocchio_pywrap_cppadcg") +endif() + +if(BUILD_WITH_CASADI_SUPPORT) + pinocchio_add_python_binding(casadi ${COMMON_SOURCES}) + target_link_libraries(pinocchio_pywrap_casadi PUBLIC casadi::casadi) + list(APPEND STUBGEN_DEPENDENCIES "pinocchio_pywrap_casadi") +endif() + +if(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT) + jrl_target_headers(pinocchio_pywrap_headers INTERFACE + HEADERS + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/math/multiprecision/boost/number.hpp + BASE_DIRS include + ) + pinocchio_add_python_binding(mpfr ${COMMON_SOURCES} ${PROJECT_SOURCE_DIR}/bindings/python/extra/mpfr/boost_number.cpp) + target_link_libraries(pinocchio_pywrap_mpfr PRIVATE gmp mpfr) + list(APPEND STUBGEN_DEPENDENCIES "pinocchio_pywrap_mpfr") +endif() + +# --- PACKAGING --- # +if(DOXYGEN_FOUND AND DOXYGEN_VERSION VERSION_GREATER 1.8.17) + set(DOXYGEN_GENERATE_HTML YES) + set(DOXYGEN_GENERATE_LATEX NO) + set(DOXYGEN_PROJECT_NAME "Pinocchio PyBind11 helpers.") + set(_source_headers_root "../../include/${PROJECT_NAME}/bindings/python") + doxygen_add_docs( + doc_pybind11 + ${_source_headers_root}/pybind11.hpp + ${_source_headers_root}/pybind11-all.hpp + USE_STAMP_FILE + COMMENT "Generating documentation of the PyBind11 helpers." + ) +endif() + +# Generate python stubs +if(GENERATE_PYTHON_STUBS) + jrl_boostpy_add_stubs( + pinocchio_pywrap_stubs + MODULE pinocchio.pinocchio_pywrap_default + OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib/site-packages + PYTHON_PATH ${CMAKE_BINARY_DIR}/lib/site-packages + DEPENDS pinocchio_pywrap ${STUBGEN_DEPENDENCIES} + VERBOSE + ) +endif() + +# Compile and move in build directory all .py file +jrl_python_compile_all(DIRECTORY + ${CMAKE_BINARY_DIR}/lib/site-packages/pinocchio + VERBOSE +) + +# Install binding in the right location +jrl_python_compute_install_dir(python_install_dir) +install( + DIRECTORY + ${CMAKE_BINARY_DIR}/lib/site-packages/pinocchio + ${CMAKE_CURRENT_SOURCE_DIR}/pinocchio + DESTINATION ${python_install_dir} + FILES_MATCHING + PATTERN "*.py" + PATTERN "*.pyc" + PATTERN "*.pyi" + PATTERN "*.typed" + PATTERN "*.so" + PATTERN "*.pyd" +) From fd2cce9f12e925b27bf80d7baf73a317b4a2ea67 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Thu, 30 Jul 2026 15:36:13 +0200 Subject: [PATCH 24/32] cmake: port python test --- CMakeLists.txt | 19 ++ bindings/python/CMakeLists.txt | 65 ++++++- unittest/CMakeLists.txt | 2 +- unittest/python/CMakeLists.txt | 233 ++++++++++++------------ unittest/python/casadi/CMakeLists.txt | 4 +- unittest/python/pybind11/CMakeLists.txt | 30 +-- 6 files changed, 220 insertions(+), 133 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f2d31e1530..2e445ce38d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,6 +98,7 @@ endif() if(BUILD_WITH_URDF_SUPPORT) jrl_find_package(urdfdom_headers REQUIRED) jrl_find_package(urdfdom REQUIRED) + jrl_find_package(console_bridge CONFIG REQUIRED EXPECTED_TARGETS console_bridge::console_bridge) endif() if(BUILD_WITH_CODEGEN_SUPPORT) @@ -122,6 +123,24 @@ endif() set(PINOCCHIO_MODEL_DIR "${PROJECT_SOURCE_DIR}/models") jrl_find_package(example-robot-data CONFIG REQUIRED EXPECTED_TARGETS example-robot-data::example-robot-data) +get_target_property( + EXAMPLE_ROBOT_DATA_MODEL_DIR_DEF + example-robot-data::example-robot-data + INTERFACE_COMPILE_DEFINITIONS +) +string( + REPLACE "EXAMPLE_ROBOT_DATA_MODEL_DIR=" + "" + EXAMPLE_ROBOT_DATA_MODEL_DIR_QUOTES + "${EXAMPLE_ROBOT_DATA_MODEL_DIR_DEF}" +) +string( + REPLACE "\"" + "" + EXAMPLE_ROBOT_DATA_MODEL_DIR + "${EXAMPLE_ROBOT_DATA_MODEL_DIR_QUOTES}" +) + if(BUILD_WITH_CASADI_SUPPORT) jrl_find_package(casadi REQUIRED) if(NOT TARGET casadi::casadi AND TARGET casadi) diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt index 197c375175..36ff6f380e 100644 --- a/bindings/python/CMakeLists.txt +++ b/bindings/python/CMakeLists.txt @@ -37,7 +37,10 @@ function(pinocchio_add_python_binding scalar_name) if(BUILD_WITH_URDF_SUPPORT) # Link directly against console_bridge since we bind some enums and call # console_bridge::setLogLevel function. - target_link_libraries(${target_name} PUBLIC console_bridge::console_bridge) + target_link_libraries( + ${target_name} + PUBLIC console_bridge::console_bridge + ) endif() if(BUILD_WITH_COLLISION_SUPPORT) @@ -167,10 +170,6 @@ jrl_target_headers(pinocchio_pywrap_headers INTERFACE BASE_DIRS include ) -if(BUILD_WITH_COMMIT_VERSION) - tag_library_version(python/context/) -endif() - set(COMMON_SOURCES spatial/expose-symmetric3.cpp spatial/expose-force.cpp @@ -248,10 +247,59 @@ set(COMMON_SOURCES parsers/graph/expose-model-graph-algo.cpp parsers/graph/expose-model-graph.cpp parsers/graph/expose-model-configuration-converter.cpp + parsers/graph/expose-model-graph-algo-geometry.cpp extra/expose-extras.cpp module.cpp ) +if(BUILD_WITH_COLLISION_SUPPORT) + jrl_target_headers(pinocchio_pywrap_headers INTERFACE + HEADERS + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/coal/transform.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/fcl/transform.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/broadphase-manager.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/collision.hpp + BASE_DIRS include + ) + list( + APPEND COMMON_SOURCES + collision/expose-broadphase.cpp + collision/expose-broadphase-callbacks.cpp + collision/expose-collision.cpp + collision/expose-coal.cpp + ) +endif() + +if(BUILD_WITH_OPENMP_SUPPORT) + jrl_target_headers(pinocchio_pywrap_headers INTERFACE + HEADERS + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/multibody/pool/model.hpp + BASE_DIRS include + ) + list( + APPEND COMMON_SOURCES + multibody/pool/expose-pool.cpp + algorithm/parallel/aba.cpp + algorithm/parallel/expose-parallel.cpp + algorithm/parallel/rnea.cpp + ) + if(BUILD_WITH_COLLISION_SUPPORT) + jrl_target_headers(pinocchio_pywrap_headers INTERFACE + HEADERS + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/pool/geometry.hpp + ${PROJECT_SOURCE_DIR}/include/pinocchio/bindings/python/collision/pool/broadphase-manager.hpp + BASE_DIRS include + ) + list( + APPEND COMMON_SOURCES + collision/parallel/expose-parallel.cpp + collision/parallel/geometry.cpp + collision/parallel/broadphase.cpp + collision/pool/expose-pool.cpp + ) + endif() +endif() + if(BUILD_WITH_EXTRA_SUPPORT) list( APPEND COMMON_SOURCES @@ -357,12 +405,17 @@ if(GENERATE_PYTHON_STUBS) MODULE pinocchio.pinocchio_pywrap_default OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib/site-packages PYTHON_PATH ${CMAKE_BINARY_DIR}/lib/site-packages - DEPENDS pinocchio_pywrap ${STUBGEN_DEPENDENCIES} + DEPENDS pinocchio_pywrap VERBOSE ) + if(STUBGEN_DEPENDENCIES) + add_dependencies(pinocchio_pywrap_stubs ${STUBGEN_DEPENDENCIES}) + endif() endif() # Compile and move in build directory all .py file +file(COPY pinocchio DESTINATION ${CMAKE_BINARY_DIR}/lib/site-packages) + jrl_python_compile_all(DIRECTORY ${CMAKE_BINARY_DIR}/lib/site-packages/pinocchio VERBOSE diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index 73a90d2c98..1c45853b16 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -44,5 +44,5 @@ add_subdirectory(cpp) # Python tests if(BUILD_PYTHON_INTERFACE) - #add_subdirectory(python) + add_subdirectory(python) endif() diff --git a/unittest/python/CMakeLists.txt b/unittest/python/CMakeLists.txt index 30b710e3b1..12a0e821cf 100644 --- a/unittest/python/CMakeLists.txt +++ b/unittest/python/CMakeLists.txt @@ -1,7 +1,6 @@ # # Copyright (c) 2015-2025 CNRS INRIA # -include(${JRL_CMAKE_MODULES}/python-helpers.cmake) set(${PROJECT_NAME}_PYTHON_TESTS bindings @@ -53,87 +52,47 @@ set(${PROJECT_NAME}_PYTHON_TESTS bindings_std_map ) -function(pinocchio_add_python_cpp_module name) - set(target_name "test-ext-${name}") - string(REPLACE "_" "-" target_name ${target_name}) - string(REPLACE "-" "_" module_name ${target_name}) - set(source_file "${name}.cpp") - set(options) - set(oneValueArgs) - set(multiValueArgs "PIN_TARGETS") - cmake_parse_arguments( - ARGS - "${options}" - "${oneValueArgs}" - "${multiValueArgs}" - ${ARGN} - ) - if(BUILD_TESTING) - set(_exclude) - else() - set(_exclude EXCLUDE_FROM_ALL) - endif() - - add_library(${target_name} MODULE ${_exclude} ${source_file}) - target_compile_definitions( - ${target_name} - PRIVATE EXT_MODULE_NAME=${module_name} - ) - target_link_libraries( - ${target_name} - PRIVATE pinocchio::pinocchio_default eigenpy::eigenpy +function(pinocchio_python_add_test name) + set(test_name "${PROJECT_NAME}-test-py-${name}") + add_test( + NAME ${test_name} + COMMAND + $ + ${CMAKE_CURRENT_SOURCE_DIR}/${name}.py ) - foreach(_dep ${ARGS_PIN_TARGETS}) - target_link_libraries(${target_name} PRIVATE ${_dep}) - endforeach() - set_target_properties( - ${target_name} + set_tests_properties( + ${test_name} PROPERTIES - PREFIX "" - SUFFIX "${PYTHON_EXT_SUFFIX}" - LIBRARY_OUTPUT_NAME ${module_name} - RUNTIME_OUTPUT_NAME ${module_name} - ) - - add_test( - NAME ${target_name} - COMMAND ${PYTHON_EXECUTABLE} -c "import ${module_name}" - WORKING_DIRECTORY $ + ENVIRONMENT + "PYTHONPATH=$/.." + LABELS "python" ) - set(PYTHONPATH) - compute_pythonpath(ENV_VARIABLES bindings/python) set_tests_properties( - ${target_name} - PROPERTIES ENVIRONMENT "${ENV_VARIABLES}" + ${test_name} + PROPERTIES + ENVIRONMENT_MODIFICATION + "EXAMPLE_ROBOT_DATA_MODEL_DIR=set:${EXAMPLE_ROBOT_DATA_MODEL_DIR}" ) - - add_dependencies(build_tests ${target_name}) - if(NOT BUILD_TESTING) - set_tests_properties( - ${target_name} - PROPERTIES DEPENDS ctest_build_tests - ) - endif() -endfunction() - -function(pinocchio_add_lib_unit_test name) - set(TEST_NAME "${PROJECT_NAME}-test-py-${name}") - add_python_unit_test(${TEST_NAME} "unittest/python/${name}.py" "bindings/python" - "unittest/python" + # TODO: Remove this once coal and example-robot-data also use jrl-v2. + # (Only meaningful when Pinocchio is built in-tree inside the + # simple-workspace superbuild; empty/no-op in a standalone build.) + string( + REPLACE ";" + ":" + _pythonpath + "${PROJECT_PYTHON_PACKAGES_IN_WORKSPACE}" ) - get_test_property(${TEST_NAME} ENVIRONMENT _ENVIRONMENT) set_tests_properties( - "${TEST_NAME}" + ${test_name} PROPERTIES - ENVIRONMENT - "${_ENVIRONMENT};EXAMPLE_ROBOT_DATA_MODEL_DIR=${EXAMPLE_ROBOT_DATA_MODEL_DIR}" + ENVIRONMENT_MODIFICATION + "PYTHONPATH=path_list_prepend:${_pythonpath}" ) - add_windows_dll_path_to_test(${TEST_NAME}) endfunction() if(BUILD_WITH_COLLISION_SUPPORT) - set(${PROJECT_NAME}_PYTHON_TESTS - ${${PROJECT_NAME}_PYTHON_TESTS} + list( + APPEND PINOCCHIO_PYTHON_TESTS bindings_geometry_object bindings_coal_transform bindings_constraints @@ -142,8 +101,8 @@ if(BUILD_WITH_COLLISION_SUPPORT) endif() if(urdfdom_FOUND) - set(${PROJECT_NAME}_PYTHON_TESTS - ${${PROJECT_NAME}_PYTHON_TESTS} + list( + APPEND PINOCCHIO_PYTHON_TESTS bindings_urdf bindings_geometry_model_urdf bindings_contact_inverse_dynamics @@ -151,63 +110,113 @@ if(urdfdom_FOUND) ) endif(urdfdom_FOUND) -if(TARGET build_tests) - add_dependencies(build_tests ${PROJECT_NAME}-python) -endif() - foreach(TEST ${${PROJECT_NAME}_PYTHON_TESTS}) - set(TEST_NAME "${PROJECT_NAME}-test-py-${TEST}") - add_python_unit_test(${TEST_NAME} "unittest/python/${TEST}.py" "bindings/python") - get_test_property(${TEST_NAME} ENVIRONMENT _ENVIRONMENT) - set_tests_properties( - "${TEST_NAME}" - PROPERTIES - ENVIRONMENT - "${_ENVIRONMENT};EXAMPLE_ROBOT_DATA_MODEL_DIR=${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - ) - add_windows_dll_path_to_test(${TEST_NAME}) -endforeach(TEST ${${PROJECT_NAME}_PYTHON_TESTS}) + pinocchio_python_add_test(${TEST}) +endforeach() -make_directory("${CMAKE_CURRENT_BINARY_DIR}/serialization-data") +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/serialization-data") +# handle casadi if(BUILD_WITH_CASADI_SUPPORT) add_subdirectory(casadi) -endif(BUILD_WITH_CASADI_SUPPORT) +endif() # TODO BUILD_ADVANCED_TESTING + +# TODO(jrl-v2 migration): +# add +# - add_python_memorycheck_unit_test_v2 +# - add_windows_dll_path_to_test if(MEMORYCHECK_COMMAND AND MEMORYCHECK_COMMAND MATCHES ".*valgrind$") set(${PROJECT_NAME}_PYTHON_MEMORYCHECK_TESTS bindings_build_geom_from_urdf_memorycheck ) - foreach(TEST ${${PROJECT_NAME}_PYTHON_MEMORYCHECK_TESTS}) - set(TEST_NAME "${PROJECT_NAME}-test-py-memory-${TEST}") - add_python_memorycheck_unit_test_v2( - NAME - ${TEST_NAME} - SOURCE - "unittest/python/${TEST}.py" - SUPP - "unittest/python/${TEST}.supp" - MODULES - "bindings/python" - ) - get_test_property(${TEST_NAME} ENVIRONMENT _ENVIRONMENT) - set_tests_properties( - "${TEST_NAME}" - PROPERTIES - ENVIRONMENT - "${_ENVIRONMENT};EXAMPLE_ROBOT_DATA_MODEL_DIR=${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - ) - add_windows_dll_path_to_test(${TEST_NAME}) - endforeach() + # foreach(TEST ${${PROJECT_NAME}_PYTHON_MEMORYCHECK_TESTS}) + # set(TEST_NAME "${PROJECT_NAME}-test-py-memory-${TEST}") + # add_python_memorycheck_unit_test_v2( + # NAME + # ${TEST_NAME} + # SOURCE + # "unittest/python/${TEST}.py" + # SUPP + # "unittest/python/${TEST}.supp" + # MODULES + # "bindings/python" + # ) + # get_test_property(${TEST_NAME} ENVIRONMENT _ENVIRONMENT) + # set_tests_properties( + # "${TEST_NAME}" + # PROPERTIES + # ENVIRONMENT + # "${_ENVIRONMENT};EXAMPLE_ROBOT_DATA_MODEL_DIR=${EXAMPLE_ROBOT_DATA_MODEL_DIR}" + # ) + # add_windows_dll_path_to_test(${TEST_NAME}) + # endforeach() else() message(STATUS "Valgrind not found, memory checks are disabled") endif() +function(pinocchio_add_python_cpp_module name) + set(target_name "test-ext-${name}") + string(REPLACE "_" "-" target_name ${target_name}) + string(REPLACE "-" "_" module_name ${target_name}) + set(options) + set(oneValueArgs) + set(multiValueArgs "PIN_TARGETS") + cmake_parse_arguments( + ARGS + "${options}" + "${oneValueArgs}" + "${multiValueArgs}" + ${ARGN} + ) + + if(BUILD_TESTING) + set(_exclude) + else() + set(_exclude EXCLUDE_FROM_ALL) + endif() + + python_add_library( + ${target_name} + MODULE + ${_exclude} + WITH_SOABI + "${name}.cpp" + ) + target_compile_definitions( + ${target_name} + PRIVATE EXT_MODULE_NAME=${module_name} + ) + target_link_libraries(${target_name} PRIVATE pinocchio eigenpy::eigenpy) + foreach(_dep ${ARGS_PIN_TARGETS}) + target_link_libraries(${target_name} PRIVATE ${_dep}) + endforeach() + set_target_properties( + ${target_name} + PROPERTIES + LIBRARY_OUTPUT_NAME ${module_name} + RUNTIME_OUTPUT_NAME ${module_name} + ) + + add_test( + NAME ${target_name} + COMMAND $ -c "import ${module_name}" + WORKING_DIRECTORY $ + ) + add_dependencies(pinocchio-tests ${target_name}) +endfunction() + # TODO @jorisv: reenable these on windows when we normalize paths to lib/bin like on eigenpy if(NOT WIN32 AND PINOCCHIO_BUILD_VISUALIZERS) - pinocchio_add_python_cpp_module(bindings_visualizer PIN_TARGETS pinocchio::pinocchio_visualizers) - pinocchio_add_lib_unit_test(bindings_visualizer) + pinocchio_add_python_cpp_module(bindings_visualizer PIN_TARGETS pinocchio_visualizers) + pinocchio_python_add_test(bindings_visualizer) + set_tests_properties( + "pinocchio-test-py-bindings_visualizer" + PROPERTIES + ENVIRONMENT_MODIFICATION + "PYTHONPATH=path_list_prepend:$" + ) add_subdirectory(pybind11) endif() diff --git a/unittest/python/casadi/CMakeLists.txt b/unittest/python/casadi/CMakeLists.txt index 9a4509abb2..4f2aa4be27 100644 --- a/unittest/python/casadi/CMakeLists.txt +++ b/unittest/python/casadi/CMakeLists.txt @@ -5,7 +5,5 @@ set(${PROJECT_NAME}_PYTHON_CASADI_TESTS bindings_main_algo) foreach(test ${${PROJECT_NAME}_PYTHON_CASADI_TESTS}) - set(TEST_NAME "${PROJECT_NAME}-test-py-casadi-${test}") - add_python_unit_test(${TEST_NAME} "unittest/python/casadi/${test}.py" "bindings/python") - add_windows_dll_path_to_test(${TEST_NAME}) + pinocchio_python_add_test(${test}) endforeach() diff --git a/unittest/python/pybind11/CMakeLists.txt b/unittest/python/pybind11/CMakeLists.txt index 8996eff1c7..21b8bee380 100644 --- a/unittest/python/pybind11/CMakeLists.txt +++ b/unittest/python/pybind11/CMakeLists.txt @@ -17,19 +17,23 @@ endif() # # BUG: might not work out of the box on OSX with conda: # https://github.com/pybind/pybind11/issues/3081 -if(NOT BUILD_TESTING) - add_library(cpp2pybind11 MODULE EXCLUDE_FROM_ALL cpp2pybind11.cpp) +if(BUILD_TESTING) + set(_exclude) else() - add_library(cpp2pybind11 MODULE cpp2pybind11.cpp) + set(_exclude EXCLUDE_FROM_ALL) endif() -add_dependencies(build_tests cpp2pybind11) + +python_add_library(cpp2pybind11 MODULE ${_exclude} WITH_SOABI cpp2pybind11.cpp) +add_dependencies(pinocchio-tests cpp2pybind11) +add_dependencies(cpp2pybind11 pinocchio_pywrap_default) target_link_libraries( cpp2pybind11 - PRIVATE pinocchio_pywrap_default pybind11::module Eigen3::Eigen -) -set_target_properties( - cpp2pybind11 - PROPERTIES PREFIX "" SUFFIX ${PYTHON_EXT_SUFFIX} + PRIVATE + pinocchio_pywrap_headers + eigenpy::eigenpy + Boost::python + pybind11::module + Eigen3::Eigen ) if(CMAKE_CXX_STANDARD LESS 14) @@ -44,6 +48,10 @@ if(WIN32) target_compile_definitions(cpp2pybind11 PRIVATE -DNOMINMAX) endif(WIN32) -add_python_unit_test("test-py-cpp2pybind11" "unittest/python/pybind11/test-cpp2pybind11.py" - "bindings/python" "unittest/python/pybind11" +pinocchio_python_add_test(test-cpp2pybind11) +set_tests_properties( + "pinocchio-test-py-test-cpp2pybind11" + PROPERTIES + ENVIRONMENT_MODIFICATION + "PYTHONPATH=path_list_prepend:$" ) From f3441dab440ff6c4eada253e9a5668d98887a607 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Thu, 30 Jul 2026 18:08:36 +0200 Subject: [PATCH 25/32] cmake: Apply first part of review --- CMakeLists.txt | 67 ++++++------------- unittest/cpp/CMakeLists.txt | 2 +- unittest/cpp/algorithm-utils-force.cpp | 2 +- unittest/cpp/algorithm-utils-motion.cpp | 2 +- unittest/cpp/casadi-aba-derivatives.cpp | 2 +- unittest/cpp/casadi-aba.cpp | 2 +- unittest/cpp/casadi-algorithms.cpp | 2 +- unittest/cpp/casadi-basic.cpp | 2 +- ...casadi-constraint-dynamics-derivatives.cpp | 2 +- unittest/cpp/casadi-constraint-dynamics.cpp | 2 +- unittest/cpp/casadi-explog.cpp | 2 +- unittest/cpp/casadi-integrate-derivatives.cpp | 2 +- unittest/cpp/casadi-joints.cpp | 2 +- unittest/cpp/casadi-rnea-derivatives.cpp | 2 +- unittest/cpp/casadi-spatial.cpp | 2 +- .../cpp/constrained-dynamics-derivatives.cpp | 1 + unittest/cpp/cppad-algorithms.cpp | 2 +- unittest/cpp/cppad-basic.cpp | 2 +- unittest/cpp/cppad-derivatives.cpp | 2 +- unittest/cpp/cppad-joint-configurations.cpp | 2 +- unittest/cpp/cppad-joints.cpp | 2 +- unittest/cpp/cppad-spatial.cpp | 2 +- unittest/cpp/cppadcg-algorithms.cpp | 2 +- unittest/cpp/cppadcg-basic.cpp | 2 +- unittest/cpp/cppadcg-contact-dynamics.cpp | 2 +- unittest/cpp/cppadcg-joint-configurations.cpp | 2 +- 26 files changed, 45 insertions(+), 71 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e445ce38d..953518dcb3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,5 @@ # Copyright (c) 2015-2025 CNRS INRIA -# TODO: keep Wandercraft copyright ? -# Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. cmake_minimum_required(VERSION 3.22) project( @@ -97,7 +95,7 @@ endif() if(BUILD_WITH_URDF_SUPPORT) jrl_find_package(urdfdom_headers REQUIRED) - jrl_find_package(urdfdom REQUIRED) + jrl_find_package(urdfdom REQUIRED EXPECTED_TARGETS urdfdom::urdf_parser) jrl_find_package(console_bridge CONFIG REQUIRED EXPECTED_TARGETS console_bridge::console_bridge) endif() @@ -106,8 +104,7 @@ if(BUILD_WITH_CODEGEN_SUPPORT) APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find-external/CppAD" ) - jrl_find_package(cppadcg REQUIRED) - set(BUILD_WITH_CPPAD_CODEGEN_SUPPORT TRUE) + jrl_find_package(cppadcg REQUIRED EXPECTED_TARGETS cppadcg::cppadcg) set(BUILD_WITH_AUTODIFF_SUPPORT TRUE) endif(BUILD_WITH_CODEGEN_SUPPORT) @@ -117,7 +114,7 @@ if(BUILD_WITH_AUTODIFF_SUPPORT) APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find-external/CppAD" ) - jrl_find_package(cppad REQUIRED) + jrl_find_package(cppad REQUIRED EXPECTED_TARGETS cppad::cppad) endif() set(PINOCCHIO_MODEL_DIR "${PROJECT_SOURCE_DIR}/models") @@ -143,13 +140,15 @@ string( if(BUILD_WITH_CASADI_SUPPORT) jrl_find_package(casadi REQUIRED) + # Normalize CasADi link target across versions. + #Prefer imported target (casadi::casadi), then legacy target (casadi) if(NOT TARGET casadi::casadi AND TARGET casadi) add_library(casadi::casadi ALIAS casadi) endif() endif() if(BUILD_WITH_EXTRA_SUPPORT) - jrl_find_package(Qhull COMPONENTS qhullcpp qhull_r REQUIRED) + jrl_find_package(Qhull COMPONENTS qhullcpp qhull_r REQUIRED EXPECTED_TARGETS Qhull::qhullcpp Qhull::qhull_r) endif() if( @@ -165,21 +164,21 @@ if( "${PROJECT_SOURCE_DIR}/cmake/find-external/MPFR" ) - jrl_find_package(GMP REQUIRED) - jrl_find_package(MPFR REQUIRED) + jrl_find_package(GMP REQUIRED EXPECTED_TARGETS gmp) + jrl_find_package(MPFR REQUIRED EXPECTED_TARGETS mpfr) endif() if(PINOCCHIO_BUILD_WITH_TRACY) # assume it is installed somewhere - jrl_find_package(Tracy REQUIRED) + jrl_find_package(Tracy REQUIRED EXPECTED_TARGETS Tracy::TracyClient) set_target_properties( Tracy::TracyClient PROPERTIES POSITION_INDEPENDENT_CODE True ) -endif(PINOCCHIO_BUILD_WITH_TRACY) +endif() if(BUILD_WITH_OPENMP_SUPPORT) - jrl_find_package(OpenMP REQUIRED) + jrl_find_package(OpenMP REQUIRED EXPECTED_TARGETS OpenMP::OpenMP_CXX) endif() if(BUILD_PYTHON_INTERFACE) @@ -222,7 +221,7 @@ macro(add_header_and_template_instantiation_targets name) PROPERTIES DEFINE_SYMBOL "pinocchio_EXPORTS" ) jrl_target_set_default_compile_options(${name}_template_instantiation PRIVATE) - jrl_target_enforce_msvc_conformance(${name}_template_instantiation PRIVATE) + jrl_target_enforce_msvc_conformance(${name}_template_instantiation PUBLIC) target_link_libraries(${name} INTERFACE ${name}_template_instantiation) list(APPEND EXPORTED_TARGETS ${name}_template_instantiation) @@ -767,7 +766,7 @@ if(BUILD_WITH_COLLISION_SUPPORT) ) jrl_target_set_default_compile_options(pinocchio_collision PRIVATE) - jrl_target_enforce_msvc_conformance(pinocchio_collision PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_collision PUBLIC) jrl_target_generate_config_header(pinocchio_collision INTERFACE FILENAME pinocchio/collision/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_collision) target_link_libraries(pinocchio INTERFACE pinocchio_collision) @@ -934,7 +933,7 @@ if(BUILD_WITH_PARSERS_SUPPORT) endif() jrl_target_set_default_compile_options(pinocchio_parsers PRIVATE) - jrl_target_enforce_msvc_conformance(pinocchio_parsers PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_parsers PUBLIC) jrl_target_generate_config_header(pinocchio_parsers INTERFACE FILENAME pinocchio/parsers/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_parsers) target_link_libraries(pinocchio INTERFACE pinocchio_parsers) @@ -963,13 +962,7 @@ if(BUILD_WITH_AUTODIFF_SUPPORT) target_link_libraries( pinocchio_cppad_headers - INTERFACE pinocchio_default_headers ${cppad_LIBRARY} - ) - - target_include_directories( - pinocchio_cppad_headers - SYSTEM - INTERFACE $ + INTERFACE pinocchio_default_headers cppad::cppad ) target_compile_definitions( @@ -1012,19 +1005,7 @@ if(BUILD_WITH_CODEGEN_SUPPORT) target_link_libraries( pinocchio_cppadcg_headers INTERFACE - pinocchio_default_headers - ${cppadcg_LIBRARY} - ${cppad_LIBRARY} - ${CMAKE_DL_LIBS} - ) - - target_include_directories( - pinocchio_cppadcg_headers - SYSTEM - INTERFACE - $ - $ - ) + pinocchio_default_headers cppadcg::cppadcg) target_compile_definitions( pinocchio_cppadcg_headers @@ -1113,7 +1094,7 @@ if(BUILD_WITH_EXTRA_SUPPORT) ) jrl_target_set_default_compile_options(pinocchio_extra PRIVATE) - jrl_target_enforce_msvc_conformance(pinocchio_extra PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_extra PUBLIC) jrl_target_generate_config_header(pinocchio_extra INTERFACE FILENAME pinocchio/extra/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_extra) target_link_libraries(pinocchio INTERFACE pinocchio_extra) @@ -1143,7 +1124,7 @@ if(PINOCCHIO_BUILD_VISUALIZERS) target_link_libraries(pinocchio_visualizers PUBLIC pinocchio_default) jrl_target_set_default_compile_options(pinocchio_visualizers PRIVATE) - jrl_target_enforce_msvc_conformance(pinocchio_visualizers PRIVATE) + jrl_target_enforce_msvc_conformance(pinocchio_visualizers PUBLIC) jrl_target_generate_config_header(pinocchio_visualizers INTERFACE FILENAME pinocchio/visualizers/config.hpp VERSION ${PROJECT_VERSION} LIBRARY_NAME pinocchio_visualizers) target_link_libraries(pinocchio INTERFACE pinocchio_visualizers) @@ -1187,34 +1168,26 @@ if(BUILD_WITH_OPENMP_SUPPORT) INTERFACE pinocchio_default OpenMP::OpenMP_CXX ) - jrl_target_set_default_compile_options(pinocchio_parallel INTERFACE) - jrl_target_enforce_msvc_conformance(pinocchio_parallel INTERFACE) - target_link_libraries(pinocchio INTERFACE pinocchio_parallel) list(APPEND EXPORTED_TARGETS pinocchio_parallel) if(BUILD_WITH_COLLISION_SUPPORT) add_library(pinocchio_collision_parallel INTERFACE) - jrl_target_headers(pinocchio_parallel PUBLIC + jrl_target_headers(pinocchio_collision_parallel PUBLIC HEADERS include/pinocchio/collision/parallel/broadphase.hpp include/pinocchio/collision/parallel/geometry.hpp BASE_DIRS include ) - jrl_target_headers(pinocchio_parallel PUBLIC + jrl_target_headers(pinocchio_collision_parallel PUBLIC HEADERS include/pinocchio/src/collision/parallel/broadphase.hxx include/pinocchio/src/collision/parallel/geometry.hxx BASE_DIRS include ) - target_compile_definitions( - pinocchio_collision_parallel - INTERFACE PINOCCHIO_WITH_COLLISION - ) - target_link_libraries( pinocchio_collision_parallel INTERFACE pinocchio_collision OpenMP::OpenMP_CXX diff --git a/unittest/cpp/CMakeLists.txt b/unittest/cpp/CMakeLists.txt index ba0df7e62f..e5cc71f9f9 100644 --- a/unittest/cpp/CMakeLists.txt +++ b/unittest/cpp/CMakeLists.txt @@ -203,7 +203,7 @@ if(BUILD_ADVANCED_TESTING) add_pinocchio_unit_test(multiprecision-mpfr) target_link_libraries( pinocchio-test-cpp-multiprecision-mpfr - PRIVATE mpfr gmp + PRIVATE mpfr::mpfr ) endif() endif() diff --git a/unittest/cpp/algorithm-utils-force.cpp b/unittest/cpp/algorithm-utils-force.cpp index 541ee9e161..348f6f8042 100644 --- a/unittest/cpp/algorithm-utils-force.cpp +++ b/unittest/cpp/algorithm-utils-force.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2020 INRIA // -#define BOOST_TEST_MODULE force +#define BOOST_TEST_MODULE algorithm_utils_force #include #include diff --git a/unittest/cpp/algorithm-utils-motion.cpp b/unittest/cpp/algorithm-utils-motion.cpp index 28954f9746..e986df8ccf 100644 --- a/unittest/cpp/algorithm-utils-motion.cpp +++ b/unittest/cpp/algorithm-utils-motion.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2020 INRIA // -#define BOOST_TEST_MODULE motion +#define BOOST_TEST_MODULE algorithm_utils_motion #include diff --git a/unittest/cpp/casadi-aba-derivatives.cpp b/unittest/cpp/casadi-aba-derivatives.cpp index d3f324c3bd..8231756bc8 100644 --- a/unittest/cpp/casadi-aba-derivatives.cpp +++ b/unittest/cpp/casadi-aba-derivatives.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2019-2020 INRIA // -#define BOOST_TEST_MODULE aba_derivatives +#define BOOST_TEST_MODULE casadi_aba_derivatives #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/autodiff/casadi-algo.hpp" diff --git a/unittest/cpp/casadi-aba.cpp b/unittest/cpp/casadi-aba.cpp index aa940270a4..1904943d58 100644 --- a/unittest/cpp/casadi-aba.cpp +++ b/unittest/cpp/casadi-aba.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2019-2020 INRIA // -#define BOOST_TEST_MODULE aba +#define BOOST_TEST_MODULE casadi_aba #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/autodiff/casadi-algo.hpp" diff --git a/unittest/cpp/casadi-algorithms.cpp b/unittest/cpp/casadi-algorithms.cpp index 5a191f62f5..4b71630ae7 100644 --- a/unittest/cpp/casadi-algorithms.cpp +++ b/unittest/cpp/casadi-algorithms.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2019-2021 INRIA // -#define BOOST_TEST_MODULE algorithms +#define BOOST_TEST_MODULE casadi_algorithms #include "pinocchio/autodiff/casadi.hpp" diff --git a/unittest/cpp/casadi-basic.cpp b/unittest/cpp/casadi-basic.cpp index 068fc57c49..880145505d 100644 --- a/unittest/cpp/casadi-basic.cpp +++ b/unittest/cpp/casadi-basic.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2019-2020 INRIA // -#define BOOST_TEST_MODULE basic +#define BOOST_TEST_MODULE casadi_basic #include #include diff --git a/unittest/cpp/casadi-constraint-dynamics-derivatives.cpp b/unittest/cpp/casadi-constraint-dynamics-derivatives.cpp index b88cfa674b..d800da4cf9 100644 --- a/unittest/cpp/casadi-constraint-dynamics-derivatives.cpp +++ b/unittest/cpp/casadi-constraint-dynamics-derivatives.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2019-2020 INRIA // -#define BOOST_TEST_MODULE constraint_dynamics_derivatives +#define BOOST_TEST_MODULE casadi_constraint_dynamics_derivatives #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/autodiff/casadi-algo.hpp" diff --git a/unittest/cpp/casadi-constraint-dynamics.cpp b/unittest/cpp/casadi-constraint-dynamics.cpp index df00d26f83..d3df6c913f 100644 --- a/unittest/cpp/casadi-constraint-dynamics.cpp +++ b/unittest/cpp/casadi-constraint-dynamics.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2019-2020 INRIA // -#define BOOST_TEST_MODULE constraint_dynamics +#define BOOST_TEST_MODULE casadi_constraint_dynamics #include "pinocchio/autodiff/casadi.hpp" #include "pinocchio/autodiff/casadi-algo.hpp" diff --git a/unittest/cpp/casadi-explog.cpp b/unittest/cpp/casadi-explog.cpp index 796dd9ffaa..50f6268a4e 100644 --- a/unittest/cpp/casadi-explog.cpp +++ b/unittest/cpp/casadi-explog.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2021 INRIA // -#define BOOST_TEST_MODULE explog +#define BOOST_TEST_MODULE casadi_explog #include "pinocchio/autodiff/casadi.hpp" diff --git a/unittest/cpp/casadi-integrate-derivatives.cpp b/unittest/cpp/casadi-integrate-derivatives.cpp index 29710b67a4..2b3ed312b1 100644 --- a/unittest/cpp/casadi-integrate-derivatives.cpp +++ b/unittest/cpp/casadi-integrate-derivatives.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2019-2020 INRIA // -#define BOOST_TEST_MODULE integrate_derivatives +#define BOOST_TEST_MODULE casadi_integrate_derivatives #include "pinocchio/autodiff/casadi.hpp" diff --git a/unittest/cpp/casadi-joints.cpp b/unittest/cpp/casadi-joints.cpp index 4d90d19715..1ef18a4429 100644 --- a/unittest/cpp/casadi-joints.cpp +++ b/unittest/cpp/casadi-joints.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2019-2020 INRIA // -#define BOOST_TEST_MODULE joints +#define BOOST_TEST_MODULE casadi_joints #include "pinocchio/autodiff/casadi.hpp" diff --git a/unittest/cpp/casadi-rnea-derivatives.cpp b/unittest/cpp/casadi-rnea-derivatives.cpp index 9dd53eedcb..bd69349242 100644 --- a/unittest/cpp/casadi-rnea-derivatives.cpp +++ b/unittest/cpp/casadi-rnea-derivatives.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2019-2020 INRIA // -#define BOOST_TEST_MODULE rnea_derivatives +#define BOOST_TEST_MODULE casadi_rnea_derivatives #include "pinocchio/autodiff/casadi.hpp" diff --git a/unittest/cpp/casadi-spatial.cpp b/unittest/cpp/casadi-spatial.cpp index 5dd39f95b3..1f23514317 100644 --- a/unittest/cpp/casadi-spatial.cpp +++ b/unittest/cpp/casadi-spatial.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2019 INRIA // -#define BOOST_TEST_MODULE spatial +#define BOOST_TEST_MODULE casadi_spatial #include diff --git a/unittest/cpp/constrained-dynamics-derivatives.cpp b/unittest/cpp/constrained-dynamics-derivatives.cpp index fc0c4a744e..5ce9a3cfae 100644 --- a/unittest/cpp/constrained-dynamics-derivatives.cpp +++ b/unittest/cpp/constrained-dynamics-derivatives.cpp @@ -1,4 +1,5 @@ // + // Copyright (c) 2019 INRIA // diff --git a/unittest/cpp/cppad-algorithms.cpp b/unittest/cpp/cppad-algorithms.cpp index 06a904ce41..0cc814b0b5 100644 --- a/unittest/cpp/cppad-algorithms.cpp +++ b/unittest/cpp/cppad-algorithms.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2018-2022 CNRS INRIA // -#define BOOST_TEST_MODULE algorithms +#define BOOST_TEST_MODULE cppad_algorithms #include "pinocchio/autodiff/cppad.hpp" diff --git a/unittest/cpp/cppad-basic.cpp b/unittest/cpp/cppad-basic.cpp index 27a12c1092..42f516ed02 100644 --- a/unittest/cpp/cppad-basic.cpp +++ b/unittest/cpp/cppad-basic.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2018-2019 CNRS INRIA // -#define BOOST_TEST_MODULE basic +#define BOOST_TEST_MODULE cppad_basic #include "pinocchio/autodiff/cppad.hpp" #include diff --git a/unittest/cpp/cppad-derivatives.cpp b/unittest/cpp/cppad-derivatives.cpp index f3108ae507..df0706a76b 100644 --- a/unittest/cpp/cppad-derivatives.cpp +++ b/unittest/cpp/cppad-derivatives.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2018-2019 CNRS INRIA // -#define BOOST_TEST_MODULE derivatives +#define BOOST_TEST_MODULE cppad_derivatives #include "pinocchio/autodiff/cppad.hpp" diff --git a/unittest/cpp/cppad-joint-configurations.cpp b/unittest/cpp/cppad-joint-configurations.cpp index 49c2ba1dfd..20b34ea701 100644 --- a/unittest/cpp/cppad-joint-configurations.cpp +++ b/unittest/cpp/cppad-joint-configurations.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2020 CNRS INRIA // -#define BOOST_TEST_MODULE joint_configurations +#define BOOST_TEST_MODULE cppad_joint_configurations #include "pinocchio/autodiff/cppad.hpp" diff --git a/unittest/cpp/cppad-joints.cpp b/unittest/cpp/cppad-joints.cpp index a28ecc67bb..7e04d281d9 100644 --- a/unittest/cpp/cppad-joints.cpp +++ b/unittest/cpp/cppad-joints.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2018-2019 CNRS INRIA // -#define BOOST_TEST_MODULE joints +#define BOOST_TEST_MODULE cppad_joints #include "pinocchio/autodiff/cppad.hpp" diff --git a/unittest/cpp/cppad-spatial.cpp b/unittest/cpp/cppad-spatial.cpp index a18c9221fd..6be3a7d846 100644 --- a/unittest/cpp/cppad-spatial.cpp +++ b/unittest/cpp/cppad-spatial.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2018-2019 CNRS INRIA // -#define BOOST_TEST_MODULE spatial +#define BOOST_TEST_MODULE cppad_spatial #include "pinocchio/autodiff/cppad.hpp" diff --git a/unittest/cpp/cppadcg-algorithms.cpp b/unittest/cpp/cppadcg-algorithms.cpp index f1ae61fcc1..e483e75fb6 100644 --- a/unittest/cpp/cppadcg-algorithms.cpp +++ b/unittest/cpp/cppadcg-algorithms.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2018-2019 CNRS INRIA // -#define BOOST_TEST_MODULE algorithms +#define BOOST_TEST_MODULE cppadcg_algorithms #include "pinocchio/codegen/cppadcg.hpp" diff --git a/unittest/cpp/cppadcg-basic.cpp b/unittest/cpp/cppadcg-basic.cpp index 6be7457c02..43cd2eb033 100644 --- a/unittest/cpp/cppadcg-basic.cpp +++ b/unittest/cpp/cppadcg-basic.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2018-2019 CNRS INRIA // -#define BOOST_TEST_MODULE basic +#define BOOST_TEST_MODULE cppadcg_basic #include "pinocchio/codegen/cppadcg.hpp" diff --git a/unittest/cpp/cppadcg-contact-dynamics.cpp b/unittest/cpp/cppadcg-contact-dynamics.cpp index 848610a765..7f4b98fee8 100644 --- a/unittest/cpp/cppadcg-contact-dynamics.cpp +++ b/unittest/cpp/cppadcg-contact-dynamics.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2021 INRIA // -#define BOOST_TEST_MODULE contact_dynamics +#define BOOST_TEST_MODULE cppadcg_contact_dynamics #include "pinocchio/codegen/cppadcg.hpp" #include "pinocchio/codegen/cppadcg-algo.hpp" diff --git a/unittest/cpp/cppadcg-joint-configurations.cpp b/unittest/cpp/cppadcg-joint-configurations.cpp index ecaada18a0..d5a7bf82d4 100644 --- a/unittest/cpp/cppadcg-joint-configurations.cpp +++ b/unittest/cpp/cppadcg-joint-configurations.cpp @@ -2,7 +2,7 @@ // Copyright (c) 2020 CNRS INRIA // -#define BOOST_TEST_MODULE joint_configurations +#define BOOST_TEST_MODULE cppadcg_joint_configurations #include "pinocchio/codegen/cppadcg.hpp" #include "pinocchio/codegen/cppadcg-algo.hpp" From 3b1e06c782a0883b79c368b60d5341199acc8460 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Mon, 10 Aug 2026 15:09:43 +0200 Subject: [PATCH 26/32] cmake: apply review (use pinocchio_python_add_test) --- CMakeLists.txt | 48 +++---- unittest/python/CMakeLists.txt | 127 ++++++++---------- ...gs_explog.py => bindings_casadi_explog.py} | 0 ...n_algo.py => bindings_casadi_main_algo.py} | 0 unittest/python/casadi/CMakeLists.txt | 9 -- 5 files changed, 83 insertions(+), 101 deletions(-) rename unittest/python/{casadi/bindings_explog.py => bindings_casadi_explog.py} (100%) rename unittest/python/{casadi/bindings_main_algo.py => bindings_casadi_main_algo.py} (100%) delete mode 100644 unittest/python/casadi/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 953518dcb3..d3ff47dcde 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,6 +99,31 @@ if(BUILD_WITH_URDF_SUPPORT) jrl_find_package(console_bridge CONFIG REQUIRED EXPECTED_TARGETS console_bridge::console_bridge) endif() +if(BUILD_WITH_SDF_SUPPORT) +# the following lines allows to link to SDFormat, indeed SDFormat has its version number in its target until version ==16 + set(SDF_VERSIONS "15" "13" "12") + list(APPEND SDF_VERSIONS "") + foreach(version IN LISTS SDF_VERSIONS) + find_package(SDFormat${version} QUIET) + if(SDFormat${version}_FOUND) + set(SDFormat_FOUND True) + jrl_find_package(SDFormat${version} CONFIG) + message(STATUS "SDFormat${version} Found") + add_library( + pinocchio_sdformat + ALIAS sdformat${version}::sdformat${version} + ) + break() + endif() + endforeach(version) + if(NOT SDFormat_FOUND) + message( + FATAL_ERROR + "SDFormat not found. Accepted versions: ${SDF_VERSIONS}" + ) + endif() +endif() + if(BUILD_WITH_CODEGEN_SUPPORT) list( APPEND CMAKE_MODULE_PATH @@ -892,29 +917,6 @@ if(BUILD_WITH_PARSERS_SUPPORT) BASE_DIRS include ) - # the following lines allows to link to SDFormat, indeed SDFormat has its version number in its target until version ==16 - set(SDF_VERSIONS "15" "13" "12") - list(APPEND SDF_VERSIONS "") - foreach(version IN LISTS SDF_VERSIONS) - find_package(SDFormat${version} QUIET) - if(SDFormat${version}_FOUND) - set(SDFormat_FOUND True) - jrl_find_package(SDFormat${version} CONFIG) - message(STATUS "SDFormat${version} Found") - add_library( - pinocchio_sdformat - ALIAS sdformat${version}::sdformat${version} - ) - break() - endif() - endforeach(version) - if(NOT SDFormat_FOUND) - message( - FATAL_ERROR - "SDFormat not found. Accepted versions: ${SDF_VERSIONS}" - ) - endif() - target_link_libraries(pinocchio_parsers PUBLIC pinocchio_sdformat) target_compile_definitions( diff --git a/unittest/python/CMakeLists.txt b/unittest/python/CMakeLists.txt index 12a0e821cf..f3f0fa69af 100644 --- a/unittest/python/CMakeLists.txt +++ b/unittest/python/CMakeLists.txt @@ -2,56 +2,6 @@ # Copyright (c) 2015-2025 CNRS INRIA # -set(${PROJECT_NAME}_PYTHON_TESTS - bindings - # Multibody - bindings_joint_composite - bindings_joints - bindings_model - bindings_data - bindings_geometry_model - bindings_liegroups - # Spatial - bindings_force - bindings_frame - bindings_inertia - bindings_spatial - bindings_motion - bindings_SE3 - explog - rpy - # Algo - bindings_com - bindings_kinematic_regressor - bindings_regressor - bindings_dynamics - bindings_kinematics - bindings_rnea - bindings_aba - bindings_joint_algorithms - # Solvers - bindings_pgs - bindings_admm - # Algo derivatives - bindings_kinematics_derivatives - bindings_frame_derivatives - bindings_forward_dynamics_derivatives - bindings_inverse_dynamics_derivatives - bindings_centroidal_dynamics_derivatives - bindings_com_velocity_derivatives - # Parsers - bindings_sample_models - bindings_mjcf - bindings_model_graph - # Others - robot_wrapper - utils - serialization - version - bindings_std_vector - bindings_std_map -) - function(pinocchio_python_add_test name) set(test_name "${PROJECT_NAME}-test-py-${name}") add_test( @@ -90,34 +40,73 @@ function(pinocchio_python_add_test name) ) endfunction() +pinocchio_python_add_test(bindings) +# Multibody +pinocchio_python_add_test(bindings_joint_composite) +pinocchio_python_add_test(bindings_joints) +pinocchio_python_add_test(bindings_model) +pinocchio_python_add_test(bindings_data) +pinocchio_python_add_test(bindings_geometry_model) +pinocchio_python_add_test(bindings_liegroups) +# Spatial +pinocchio_python_add_test(bindings_force) +pinocchio_python_add_test(bindings_frame) +pinocchio_python_add_test(bindings_inertia) +pinocchio_python_add_test(bindings_spatial) +pinocchio_python_add_test(bindings_motion) +pinocchio_python_add_test(bindings_SE3) +pinocchio_python_add_test(explog) +pinocchio_python_add_test(rpy) +# Algo +pinocchio_python_add_test(bindings_com) +pinocchio_python_add_test(bindings_kinematic_regressor) +pinocchio_python_add_test(bindings_regressor) +pinocchio_python_add_test(bindings_dynamics) +pinocchio_python_add_test(bindings_kinematics) +pinocchio_python_add_test(bindings_rnea) +pinocchio_python_add_test(bindings_aba) +pinocchio_python_add_test(bindings_joint_algorithms) +# Solvers +pinocchio_python_add_test(bindings_pgs) +pinocchio_python_add_test(bindings_admm) +# Algo derivatives +pinocchio_python_add_test(bindings_kinematics_derivatives) +pinocchio_python_add_test(bindings_frame_derivatives) +pinocchio_python_add_test(bindings_forward_dynamics_derivatives) +pinocchio_python_add_test(bindings_inverse_dynamics_derivatives) +pinocchio_python_add_test(bindings_centroidal_dynamics_derivatives) +pinocchio_python_add_test(bindings_com_velocity_derivatives) +# Parsers +pinocchio_python_add_test(bindings_sample_models) +pinocchio_python_add_test(bindings_mjcf) +pinocchio_python_add_test(bindings_model_graph) +# Others +pinocchio_python_add_test(robot_wrapper) +pinocchio_python_add_test(utils) +pinocchio_python_add_test(serialization) +pinocchio_python_add_test(version) +pinocchio_python_add_test(bindings_std_vector) +pinocchio_python_add_test(bindings_std_map) + if(BUILD_WITH_COLLISION_SUPPORT) - list( - APPEND PINOCCHIO_PYTHON_TESTS - bindings_geometry_object - bindings_coal_transform - bindings_constraints - bindings_lcaba - ) + pinocchio_python_add_test(bindings_geometry_object) + pinocchio_python_add_test(bindings_coal_transform) + pinocchio_python_add_test(bindings_constraints) + pinocchio_python_add_test(bindings_lcaba) endif() if(urdfdom_FOUND) - list( - APPEND PINOCCHIO_PYTHON_TESTS - bindings_urdf - bindings_geometry_model_urdf - bindings_contact_inverse_dynamics - bindings_viser_visualizer - ) + pinocchio_python_add_test(bindings_urdf) + pinocchio_python_add_test(bindings_geometry_model_urdf) + pinocchio_python_add_test(bindings_contact_inverse_dynamics) + pinocchio_python_add_test(bindings_viser_visualizer) endif(urdfdom_FOUND) -foreach(TEST ${${PROJECT_NAME}_PYTHON_TESTS}) - pinocchio_python_add_test(${TEST}) -endforeach() - file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/serialization-data") # handle casadi if(BUILD_WITH_CASADI_SUPPORT) + pinocchio_python_add_test(bindings_casadi_main_algo) add_subdirectory(casadi) endif() @@ -128,7 +117,7 @@ endif() # - add_python_memorycheck_unit_test_v2 # - add_windows_dll_path_to_test if(MEMORYCHECK_COMMAND AND MEMORYCHECK_COMMAND MATCHES ".*valgrind$") - set(${PROJECT_NAME}_PYTHON_MEMORYCHECK_TESTS + set(pinocchio_PYTHON_MEMORYCHECK_TESTS bindings_build_geom_from_urdf_memorycheck ) diff --git a/unittest/python/casadi/bindings_explog.py b/unittest/python/bindings_casadi_explog.py similarity index 100% rename from unittest/python/casadi/bindings_explog.py rename to unittest/python/bindings_casadi_explog.py diff --git a/unittest/python/casadi/bindings_main_algo.py b/unittest/python/bindings_casadi_main_algo.py similarity index 100% rename from unittest/python/casadi/bindings_main_algo.py rename to unittest/python/bindings_casadi_main_algo.py diff --git a/unittest/python/casadi/CMakeLists.txt b/unittest/python/casadi/CMakeLists.txt deleted file mode 100644 index 4f2aa4be27..0000000000 --- a/unittest/python/casadi/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -# -# Copyright (c) 2020-2021 INRIA -# - -set(${PROJECT_NAME}_PYTHON_CASADI_TESTS bindings_main_algo) - -foreach(test ${${PROJECT_NAME}_PYTHON_CASADI_TESTS}) - pinocchio_python_add_test(${test}) -endforeach() From c247868b03c6c9e65467bf4d98578c79daeb0385 Mon Sep 17 00:00:00 2001 From: Joris Vaillant Date: Thu, 30 Jul 2026 16:59:13 +0200 Subject: [PATCH 27/32] cmake: Refactor gmp finder --- cmake/find-external/GMP/FindGMP.cmake | 55 ++++++++++++++------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/cmake/find-external/GMP/FindGMP.cmake b/cmake/find-external/GMP/FindGMP.cmake index 3439e9b719..d5a9f511c7 100644 --- a/cmake/find-external/GMP/FindGMP.cmake +++ b/cmake/find-external/GMP/FindGMP.cmake @@ -1,37 +1,38 @@ -# Try to find the GNU Multiple Precision Arithmetic Library (GMP) See -# http://gmplib.org/ +# Copyright 2026 Inria -if(GMP_INCLUDES AND GMP_LIBRARIES) - set(GMP_FIND_QUIETLY TRUE) -endif(GMP_INCLUDES AND GMP_LIBRARIES) +find_path(GMP_INCLUDE_DIR NAMES gmp.h) +find_library(GMP_LIBRARY NAMES gmp) -find_path(GMP_INCLUDES NAMES gmp.h PATHS $ENV{GMPDIR} ${INCLUDE_INSTALL_DIR}) +mark_as_advanced(GMP_LIBRARY GMP_INCLUDE_DIR) -find_library(GMP_LIBRARIES NAMES gmp PATHS $ENV{GMPDIR} ${LIB_INSTALL_DIR}) +if(GMP_INCLUDE_DIR AND NOT TARGET GMP::GMP) + # Version is stored on the following line: + # `#define __GNU_MP_VERSION 6` + # `#define __GNU_MP_VERSION_MINOR 3` + # `#define __GNU_MP_VERSION_PATCHLEVEL 0` + file(READ ${GMP_INCLUDE_DIR}/gmp.h gmp_h) + string(REGEX MATCH "#define[ \t]__GNU_MP_VERSION[ \t]+([0-9]+)" _match_major ${gmp_h}) + set(GMP_VERSION_MAJOR ${CMAKE_MATCH_1}) + string(REGEX MATCH "#define[ \t]__GNU_MP_VERSION_MINOR[ \t]+([0-9]+)" _match_major ${gmp_h}) + set(GMP_VERSION_MINOR ${CMAKE_MATCH_1}) + string(REGEX MATCH "#define[ \t]__GNU_MP_VERSION_PATCHLEVEL[ \t]+([0-9]+)" _match_major ${gmp_h}) + set(GMP_VERSION_MICRO ${CMAKE_MATCH_1}) + set(GMP_VERSION ${GMP_VERSION_MAJOR}.${GMP_VERSION_MINOR}.${GMP_VERSION_MICRO}) +endif() include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(GMP DEFAULT_MSG GMP_INCLUDES GMP_LIBRARIES) +find_package_handle_standard_args( + GMP + REQUIRED_VARS GMP_LIBRARY GMP_INCLUDE_DIR + VERSION_VAR GMP_VERSION) -# Set gmp target -if(GMP_FOUND) - add_library(gmp SHARED IMPORTED) +if(GMP_FOUND AND NOT TARGET GMP::GMP) + add_library(GMP::GMP UNKNOWN IMPORTED) set_target_properties( - gmp + GMP::GMP PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIR}" - IMPORTED_CONFIGURATIONS "RELEASE" + IMPORTED_LOCATION ${GMP_LIBRARY} + VERSION ${GMP_VERSION} + INCLUDE_DIRECTORIES ${GMP_INCLUDE_DIR} ) - if(WIN32) - set_target_properties( - gmp - PROPERTIES IMPORTED_IMPLIB_RELEASE "${GMP_LIBRARIES}" - ) - else() - set_target_properties( - gmp - PROPERTIES IMPORTED_LOCATION_RELEASE "${GMP_LIBRARIES}" - ) - endif() endif() - -mark_as_advanced(GMP_INCLUDES GMP_LIBRARIES) From 079b23953478bdd1c9f789dc96cd007735ff95fb Mon Sep 17 00:00:00 2001 From: Joris Vaillant Date: Thu, 30 Jul 2026 17:07:03 +0200 Subject: [PATCH 28/32] cmake: Refactor MPFR finder --- cmake/find-external/MPFR/FindMPFR.cmake | 107 +++++------------------- 1 file changed, 22 insertions(+), 85 deletions(-) diff --git a/cmake/find-external/MPFR/FindMPFR.cmake b/cmake/find-external/MPFR/FindMPFR.cmake index 0de8dfdfc3..e13201baa1 100644 --- a/cmake/find-external/MPFR/FindMPFR.cmake +++ b/cmake/find-external/MPFR/FindMPFR.cmake @@ -1,117 +1,54 @@ -# Try to find the MPFR library See http://www.mpfr.org/ -# -# This module supports requiring a minimum version, e.g. you can do -# find_package(MPFR 2.3.0) to require version 2.3.0 to newer of MPFR. -# -# Once done this will define -# -# MPFR_FOUND - system has MPFR lib with correct version MPFR_INCLUDES - the MPFR -# include directory MPFR_LIBRARIES - the MPFR library MPFR_VERSION - MPFR -# version +# Copyright 2026 Inria -# Copyright (c) 2006, 2007 Montel Laurent, Copyright (c) 2008, -# 2009 Gael Guennebaud, Copyright (c) 2010 Jitse Niesen, -# Copyright (c) 2022 Justin Carpentier Redistribution -# and use is allowed according to the terms of the BSD license. +find_path(MPFR_INCLUDE NAMES mpfr.h) +find_library(MPFR_LIBRARY mpfr) -# Set MPFR_INCLUDES +mark_as_advanced(MPFR_LIBRARY MPFR_INCLUDE) -find_path(MPFR_INCLUDES NAMES mpfr.h PATHS $ENV{GMPDIR} ${INCLUDE_INSTALL_DIR}) - -# Set MPFR_FIND_VERSION to 1.0.0 if no minimum version is specified - -if(NOT MPFR_FIND_VERSION) - if(NOT MPFR_FIND_VERSION_MAJOR) - set(MPFR_FIND_VERSION_MAJOR 1) - endif(NOT MPFR_FIND_VERSION_MAJOR) - if(NOT MPFR_FIND_VERSION_MINOR) - set(MPFR_FIND_VERSION_MINOR 0) - endif(NOT MPFR_FIND_VERSION_MINOR) - if(NOT MPFR_FIND_VERSION_PATCH) - set(MPFR_FIND_VERSION_PATCH 0) - endif(NOT MPFR_FIND_VERSION_PATCH) - - set(MPFR_FIND_VERSION - "${MPFR_FIND_VERSION_MAJOR}.${MPFR_FIND_VERSION_MINOR}.${MPFR_FIND_VERSION_PATCH}" - ) -endif(NOT MPFR_FIND_VERSION) - -if(MPFR_INCLUDES) - # Set MPFR_VERSION - - file(READ "${MPFR_INCLUDES}/mpfr.h" _mpfr_version_header) +if(MPFR_INCLUDE AND NOT TARGET MPFR::MPFR) + file(READ "${MPFR_INCLUDE}/mpfr.h" mpfr_h) string( REGEX MATCH "define[ \t]+MPFR_VERSION_MAJOR[ \t]+([0-9]+)" _mpfr_major_version_match - "${_mpfr_version_header}" + "${mpfr_h}" ) set(MPFR_MAJOR_VERSION "${CMAKE_MATCH_1}") string( REGEX MATCH "define[ \t]+MPFR_VERSION_MINOR[ \t]+([0-9]+)" _mpfr_minor_version_match - "${_mpfr_version_header}" + "${mpfr_h}" ) set(MPFR_MINOR_VERSION "${CMAKE_MATCH_1}") string( REGEX MATCH "define[ \t]+MPFR_VERSION_PATCHLEVEL[ \t]+([0-9]+)" _mpfr_patchlevel_version_match - "${_mpfr_version_header}" + "${mpfr_h}" ) set(MPFR_PATCHLEVEL_VERSION "${CMAKE_MATCH_1}") set(MPFR_VERSION ${MPFR_MAJOR_VERSION}.${MPFR_MINOR_VERSION}.${MPFR_PATCHLEVEL_VERSION} ) - - # Check whether found version exceeds minimum version - - if(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION}) - set(MPFR_VERSION_OK FALSE) - message( - STATUS - "MPFR version ${MPFR_VERSION} found in ${MPFR_INCLUDES}, " - "but at least version ${MPFR_FIND_VERSION} is required" - ) - else(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION}) - set(MPFR_VERSION_OK TRUE) - endif(${MPFR_VERSION} VERSION_LESS ${MPFR_FIND_VERSION}) -endif(MPFR_INCLUDES) - -# Set MPFR_LIBRARIES - -find_library(MPFR_LIBRARIES mpfr PATHS $ENV{GMPDIR} ${LIB_INSTALL_DIR}) +endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args( MPFR - DEFAULT_MSG - MPFR_INCLUDES - MPFR_LIBRARIES - MPFR_VERSION_OK -) + REQUIRED_VARS MPFR_LIBRARY MPFR_INCLUDE + VERSION_VAR MPFR_VERSION) + +# mpfr depend of gmp +find_package(GMP REQUIRED) -# Set mpfr target -if(MPFR_FOUND) - add_library(mpfr SHARED IMPORTED) +if(MPFR_FOUND AND NOT TARGET MPFR::MPFR) + add_library(MPFR::MPFR UNKNOWN IMPORTED) set_target_properties( - mpfr + MPFR::MPFR PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${MPFR_INCLUDE_DIR}" - IMPORTED_CONFIGURATIONS "RELEASE" + IMPORTED_LOCATION ${MPFR_LIBRARY} + VERSION ${MPFR_VERSION} + INCLUDE_DIRECTORIES ${MPFR_INCLUDE} + INTERFACE_LINK_LIBRARIES GMP::GMP ) - if(WIN32) - set_target_properties( - mpfr - PROPERTIES IMPORTED_IMPLIB_RELEASE "${MPFR_LIBRARIES}" - ) - else() - set_target_properties( - mpfr - PROPERTIES IMPORTED_LOCATION_RELEASE "${MPFR_LIBRARIES}" - ) - endif() endif() - -# Epilogue -mark_as_advanced(MPFR_INCLUDES MPFR_LIBRARIES) From 347d5dc43d3d7aa73af1ae52b59a7f72671e036d Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Mon, 10 Aug 2026 15:53:55 +0200 Subject: [PATCH 29/32] cmake: use MPFR::MPFR target --- CMakeLists.txt | 4 +--- bindings/python/CMakeLists.txt | 2 +- unittest/cpp/CMakeLists.txt | 2 +- unittest/python/CMakeLists.txt | 3 ++- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d3ff47dcde..dc2a4b6d64 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -188,9 +188,7 @@ if( APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/find-external/MPFR" ) - - jrl_find_package(GMP REQUIRED EXPECTED_TARGETS gmp) - jrl_find_package(MPFR REQUIRED EXPECTED_TARGETS mpfr) + jrl_find_package(MPFR REQUIRED EXPECTED_TARGETS MPFR::MPFR) endif() if(PINOCCHIO_BUILD_WITH_TRACY) diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt index 36ff6f380e..2362b33a9e 100644 --- a/bindings/python/CMakeLists.txt +++ b/bindings/python/CMakeLists.txt @@ -379,7 +379,7 @@ if(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT) BASE_DIRS include ) pinocchio_add_python_binding(mpfr ${COMMON_SOURCES} ${PROJECT_SOURCE_DIR}/bindings/python/extra/mpfr/boost_number.cpp) - target_link_libraries(pinocchio_pywrap_mpfr PRIVATE gmp mpfr) + target_link_libraries(pinocchio_pywrap_mpfr PRIVATE MPFR) list(APPEND STUBGEN_DEPENDENCIES "pinocchio_pywrap_mpfr") endif() diff --git a/unittest/cpp/CMakeLists.txt b/unittest/cpp/CMakeLists.txt index e5cc71f9f9..6a2788c356 100644 --- a/unittest/cpp/CMakeLists.txt +++ b/unittest/cpp/CMakeLists.txt @@ -203,7 +203,7 @@ if(BUILD_ADVANCED_TESTING) add_pinocchio_unit_test(multiprecision-mpfr) target_link_libraries( pinocchio-test-cpp-multiprecision-mpfr - PRIVATE mpfr::mpfr + PRIVATE MPFR::MPFR ) endif() endif() diff --git a/unittest/python/CMakeLists.txt b/unittest/python/CMakeLists.txt index f3f0fa69af..560dca77f8 100644 --- a/unittest/python/CMakeLists.txt +++ b/unittest/python/CMakeLists.txt @@ -107,7 +107,8 @@ file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/serialization-data") # handle casadi if(BUILD_WITH_CASADI_SUPPORT) pinocchio_python_add_test(bindings_casadi_main_algo) - add_subdirectory(casadi) + pinocchio_python_add_test(bindings_casadi_explog) + add_dependencies(pinocchio-tests pinocchio_pywrap_casadi) endif() # TODO BUILD_ADVANCED_TESTING From 69927793602fda6c3a376a5010e8809b8ff753c4 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Mon, 10 Aug 2026 16:20:33 +0200 Subject: [PATCH 30/32] cmake: Port benchmarks --- CMakeLists.txt | 11 ++ benchmark/CMakeLists.txt | 244 ++++++++++++++------------------- bindings/python/CMakeLists.txt | 2 +- 3 files changed, 117 insertions(+), 140 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dc2a4b6d64..56fcbb6da1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -210,6 +210,10 @@ if(BUILD_PYTHON_INTERFACE) jrl_find_package(eigenpy CONFIG REQUIRED EXPECTED_TARGETS eigenpy::eigenpy) endif() +if(BUILD_BENCHMARK) + jrl_find_package(benchmark CONFIG REQUIRED) +endif() + # ---------------------------------------------------- # --- FUNCTIONS ------------------------------------- # ---------------------------------------------------- @@ -1394,6 +1398,13 @@ if(BUILD_PYTHON_INTERFACE) list(APPEND EXPORTED_TARGETS pinocchio_pywrap_headers) endif() +# ---------------------------------------------------- +# --- BENCHMARK -------------------------------------- +# ---------------------------------------------------- +if(BUILD_BENCHMARK) + add_subdirectory(benchmark) +endif() + # ---------------------------------------------------- # --- EXPORT ---------------------------------------- # ---------------------------------------------------- diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index bdef4abfb3..42da1457b8 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -6,154 +6,120 @@ # ---------------------------------------------------- # --- BENCHMARK -------------------------------------- # ---------------------------------------------------- -add_custom_target(${PROJECT_NAME}-benchmarks) - -add_project_private_dependency(benchmark REQUIRED) - -function(ADD_PINOCCHIO_BENCHMARK name) - set(options - PARSERS - COLLISION - PARALLEL - COLLISION_PARALLEL - CPPADCG - CPPAD - PARSERS_OPTIONAL - COLLISION_OPTIONAL - PARALLEL_OPTIONAL - COLLISION_PARALLEL_OPTIONAL - CPPADCG_OPTIONAL - CPPAD_OPTIONAL - ) - set(oneValueArgs) - set(multiValueArgs) - cmake_parse_arguments( - bench - "${options}" - "${oneValueArgs}" - "${multiValueArgs}" - ${ARGN} - ) - - set(bench_name "pinocchio-benchmark-${name}") - add_executable(${bench_name} ${name}.cpp) +add_library(pinocchio-benchmarks-resources INTERFACE) +target_compile_definitions( + pinocchio-benchmarks-resources + INTERFACE + PINOCCHIO_MODEL_DIR=\"${PINOCCHIO_MODEL_DIR}\" + EXAMPLE_ROBOT_DATA_MODEL_DIR=\"${EXAMPLE_ROBOT_DATA_MODEL_DIR}\" +) + +add_custom_target(pinocchio-benchmarks) + +function(pinocchio_add_benchmark benchmark_name) + set(target_name "pinocchio-benchmark-${benchmark_name}") + add_executable(${target_name} ${benchmark_name}.cpp) + + target_link_libraries(${target_name} + PRIVATE pinocchio benchmark::benchmark pinocchio-benchmarks-resources) + + jrl_target_set_default_compile_options(${target_name} PRIVATE) + jrl_target_enforce_msvc_conformance(${target_name} PRIVATE) + + add_dependencies(pinocchio-benchmarks ${target_name}) +endfunction() - target_compile_definitions( - ${bench_name} - PRIVATE - PINOCCHIO_MODEL_DIR="${PINOCCHIO_MODEL_DIR}" - "EXAMPLE_ROBOT_DATA_MODEL_DIR=\"${EXAMPLE_ROBOT_DATA_MODEL_DIR}\"" - ) - target_link_libraries(${bench_name} PRIVATE pinocchio_default) - target_link_libraries(${bench_name} PRIVATE benchmark::benchmark) + # modernize_target_link_libraries( + # ${bench_name} + # SCOPE PRIVATE + # TARGETS Boost::filesystem + # LIBRARIES ${Boost_FILESYSTEM_LIBRARY} + # INCLUDE_DIRS ${Boost_INCLUDE_DIRS} + # ) - modernize_target_link_libraries( - ${bench_name} - SCOPE PRIVATE - TARGETS Boost::filesystem - LIBRARIES ${Boost_FILESYSTEM_LIBRARY} - INCLUDE_DIRS ${Boost_INCLUDE_DIRS} - ) - set(cppad_special_define OFF) - if(bench_PARSERS OR (bench_PARSERS_OPTIONAL AND TARGET pinocchio_parsers)) - target_link_libraries(${bench_name} PRIVATE pinocchio_parsers) - endif() - if( - bench_COLLISION - OR (bench_COLLISION_OPTIONAL AND TARGET pinocchio_collision) - ) - target_link_libraries(${bench_name} PRIVATE pinocchio_collision) - endif() - if( - bench_PARALLEL - OR (bench_PARALLEL_OPTIONAL AND TARGET pinocchio_parallel) - ) - target_link_libraries(${bench_name} PRIVATE pinocchio_parallel) - endif() - if( - bench_COLLISION_PARALLEL - OR ( - bench_COLLISION_PARALLEL_OPTIONAL - AND TARGET pinocchio_collision_parallel - ) - ) - target_link_libraries( - ${bench_name} - PRIVATE pinocchio_collision_parallel +pinocchio_add_benchmark(spatial-operations) +# timings-eigen +pinocchio_add_benchmark(timings-eigen) +# timings-linalg +pinocchio_add_benchmark(timings-linalg-inverse) + +if (BUILD_WITH_PARSERS_SUPPORT) + macro(add_parsers_benchmark benchmark_name) + pinocchio_add_benchmark(${benchmark_name}) + target_link_libraries(pinocchio-benchmark-${benchmark_name} + PRIVATE pinocchio_parsers) + endmacro() + # timings + add_parsers_benchmark(timings) + # timings cholesky + add_parsers_benchmark(timings-cholesky) + add_parsers_benchmark(timings-loop-constrained-aba) + # timings derivatives + add_parsers_benchmark(timings-derivatives) + # timings-jacobian + add_parsers_benchmark(timings-jacobian) + # timings-contact-dynamics + add_parsers_benchmark(timings-delassus-operations) + add_parsers_benchmark(timings-contact-dynamics) + add_parsers_benchmark(timings-constrained-dynamics-derivatives) + # timings-impulse-dynamics + add_parsers_benchmark(timings-impulse-dynamics) + add_parsers_benchmark(timings-impulse-dynamics-derivatives) + + # cppacg + if(BUILD_WITH_CODEGEN_SUPPORT) + macro(add_cppadcg_benchmark benchmark_name) + pinocchio_add_benchmark(${benchmark_name}) + target_link_libraries(pinocchio-benchmark-${benchmark_name} + PRIVATE pinocchio_parsers) + target_link_libraries(pinocchio-benchmark-${benchmark_name} + PRIVATE pinocchio_cppadcg) + target_compile_definitions(pinocchio-benchmark-${benchmark_name} + PRIVATE PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" ) - endif() - if(bench_CPPADCG OR (bench_CPPADCG_OPTIONAL AND TARGET pinocchio_cppadcg)) - target_link_libraries(${bench_name} PRIVATE pinocchio_cppadcg) - set(cppad_special_define ON) - endif() - if(bench_CPPAD OR (bench_CPPAD_OPTIONAL AND TARGET pinocchio_cppad)) - target_link_libraries(${bench_name} PRIVATE pinocchio_cppad) - set(cppad_special_define ON) + endmacro() + add_cppadcg_benchmark(timings-cg) endif() - if(cppad_special_define) - target_compile_definitions( - ${bench_name} - PRIVATE PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" - ) - target_link_libraries(${bench_name} PRIVATE ${CMAKE_DL_LIBS}) + # parallel + if(BUILD_WITH_OPENMP_SUPPORT) + macro(add_parallel_benchmark benchmark_name) + pinocchio_add_benchmark(${benchmark_name}) + target_link_libraries(pinocchio-benchmark-${benchmark_name} + PRIVATE pinocchio_parsers) + target_link_libraries(pinocchio-benchmark-${benchmark_name} + PRIVATE pinocchio_parallel) + endmacro() + add_parallel_benchmark(timings-parallel) + endif() + + # collision + if(BUILD_WITH_URDF_SUPPORT AND BUILD_WITH_COLLISION_SUPPORT) + macro(add_collision_benchmark benchmark_name) + pinocchio_add_benchmark(${benchmark_name}) + target_link_libraries(pinocchio-benchmark-${benchmark_name} + PRIVATE pinocchio_parsers) + target_link_libraries(pinocchio-benchmark-${benchmark_name} + PRIVATE pinocchio_collision) + endmacro() + add_collision_benchmark(timings-geometry) endif() - - add_dependencies(${PROJECT_NAME}-benchmarks ${bench_name}) -endfunction() - -add_pinocchio_benchmark(spatial-operations) - -# timings -# -add_pinocchio_benchmark(timings PARSERS) -if(BUILD_WITH_CODEGEN_SUPPORT) - add_pinocchio_benchmark(timings-cg PARSERS CPPADCG) -endif() - -if(BUILD_WITH_OPENMP_SUPPORT) - add_pinocchio_benchmark(timings-parallel PARSERS PARALLEL COLLISION_PARALLEL_OPTIONAL) endif() -# timings cholesky -# -add_pinocchio_benchmark(timings-cholesky PARSERS) -add_pinocchio_benchmark(timings-loop-constrained-aba PARSERS) - -# timings derivatives -# -add_pinocchio_benchmark(timings-derivatives PARSERS) +#cppad if(BUILD_WITH_AUTODIFF_SUPPORT) - # timings-cppad-jit - add_pinocchio_benchmark(timings-cppad-jit CPPAD) -endif() - -# timings-eigen -add_pinocchio_benchmark(timings-eigen) - -# timings-linalg -add_pinocchio_benchmark(timings-linalg-inverse) - -# timings-geometry -# -if(BUILD_WITH_URDF_SUPPORT AND BUILD_WITH_COLLISION_SUPPORT) - add_pinocchio_benchmark(timings-geometry PARSERS COLLISION) -endif() - -# timings-jacobian -# -add_pinocchio_benchmark(timings-jacobian PARSERS) - -# timings-contact-dynamics -# -add_pinocchio_benchmark(timings-delassus-operations PARSERS) -add_pinocchio_benchmark(timings-contact-dynamics PARSERS) -add_pinocchio_benchmark(timings-constrained-dynamics-derivatives PARSERS) - -# timings-impulse-dynamics -# -add_pinocchio_benchmark(timings-impulse-dynamics PARSERS) -add_pinocchio_benchmark(timings-impulse-dynamics-derivatives PARSERS) +macro(add_cppad_benchmark benchmark_name) + pinocchio_add_benchmark(${benchmark_name}) + target_link_libraries(pinocchio-benchmark-${benchmark_name} + PRIVATE pinocchio_parsers) + target_link_libraries(pinocchio-benchmark-${benchmark_name} + PRIVATE pinocchio_cppad) + target_compile_definitions(pinocchio-benchmark-${benchmark_name} + PRIVATE PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" + ) + endmacro() + add_cppad_benchmark(timings-cppad-jit) +endif() \ No newline at end of file diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt index 2362b33a9e..3301408d7e 100644 --- a/bindings/python/CMakeLists.txt +++ b/bindings/python/CMakeLists.txt @@ -247,7 +247,6 @@ set(COMMON_SOURCES parsers/graph/expose-model-graph-algo.cpp parsers/graph/expose-model-graph.cpp parsers/graph/expose-model-configuration-converter.cpp - parsers/graph/expose-model-graph-algo-geometry.cpp extra/expose-extras.cpp module.cpp ) @@ -267,6 +266,7 @@ if(BUILD_WITH_COLLISION_SUPPORT) collision/expose-broadphase-callbacks.cpp collision/expose-collision.cpp collision/expose-coal.cpp + parsers/graph/expose-model-graph-algo-geometry.cpp ) endif() From f268452fcc325f4389eb8786a0dd5f214a03cfbb Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Mon, 10 Aug 2026 16:35:27 +0200 Subject: [PATCH 31/32] cmake: Port examples --- CMakeLists.txt | 7 + benchmark/CMakeLists.txt | 74 ++-- bindings/python/CMakeLists.txt | 5 +- examples/CMakeLists.txt | 316 +++++++++--------- examples/{cppad => }/autodiff-rnea.cpp | 0 examples/{cppad => }/autodiff-rnea.py | 0 examples/{casadi => }/cartpole.py | 0 examples/{casadi => }/casadi-aba.cpp | 0 examples/{casadi => }/casadi-crba.cpp | 0 examples/{casadi => }/casadi-rnea.cpp | 0 examples/casadi/CMakeLists.txt | 35 -- examples/{codegen => }/codegen-crba.cpp | 0 examples/{codegen => }/codegen-rnea.cpp | 0 examples/{codegen => }/codegen-rnea.py | 0 examples/codegen/CMakeLists.txt | 36 -- examples/cppad/CMakeLists.txt | 26 -- examples/{casadi => }/quadrotor-ocp.py | 0 .../simulation-pendulum-variational.ipynb | 0 unittest/CMakeLists.txt | 19 +- unittest/cpp/CMakeLists.txt | 279 ++++++++-------- unittest/python/CMakeLists.txt | 125 ++++--- unittest/python/pybind11/CMakeLists.txt | 2 +- 22 files changed, 410 insertions(+), 514 deletions(-) rename examples/{cppad => }/autodiff-rnea.cpp (100%) rename examples/{cppad => }/autodiff-rnea.py (100%) rename examples/{casadi => }/cartpole.py (100%) rename examples/{casadi => }/casadi-aba.cpp (100%) rename examples/{casadi => }/casadi-crba.cpp (100%) rename examples/{casadi => }/casadi-rnea.cpp (100%) delete mode 100644 examples/casadi/CMakeLists.txt rename examples/{codegen => }/codegen-crba.cpp (100%) rename examples/{codegen => }/codegen-rnea.cpp (100%) rename examples/{codegen => }/codegen-rnea.py (100%) delete mode 100644 examples/codegen/CMakeLists.txt delete mode 100644 examples/cppad/CMakeLists.txt rename examples/{casadi => }/quadrotor-ocp.py (100%) rename examples/{casadi => }/simulation-pendulum-variational.ipynb (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 56fcbb6da1..0ccd4f26fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1405,6 +1405,13 @@ if(BUILD_BENCHMARK) add_subdirectory(benchmark) endif() +# ---------------------------------------------------- +# --- EXAMPLES -------------------------------------- +# ---------------------------------------------------- +if(BUILD_EXAMPLES) + add_subdirectory(examples) +endif() + # ---------------------------------------------------- # --- EXPORT ---------------------------------------- # ---------------------------------------------------- diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index 42da1457b8..7e690ad5b0 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -47,79 +47,57 @@ pinocchio_add_benchmark(timings-eigen) pinocchio_add_benchmark(timings-linalg-inverse) if (BUILD_WITH_PARSERS_SUPPORT) - macro(add_parsers_benchmark benchmark_name) - pinocchio_add_benchmark(${benchmark_name}) - target_link_libraries(pinocchio-benchmark-${benchmark_name} - PRIVATE pinocchio_parsers) - endmacro() # timings - add_parsers_benchmark(timings) + pinocchio_add_benchmark(timings) # timings cholesky - add_parsers_benchmark(timings-cholesky) - add_parsers_benchmark(timings-loop-constrained-aba) + pinocchio_add_benchmark(timings-cholesky) + pinocchio_add_benchmark(timings-loop-constrained-aba) # timings derivatives - add_parsers_benchmark(timings-derivatives) + pinocchio_add_benchmark(timings-derivatives) # timings-jacobian - add_parsers_benchmark(timings-jacobian) + pinocchio_add_benchmark(timings-jacobian) # timings-contact-dynamics - add_parsers_benchmark(timings-delassus-operations) - add_parsers_benchmark(timings-contact-dynamics) - add_parsers_benchmark(timings-constrained-dynamics-derivatives) + pinocchio_add_benchmark(timings-delassus-operations) + pinocchio_add_benchmark(timings-contact-dynamics) + pinocchio_add_benchmark(timings-constrained-dynamics-derivatives) # timings-impulse-dynamics - add_parsers_benchmark(timings-impulse-dynamics) - add_parsers_benchmark(timings-impulse-dynamics-derivatives) + pinocchio_add_benchmark(timings-impulse-dynamics) + pinocchio_add_benchmark(timings-impulse-dynamics-derivatives) # cppacg if(BUILD_WITH_CODEGEN_SUPPORT) - macro(add_cppadcg_benchmark benchmark_name) + macro(pinocchio_add_cppadcg_benchmark benchmark_name) pinocchio_add_benchmark(${benchmark_name}) - target_link_libraries(pinocchio-benchmark-${benchmark_name} - PRIVATE pinocchio_parsers) target_link_libraries(pinocchio-benchmark-${benchmark_name} PRIVATE pinocchio_cppadcg) target_compile_definitions(pinocchio-benchmark-${benchmark_name} PRIVATE PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" ) endmacro() - add_cppadcg_benchmark(timings-cg) + pinocchio_add_cppadcg_benchmark(timings-cg) endif() # parallel if(BUILD_WITH_OPENMP_SUPPORT) - macro(add_parallel_benchmark benchmark_name) - pinocchio_add_benchmark(${benchmark_name}) - target_link_libraries(pinocchio-benchmark-${benchmark_name} - PRIVATE pinocchio_parsers) - target_link_libraries(pinocchio-benchmark-${benchmark_name} - PRIVATE pinocchio_parallel) - endmacro() - add_parallel_benchmark(timings-parallel) + pinocchio_add_benchmark(timings-parallel) endif() - + # collision if(BUILD_WITH_URDF_SUPPORT AND BUILD_WITH_COLLISION_SUPPORT) - macro(add_collision_benchmark benchmark_name) + pinocchio_add_benchmark(timings-geometry) + endif() + + #cppad + if(BUILD_WITH_AUTODIFF_SUPPORT) + macro(pinocchio_add_cppad_benchmark benchmark_name) pinocchio_add_benchmark(${benchmark_name}) target_link_libraries(pinocchio-benchmark-${benchmark_name} - PRIVATE pinocchio_parsers) - target_link_libraries(pinocchio-benchmark-${benchmark_name} - PRIVATE pinocchio_collision) - endmacro() - add_collision_benchmark(timings-geometry) + PRIVATE pinocchio_cppad) + target_compile_definitions(pinocchio-benchmark-${benchmark_name} + PRIVATE PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" + ) + endmacro() + pinocchio_add_cppad_benchmark(timings-cppad-jit) endif() endif() -#cppad -if(BUILD_WITH_AUTODIFF_SUPPORT) -macro(add_cppad_benchmark benchmark_name) - pinocchio_add_benchmark(${benchmark_name}) - target_link_libraries(pinocchio-benchmark-${benchmark_name} - PRIVATE pinocchio_parsers) - target_link_libraries(pinocchio-benchmark-${benchmark_name} - PRIVATE pinocchio_cppad) - target_compile_definitions(pinocchio-benchmark-${benchmark_name} - PRIVATE PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" - ) - endmacro() - add_cppad_benchmark(timings-cppad-jit) -endif() \ No newline at end of file diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt index 3301408d7e..f24f4b8411 100644 --- a/bindings/python/CMakeLists.txt +++ b/bindings/python/CMakeLists.txt @@ -379,7 +379,7 @@ if(BUILD_PYTHON_BINDINGS_WITH_BOOST_MPFR_SUPPORT) BASE_DIRS include ) pinocchio_add_python_binding(mpfr ${COMMON_SOURCES} ${PROJECT_SOURCE_DIR}/bindings/python/extra/mpfr/boost_number.cpp) - target_link_libraries(pinocchio_pywrap_mpfr PRIVATE MPFR) + target_link_libraries(pinocchio_pywrap_mpfr PRIVATE MPFR::MPFR) list(APPEND STUBGEN_DEPENDENCIES "pinocchio_pywrap_mpfr") endif() @@ -423,6 +423,7 @@ jrl_python_compile_all(DIRECTORY # Install binding in the right location jrl_python_compute_install_dir(python_install_dir) +install(TARGETS pinocchio_pywrap_default DESTINATION ${python_install_dir}/pinocchio) install( DIRECTORY ${CMAKE_BINARY_DIR}/lib/site-packages/pinocchio @@ -433,6 +434,4 @@ install( PATTERN "*.pyc" PATTERN "*.pyi" PATTERN "*.typed" - PATTERN "*.so" - PATTERN "*.pyd" ) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 0b3421200b..8b60c57e82 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -2,194 +2,204 @@ # Copyright (c) 2015-2024 CNRS INRIA # -# Compute flags outside the macro to avoid recomputing it for each tests -cxx_flags_by_compiler_frontend(MSVC _USE_MATH_DEFINES OUTPUT EXAMPLE_PRIVATE_DEFINITIONS) - -function(ADD_PINOCCHIO_CPP_EXAMPLE EXAMPLE) - if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - set(options PARSERS CPPAD CPPADCG CASADI) - set(oneValueArgs) - set(multiValueArgs) - cmake_parse_arguments( - example - "${options}" - "${oneValueArgs}" - "${multiValueArgs}" - ${ARGN} +add_custom_target(pinocchio-examples) + + +function(pinocchio_add_cpp_example example_name) + set(target_name "pinocchio-example-cpp-${example_name}") + pinocchio_add_cpp_test_or_example(${target_name} ${example_name}) + add_dependencies(pinocchio-examples ${target_name}) + + if(MSVC) + target_compile_definitions(${target_name} PRIVATE _USE_MATH_DEFINES) + endif() + if(WIN32) + string(REPLACE ";" "\\\;" _PATH "$ENV{PATH}") + set(ENV_VARIABLES + "PATH=${_PATH}\\\;${PROJECT_BINARY_DIR}/src\\\;${PROJECT_BINARY_DIR}/bindings/python/pinocchio" ) + set_tests_properties( + ${target_name} + PROPERTIES ENVIRONMENT "${ENV_VARIABLES}" + ) + endif() + # modernize_target_link_libraries( + # ${EXAMPLE_NAME} + # SCOPE PRIVATE + # TARGETS Boost::filesystem + # LIBRARIES ${Boost_FILESYSTEM_LIBRARY} + # INCLUDE_DIRS ${Boost_INCLUDE_DIRS} + # ) +endfunction() - get_filename_component(EXAMPLE_NAME ${EXAMPLE} NAME) - set(EXAMPLE_NAME "${PROJECT_NAME}-example-cpp-${EXAMPLE_NAME}") - add_unit_test(${EXAMPLE_NAME} "${EXAMPLE}.cpp") - target_link_libraries(${EXAMPLE_NAME} PUBLIC ${PROJECT_NAME}) +function(pinocchio_add_python_example example_name) + pinocchio_add_python_test_or_example("${PROJECT_NAME}-example-py-${example_name}" "${example_name}") + # TODO handle add_windows_dll_path_to_test +endfunction() - if(example_PARSERS) - target_link_libraries( - ${EXAMPLE_NAME} - PUBLIC ${PROJECT_NAME}_parsers - ) - endif() +if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) + pinocchio_add_cpp_example(inverse-kinematics) + pinocchio_add_cpp_example(inverse-kinematics-3d) + pinocchio_add_cpp_example(overview-simple) + pinocchio_add_cpp_example(overview-lie) + pinocchio_add_cpp_example(overview-SE3) + pinocchio_add_cpp_example(interpolation-SE3) + + if(BUILD_WITH_PARSERS_SUPPORT) + pinocchio_add_cpp_example(model-graph) + pinocchio_add_cpp_example(model-configuration-converter) + endif() - if(example_CPPAD) - target_link_libraries(${EXAMPLE_NAME} PUBLIC ${PROJECT_NAME}_cppad) + if(BUILD_WITH_URDF_SUPPORT) + pinocchio_add_cpp_example(overview-urdf) + pinocchio_add_cpp_example(build-reduced-model) + pinocchio_add_cpp_example(geometry-models) + pinocchio_add_cpp_example(kinematics-derivatives) + pinocchio_add_cpp_example(forward-dynamics-derivatives) + pinocchio_add_cpp_example(inverse-dynamics-derivatives) + if(BUILD_ADVANCED_TESTING) + pinocchio_add_cpp_example(multiprecision) endif() + endif() + + if(BUILD_WITH_COLLISION_SUPPORT AND BUILD_WITH_URDF_SUPPORT) + pinocchio_add_cpp_example(collisions) + endif() - if(example_CPPADCG) + if(BUILD_WITH_CASADI_SUPPORT) + function(pinocchio_add_casadi_example name) + pinocchio_add_cpp_example(${name}) + add_dependencies(pinocchio-example-cpp-casadi pinocchio-example-cpp-${name}) + target_compile_definitions( + pinocchio-example-cpp-${name} + PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" + ) target_link_libraries( - ${EXAMPLE_NAME} - PUBLIC ${PROJECT_NAME}_cppadcg + pinocchio-example-cpp-${name} + PRIVATE pinocchio_casadi_headers ) - endif() - - if(example_CASADI) - target_link_libraries(${EXAMPLE_NAME} PUBLIC ${PROJECT_NAME}_casadi) - endif() + endfunction() - target_compile_definitions( - ${EXAMPLE_NAME} - PRIVATE ${EXAMPLE_PRIVATE_DEFINITIONS} + add_custom_target(pinocchio-example-cpp-casadi) + set_target_properties( + pinocchio-example-cpp-casadi + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True ) + pinocchio_add_casadi_example(casadi-aba) + pinocchio_add_casadi_example(casadi-crba) + pinocchio_add_casadi_example(casadi-rnea) + endif() - modernize_target_link_libraries( - ${EXAMPLE_NAME} - SCOPE PRIVATE - TARGETS Boost::filesystem - LIBRARIES ${Boost_FILESYSTEM_LIBRARY} - INCLUDE_DIRS ${Boost_INCLUDE_DIRS} + if(BUILD_WITH_AUTODIFF_SUPPORT) + function(pinocchio_add_cppad_example name) + pinocchio_add_cpp_example(${name}) + add_dependencies(pinocchio-example-cpp-cppad pinocchio-example-cpp-${name}) + target_link_libraries( + pinocchio-example-cpp-${name} + PRIVATE pinocchio_cppad_headers + ) + endfunction() + add_custom_target(pinocchio-example-cpp-cppad) + set_target_properties( + pinocchio-example-cpp-cppad + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True ) + pinocchio_add_cppad_example(autodiff-rnea) + endif() - # There is no RPATH in Windows, then we must use the PATH to find the DLL - if(WIN32) - string(REPLACE ";" "\\\;" _PATH "$ENV{PATH}") - set(ENV_VARIABLES - "PATH=${_PATH}\\\;${PROJECT_BINARY_DIR}/src\\\;${PROJECT_BINARY_DIR}/bindings/python/pinocchio" - ) - set_tests_properties( - ${EXAMPLE_NAME} - PROPERTIES ENVIRONMENT "${ENV_VARIABLES}" + if(BUILD_WITH_CODEGEN_SUPPORT AND BUILD_WITH_URDF_SUPPORT) + function(pinocchio_add_cppadcg_example name) + pinocchio_add_cpp_example(${name}) + add_dependencies(pinocchio-example-cpp-cppadcg pinocchio-example-cpp-${name}) + target_compile_definitions( + pinocchio-example-cpp-${name} + PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" ) - endif() - if(TARGET example-robot-data::example-robot-data) + target_link_libraries( - ${EXAMPLE_NAME} - PRIVATE example-robot-data::example-robot-data - ) - else() - target_compile_definitions( - ${EXAMPLE_NAME} - PRIVATE - "EXAMPLE_ROBOT_DATA_MODEL_DIR=\"${EXAMPLE_ROBOT_DATA_MODEL_DIR}\"" + pinocchio-example-cpp-${name} + PRIVATE pinocchio_cppadcg_headers ) - endif() - endif() -endfunction() - -add_pinocchio_cpp_example(inverse-kinematics) -add_pinocchio_cpp_example(inverse-kinematics-3d) -add_pinocchio_cpp_example(overview-simple) -add_pinocchio_cpp_example(overview-lie) -add_pinocchio_cpp_example(overview-SE3) -add_pinocchio_cpp_example(interpolation-SE3) -add_pinocchio_cpp_example(model-graph PARSERS) -add_pinocchio_cpp_example(model-configuration-converter PARSERS) - -if(BUILD_WITH_URDF_SUPPORT) - add_pinocchio_cpp_example(overview-urdf PARSERS) - add_pinocchio_cpp_example(build-reduced-model PARSERS) - add_pinocchio_cpp_example(geometry-models PARSERS) - add_pinocchio_cpp_example(kinematics-derivatives PARSERS) - add_pinocchio_cpp_example(forward-dynamics-derivatives PARSERS) - add_pinocchio_cpp_example(inverse-dynamics-derivatives PARSERS) - if(BUILD_ADVANCED_TESTING) - add_pinocchio_cpp_example(multiprecision PARSERS) - endif() -endif() -if(BUILD_WITH_COLLISION_SUPPORT) - if(BUILD_WITH_URDF_SUPPORT) - add_pinocchio_cpp_example(collisions PARSERS) + endfunction() + add_custom_target(pinocchio-example-cpp-cppadcg) + set_target_properties( + pinocchio-example-cpp-cppadcg + PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True + ) + pinocchio_add_cppadcg_example(codegen-rnea) + pinocchio_add_cppadcg_example(codegen-crba) endif() endif() if(BUILD_PYTHON_INTERFACE) - set(${PROJECT_NAME}_PYTHON_EXAMPLES - inverse-kinematics - inverse-kinematics-3d - overview-simple - kinematics-derivatives - forward-dynamics-derivatives - inverse-dynamics-derivatives - model-graph - model-configuration-converter - ellipsoid-joint-kinematics - admm-constraint-solver - ) + pinocchio_add_python_example(inverse-kinematics) + pinocchio_add_python_example(inverse-kinematics-3d) + pinocchio_add_python_example(overview-simple) + pinocchio_add_python_example(kinematics-derivatives) + pinocchio_add_python_example(forward-dynamics-derivatives) + pinocchio_add_python_example(inverse-dynamics-derivatives) + pinocchio_add_python_example(model-graph) + pinocchio_add_python_example(model-configuration-converter) + pinocchio_add_python_example(ellipsoid-joint-kinematics) + pinocchio_add_python_example(admm-constraint-solver) + if(BUILD_WITH_URDF_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PYTHON_EXAMPLES - overview-urdf - gepetto-viewer - build-reduced-model - robot-wrapper-viewer - geometry-models - constraint-cholesky - ) + pinocchio_add_python_example(overview-urdf) + pinocchio_add_python_example(gepetto-viewer) + pinocchio_add_python_example(build-reduced-model) + pinocchio_add_python_example(robot-wrapper-viewer) + pinocchio_add_python_example(geometry-models) + pinocchio_add_python_example(constraint-cholesky) + if(BUILD_ADVANCED_TESTING) # Set as advanced testing because it need a new # example_robot_data release (> 4.4) # and because computation is long in Debug - list( - APPEND ${PROJECT_NAME}_PYTHON_EXAMPLES - g1-constraint-simulation - ) + + pinocchio_add_python_example(g1-constraint-simulation) endif() endif() + if( BUILD_WITH_CASADI_SUPPORT) + pinocchio_add_python_example(quadrotor-ocp) + endif() + + if(BUILD_WITH_AUTODIFF_SUPPORT) + pinocchio_add_python_example(autodiff-rnea) + endif() + + if(BUILD_WITH_CODEGEN_SUPPORT) + pinocchio_add_python_example(codegen-rnea) + endif() + if(BUILD_WITH_COLLISION_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PYTHON_EXAMPLES - sample-model-viewer - display-shapes - simulation-pendulum - simulation-closed-kinematic-chains - simulation-lcaba - model-graph-geometry - ) + pinocchio_add_python_example(sample-model-viewer) + pinocchio_add_python_example(display-shapes) + pinocchio_add_python_example(simulation-pendulum) + pinocchio_add_python_example(simulation-closed-kinematic-chains) + pinocchio_add_python_example(simulation-lcaba) + pinocchio_add_python_example(model-graph-geometry) + if(BUILD_WITH_URDF_SUPPORT) - list( - APPEND ${PROJECT_NAME}_PYTHON_EXAMPLES - meshcat-viewer - meshcat-viewer-dae - viser-viewer - collisions - collision-with-point-clouds - append-urdf-model-with-another-model - simulation-contact-dynamics - # talos-simulation - static-contact-dynamics - ) + pinocchio_add_python_example(meshcat-viewer) + pinocchio_add_python_example(meshcat-viewer-dae) + pinocchio_add_python_example(viser-viewer) + pinocchio_add_python_example(collisions) + pinocchio_add_python_example(collision-with-point-clouds) + pinocchio_add_python_example(append-urdf-model-with-another-model) + pinocchio_add_python_example(simulation-contact-dynamics) + #pinocchio_add_python_example(talos-simulation) + pinocchio_add_python_example(static-contact-dynamics) + endif() + + if( BUILD_WITH_CASADI_SUPPORT) + pinocchio_add_python_example(cartpole) endif() endif() if(BUILD_WITH_OPENMP_SUPPORT) - list(APPEND ${PROJECT_NAME}_PYTHON_EXAMPLES run-algo-in-parallel) + pinocchio_add_python_example(run-algo-in-parallel) endif() - - foreach(EXAMPLE ${${PROJECT_NAME}_PYTHON_EXAMPLES}) - set(EXAMPLE_NAME "${PROJECT_NAME}-example-py-${EXAMPLE}") - add_python_unit_test("${EXAMPLE_NAME}" "examples/${EXAMPLE}.py" "bindings/python") - get_test_property(${EXAMPLE_NAME} ENVIRONMENT _ENVIRONMENT) - set_tests_properties( - "${EXAMPLE_NAME}" - PROPERTIES - ENVIRONMENT - "${_ENVIRONMENT};EXAMPLE_ROBOT_DATA_MODEL_DIR=${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - ) - add_windows_dll_path_to_test(${EXAMPLE_NAME}) - endforeach() endif() - -add_subdirectory(casadi) -add_subdirectory(cppad) -add_subdirectory(codegen) diff --git a/examples/cppad/autodiff-rnea.cpp b/examples/autodiff-rnea.cpp similarity index 100% rename from examples/cppad/autodiff-rnea.cpp rename to examples/autodiff-rnea.cpp diff --git a/examples/cppad/autodiff-rnea.py b/examples/autodiff-rnea.py similarity index 100% rename from examples/cppad/autodiff-rnea.py rename to examples/autodiff-rnea.py diff --git a/examples/casadi/cartpole.py b/examples/cartpole.py similarity index 100% rename from examples/casadi/cartpole.py rename to examples/cartpole.py diff --git a/examples/casadi/casadi-aba.cpp b/examples/casadi-aba.cpp similarity index 100% rename from examples/casadi/casadi-aba.cpp rename to examples/casadi-aba.cpp diff --git a/examples/casadi/casadi-crba.cpp b/examples/casadi-crba.cpp similarity index 100% rename from examples/casadi/casadi-crba.cpp rename to examples/casadi-crba.cpp diff --git a/examples/casadi/casadi-rnea.cpp b/examples/casadi-rnea.cpp similarity index 100% rename from examples/casadi/casadi-rnea.cpp rename to examples/casadi-rnea.cpp diff --git a/examples/casadi/CMakeLists.txt b/examples/casadi/CMakeLists.txt deleted file mode 100644 index 63be3ca4e5..0000000000 --- a/examples/casadi/CMakeLists.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# Copyright (c) 2025 INRIA -# - -function(ADD_PINOCCHIO_CPP_CASADI_EXAMPLE EXAMPLE) - add_pinocchio_cpp_example(${EXAMPLE} CASADI) -endfunction() - -if(BUILD_WITH_CASADI_SUPPORT) - if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - add_pinocchio_cpp_casadi_example(casadi-aba) - add_pinocchio_cpp_casadi_example(casadi-crba) - add_pinocchio_cpp_casadi_example(casadi-rnea) - endif() - - if(BUILD_PYTHON_INTERFACE) - set(${PROJECT_NAME}_CASADI_PYTHON_EXAMPLES quadrotor-ocp) - if(BUILD_WITH_COLLISION_SUPPORT) - list(APPEND ${PROJECT_NAME}_CASADI_PYTHON_EXAMPLES cartpole) - endif() - - foreach(EXAMPLE ${${PROJECT_NAME}_CASADI_PYTHON_EXAMPLES}) - set(EXAMPLE_NAME "${PROJECT_NAME}-example-py-casadi-${EXAMPLE}") - add_python_unit_test(${EXAMPLE_NAME} "examples/casadi/${EXAMPLE}.py" "bindings/python") - get_test_property(${EXAMPLE_NAME} ENVIRONMENT _ENVIRONMENT) - set_tests_properties( - "${EXAMPLE_NAME}" - PROPERTIES - ENVIRONMENT - "${_ENVIRONMENT};EXAMPLE_ROBOT_DATA_MODEL_DIR=${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - ) - add_windows_dll_path_to_test(${EXAMPLE_NAME}) - endforeach() - endif() -endif() diff --git a/examples/codegen/codegen-crba.cpp b/examples/codegen-crba.cpp similarity index 100% rename from examples/codegen/codegen-crba.cpp rename to examples/codegen-crba.cpp diff --git a/examples/codegen/codegen-rnea.cpp b/examples/codegen-rnea.cpp similarity index 100% rename from examples/codegen/codegen-rnea.cpp rename to examples/codegen-rnea.cpp diff --git a/examples/codegen/codegen-rnea.py b/examples/codegen-rnea.py similarity index 100% rename from examples/codegen/codegen-rnea.py rename to examples/codegen-rnea.py diff --git a/examples/codegen/CMakeLists.txt b/examples/codegen/CMakeLists.txt deleted file mode 100644 index 4a3787f917..0000000000 --- a/examples/codegen/CMakeLists.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# Copyright (c) 2020-2023 INRIA -# - -if(cppadcg_FOUND AND BUILD_WITH_CODEGEN_SUPPORT AND BUILD_WITH_URDF_SUPPORT) - function(ADD_PINOCCHIO_CPP_CODEGEN_EXAMPLE EXAMPLE) - add_pinocchio_cpp_example( - ${EXAMPLE} - CPPADCG - PARSERS - ) - target_link_libraries( - ${PROJECT_NAME}-example-cpp-${EXAMPLE} - PUBLIC ${CMAKE_DL_LIBS} - ) - target_compile_definitions( - ${PROJECT_NAME}-example-cpp-${EXAMPLE} - PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" - ) - endfunction() - - if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) - add_pinocchio_cpp_codegen_example(codegen-crba) - add_pinocchio_cpp_codegen_example(codegen-rnea) - endif() - - if(BUILD_PYTHON_INTERFACE) - set(${PROJECT_NAME}_CODEGEN_PYTHON_EXAMPLES codegen-rnea) - - foreach(EXAMPLE ${${PROJECT_NAME}_CODEGEN_PYTHON_EXAMPLES}) - set(EXAMPLE_NAME "${PROJECT_NAME}-example-py-${EXAMPLE}") - add_python_unit_test(${EXAMPLE_NAME} "examples/codegen/${EXAMPLE}.py" "bindings/python") - add_windows_dll_path_to_test(${EXAMPLE_NAME}) - endforeach() - endif() -endif() diff --git a/examples/cppad/CMakeLists.txt b/examples/cppad/CMakeLists.txt deleted file mode 100644 index 27c95888bb..0000000000 --- a/examples/cppad/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# Copyright (c) 2022 INRIA -# - -if(BUILD_WITH_AUTODIFF_SUPPORT AND NOT BUILD_STANDALONE_PYTHON_INTERFACE) - function(ADD_PINOCCHIO_CPP_AUTODIFF_EXAMPLE EXAMPLE) - include_directories(SYSTEM ${cppadcg_INCLUDE_DIR}) - add_pinocchio_cpp_example(${EXAMPLE} CPPAD) - target_link_libraries( - ${PROJECT_NAME}-example-cpp-${EXAMPLE} - PUBLIC ${CMAKE_DL_LIBS} - ) - endfunction() - - add_pinocchio_cpp_autodiff_example(autodiff-rnea) - - if(BUILD_PYTHON_INTERFACE) - set(${PROJECT_NAME}_AUTODIFF_PYTHON_EXAMPLES autodiff-rnea) - - foreach(EXAMPLE ${${PROJECT_NAME}_AUTODIFF_PYTHON_EXAMPLES}) - set(EXAMPLE_NAME "${PROJECT_NAME}-example-py-${EXAMPLE}") - add_python_unit_test(${EXAMPLE_NAME} "examples/cppad/${EXAMPLE}.py" "bindings/python") - add_windows_dll_path_to_test(${EXAMPLE_NAME}) - endforeach() - endif() -endif() diff --git a/examples/casadi/quadrotor-ocp.py b/examples/quadrotor-ocp.py similarity index 100% rename from examples/casadi/quadrotor-ocp.py rename to examples/quadrotor-ocp.py diff --git a/examples/casadi/simulation-pendulum-variational.ipynb b/examples/simulation-pendulum-variational.ipynb similarity index 100% rename from examples/casadi/simulation-pendulum-variational.ipynb rename to examples/simulation-pendulum-variational.ipynb diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt index 1c45853b16..7cc34f3f0b 100644 --- a/unittest/CMakeLists.txt +++ b/unittest/CMakeLists.txt @@ -19,12 +19,10 @@ add_custom_target(pinocchio-tests) # --- MACROS ---------------------------------------- # ---------------------------------------------------- -# TODO rename in pinocchio_add_test -function(add_pinocchio_unit_test name) - set(test_name "pinocchio-test-cpp-${name}") - add_executable(${test_name} ${name}.cpp) +function(pinocchio_add_cpp_test_or_example target_name file_name) + add_executable(${target_name} ${file_name}.cpp) target_link_libraries( - ${test_name} + ${target_name} PRIVATE Boost::unit_test_framework pinocchio @@ -32,10 +30,15 @@ function(add_pinocchio_unit_test name) example-robot-data::example-robot-data ) - jrl_target_set_default_compile_options(${test_name} PRIVATE) - jrl_target_enforce_msvc_conformance(${test_name} PRIVATE) + jrl_target_set_default_compile_options(${target_name} PRIVATE) + jrl_target_enforce_msvc_conformance(${target_name} PRIVATE) + + add_test(NAME ${target_name} COMMAND ${target_name}) +endfunction() - add_test(NAME ${test_name} COMMAND ${test_name}) +function(pinocchio_add_cpp_test name) + set(test_name "pinocchio-test-cpp-${name}") + pinocchio_add_cpp_test_or_example(${test_name} ${name}) add_dependencies(pinocchio-tests ${test_name}) endfunction() diff --git a/unittest/cpp/CMakeLists.txt b/unittest/cpp/CMakeLists.txt index 6a2788c356..5c341cf960 100644 --- a/unittest/cpp/CMakeLists.txt +++ b/unittest/cpp/CMakeLists.txt @@ -1,161 +1,161 @@ # CPP tests # Header only -add_pinocchio_unit_test(alloca) -add_pinocchio_unit_test(double-entry-container) -add_pinocchio_unit_test(macros) -add_pinocchio_unit_test(reference) -add_pinocchio_unit_test(eigen-storage) -add_pinocchio_unit_test(matrix-stack) -add_pinocchio_unit_test(size-in-bytes) +pinocchio_add_cpp_test(alloca) +pinocchio_add_cpp_test(double-entry-container) +pinocchio_add_cpp_test(macros) +pinocchio_add_cpp_test(reference) +pinocchio_add_cpp_test(eigen-storage) +pinocchio_add_cpp_test(matrix-stack) +pinocchio_add_cpp_test(size-in-bytes) # Math components -add_pinocchio_unit_test(eigen-basic-op) -add_pinocchio_unit_test(matrix) -add_pinocchio_unit_test(block-diagonal-matrix) -add_pinocchio_unit_test(matrix-block-element) -add_pinocchio_unit_test(eigen-tensor) -add_pinocchio_unit_test(sincos) -add_pinocchio_unit_test(quaternion) -add_pinocchio_unit_test(rpy) -add_pinocchio_unit_test(rotation) -add_pinocchio_unit_test(vector) -add_pinocchio_unit_test(matrix-inverse) -add_pinocchio_unit_test(matrix-product) -add_pinocchio_unit_test(eigenvalues) -add_pinocchio_unit_test(tridiagonal-matrix) -add_pinocchio_unit_test(lanczos-decomposition) -add_pinocchio_unit_test(gram-schmidt-orthonormalisation) -add_pinocchio_unit_test(promote-static-eval) +pinocchio_add_cpp_test(eigen-basic-op) +pinocchio_add_cpp_test(matrix) +pinocchio_add_cpp_test(block-diagonal-matrix) +pinocchio_add_cpp_test(matrix-block-element) +pinocchio_add_cpp_test(eigen-tensor) +pinocchio_add_cpp_test(sincos) +pinocchio_add_cpp_test(quaternion) +pinocchio_add_cpp_test(rpy) +pinocchio_add_cpp_test(rotation) +pinocchio_add_cpp_test(vector) +pinocchio_add_cpp_test(matrix-inverse) +pinocchio_add_cpp_test(matrix-product) +pinocchio_add_cpp_test(eigenvalues) +pinocchio_add_cpp_test(tridiagonal-matrix) +pinocchio_add_cpp_test(lanczos-decomposition) +pinocchio_add_cpp_test(gram-schmidt-orthonormalisation) +pinocchio_add_cpp_test(promote-static-eval) # Derivatives algo -add_pinocchio_unit_test(kinematics-derivatives) -add_pinocchio_unit_test(frames-derivatives) -add_pinocchio_unit_test(rnea-derivatives) -add_pinocchio_unit_test(aba-derivatives) -add_pinocchio_unit_test(centroidal-derivatives) -add_pinocchio_unit_test(center-of-mass-derivatives) -add_pinocchio_unit_test(constrained-dynamics-derivatives) -add_pinocchio_unit_test(contact-dynamics-derivatives) -add_pinocchio_unit_test(impulse-dynamics-derivatives) -add_pinocchio_unit_test(rnea-second-order-derivatives) +pinocchio_add_cpp_test(kinematics-derivatives) +pinocchio_add_cpp_test(frames-derivatives) +pinocchio_add_cpp_test(rnea-derivatives) +pinocchio_add_cpp_test(aba-derivatives) +pinocchio_add_cpp_test(centroidal-derivatives) +pinocchio_add_cpp_test(center-of-mass-derivatives) +pinocchio_add_cpp_test(constrained-dynamics-derivatives) +pinocchio_add_cpp_test(contact-dynamics-derivatives) +pinocchio_add_cpp_test(impulse-dynamics-derivatives) +pinocchio_add_cpp_test(rnea-second-order-derivatives) # # Pinocchio features -add_pinocchio_unit_test(spatial) -add_pinocchio_unit_test(symmetric) -add_pinocchio_unit_test(aba) -add_pinocchio_unit_test(rnea) -add_pinocchio_unit_test(crba) -add_pinocchio_unit_test(centroidal) -add_pinocchio_unit_test(com) -add_pinocchio_unit_test(joint-jacobian) -add_pinocchio_unit_test(cholesky) -add_pinocchio_unit_test(constrained-dynamics) -add_pinocchio_unit_test(constraint-variants) -add_pinocchio_unit_test(contact-models) -add_pinocchio_unit_test(point-anchor-constraint) -add_pinocchio_unit_test(point-contact-constraint) -add_pinocchio_unit_test(frame-anchor-constraint) -add_pinocchio_unit_test(rigid-constraint-conversion) -add_pinocchio_unit_test(joint-friction-constraint) -add_pinocchio_unit_test(joint-limit-constraint) -add_pinocchio_unit_test(constraint-jacobian) -add_pinocchio_unit_test(contact-dynamics) -add_pinocchio_unit_test(contact-inverse-dynamics) -add_pinocchio_unit_test(closed-loop-dynamics) -add_pinocchio_unit_test(loop-constrained-aba) -add_pinocchio_unit_test(impulse-dynamics) -add_pinocchio_unit_test(sample-models) -add_pinocchio_unit_test(kinematics) -add_pinocchio_unit_test(delassus) -add_pinocchio_unit_test(delassus-operations) -add_pinocchio_unit_test(delassus-operator-dense) +pinocchio_add_cpp_test(spatial) +pinocchio_add_cpp_test(symmetric) +pinocchio_add_cpp_test(aba) +pinocchio_add_cpp_test(rnea) +pinocchio_add_cpp_test(crba) +pinocchio_add_cpp_test(centroidal) +pinocchio_add_cpp_test(com) +pinocchio_add_cpp_test(joint-jacobian) +pinocchio_add_cpp_test(cholesky) +pinocchio_add_cpp_test(constrained-dynamics) +pinocchio_add_cpp_test(constraint-variants) +pinocchio_add_cpp_test(contact-models) +pinocchio_add_cpp_test(point-anchor-constraint) +pinocchio_add_cpp_test(point-contact-constraint) +pinocchio_add_cpp_test(frame-anchor-constraint) +pinocchio_add_cpp_test(rigid-constraint-conversion) +pinocchio_add_cpp_test(joint-friction-constraint) +pinocchio_add_cpp_test(joint-limit-constraint) +pinocchio_add_cpp_test(constraint-jacobian) +pinocchio_add_cpp_test(contact-dynamics) +pinocchio_add_cpp_test(contact-inverse-dynamics) +pinocchio_add_cpp_test(closed-loop-dynamics) +pinocchio_add_cpp_test(loop-constrained-aba) +pinocchio_add_cpp_test(impulse-dynamics) +pinocchio_add_cpp_test(sample-models) +pinocchio_add_cpp_test(kinematics) +pinocchio_add_cpp_test(delassus) +pinocchio_add_cpp_test(delassus-operations) +pinocchio_add_cpp_test(delassus-operator-dense) # delassus-operator-preconditioned is broken and unused -#add_pinocchio_unit_test(delassus-operator-preconditioned) -add_pinocchio_unit_test(delassus-operator-rigid-body) -add_pinocchio_unit_test(preconditioner) -add_pinocchio_unit_test(pv-solver) +#pinocchio_add_cpp_test(delassus-operator-preconditioned) +pinocchio_add_cpp_test(delassus-operator-rigid-body) +pinocchio_add_cpp_test(preconditioner) +pinocchio_add_cpp_test(pv-solver) # parsers if(BUILD_WITH_URDF_SUPPORT) - add_pinocchio_unit_test(urdf) - add_pinocchio_unit_test(value) + pinocchio_add_cpp_test(urdf) + pinocchio_add_cpp_test(value) if(BUILD_WITH_COLLISION_SUPPORT) - add_pinocchio_unit_test(geometry-object) - add_pinocchio_unit_test( + pinocchio_add_cpp_test(geometry-object) + pinocchio_add_cpp_test( geometry-model ) - add_pinocchio_unit_test( + pinocchio_add_cpp_test( geometry-algorithms ) - add_pinocchio_unit_test( + pinocchio_add_cpp_test( broadphase ) - add_pinocchio_unit_test( + pinocchio_add_cpp_test( tree-broadphase ) - add_pinocchio_unit_test( + pinocchio_add_cpp_test( srdf ) endif() endif() if(BUILD_WITH_SDF_SUPPORT) - add_pinocchio_unit_test(sdf) + pinocchio_add_cpp_test(sdf) endif() if(BUILD_WITH_PARSERS_SUPPORT) - add_pinocchio_unit_test(mjcf) - add_pinocchio_unit_test(model-graph) - add_pinocchio_unit_test(model-configuration-converter) + pinocchio_add_cpp_test(mjcf) + pinocchio_add_cpp_test(model-graph) + pinocchio_add_cpp_test(model-configuration-converter) endif() if(BUILD_WITH_EXTRA_SUPPORT) - add_pinocchio_unit_test( + pinocchio_add_cpp_test( reachable-workspace ) endif() if(PINOCCHIO_BUILD_VISUALIZERS) - add_pinocchio_unit_test(visualizer) + pinocchio_add_cpp_test(visualizer) endif() if(BUILD_WITH_PYTHON_PARSER_SUPPORT) - add_pinocchio_unit_test(python_parser PYTHON_PARSER) + pinocchio_add_cpp_test(python_parser PYTHON_PARSER) endif() # Test over the joints -add_pinocchio_unit_test(all-joints) -add_pinocchio_unit_test(joint-revolute) -add_pinocchio_unit_test(joint-prismatic) -add_pinocchio_unit_test(joint-planar) -add_pinocchio_unit_test(joint-free-flyer) -add_pinocchio_unit_test(joint-spherical) -add_pinocchio_unit_test(joint-ellipsoid) -add_pinocchio_unit_test(joint-translation) -add_pinocchio_unit_test(joint-generic) -add_pinocchio_unit_test(joint-composite) -add_pinocchio_unit_test(joint-mimic) -add_pinocchio_unit_test(joint-helical) -add_pinocchio_unit_test(joint-universal) -add_pinocchio_unit_test(joint-visitors) +pinocchio_add_cpp_test(all-joints) +pinocchio_add_cpp_test(joint-revolute) +pinocchio_add_cpp_test(joint-prismatic) +pinocchio_add_cpp_test(joint-planar) +pinocchio_add_cpp_test(joint-free-flyer) +pinocchio_add_cpp_test(joint-spherical) +pinocchio_add_cpp_test(joint-ellipsoid) +pinocchio_add_cpp_test(joint-translation) +pinocchio_add_cpp_test(joint-generic) +pinocchio_add_cpp_test(joint-composite) +pinocchio_add_cpp_test(joint-mimic) +pinocchio_add_cpp_test(joint-helical) +pinocchio_add_cpp_test(joint-universal) +pinocchio_add_cpp_test(joint-visitors) # Main corpus -add_pinocchio_unit_test(model) -add_pinocchio_unit_test(data) -add_pinocchio_unit_test(joint-motion-subspace) -add_pinocchio_unit_test(compute-all-terms) -add_pinocchio_unit_test(energy) -add_pinocchio_unit_test(frames) +pinocchio_add_cpp_test(model) +pinocchio_add_cpp_test(data) +pinocchio_add_cpp_test(joint-motion-subspace) +pinocchio_add_cpp_test(compute-all-terms) +pinocchio_add_cpp_test(energy) +pinocchio_add_cpp_test(frames) if(NOT MSVC AND NOT MSVC_VERSION) - add_pinocchio_unit_test(joint-configurations) + pinocchio_add_cpp_test(joint-configurations) endif() -add_pinocchio_unit_test(explog) -add_pinocchio_unit_test(finite-differences) -add_pinocchio_unit_test(visitor) -add_pinocchio_unit_test(algo-check) +pinocchio_add_cpp_test(explog) +pinocchio_add_cpp_test(finite-differences) +pinocchio_add_cpp_test(visitor) +pinocchio_add_cpp_test(algo-check) # Warning ignore with pragma doesn't work for a part of this test, so we ignore two warning globally -add_pinocchio_unit_test(liegroups) +pinocchio_add_cpp_test(liegroups) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_compile_options( pinocchio-test-cpp-liegroups @@ -163,44 +163,44 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") ) endif() -add_pinocchio_unit_test(cartesian-product-liegroups) -add_pinocchio_unit_test(regressor) -add_pinocchio_unit_test(version) -add_pinocchio_unit_test(copy) -add_pinocchio_unit_test(constraint-cholesky) -add_pinocchio_unit_test(classic-acceleration) -add_pinocchio_unit_test(box-set) -add_pinocchio_unit_test(full-space-cone) -add_pinocchio_unit_test(zero-cone) -add_pinocchio_unit_test(orthant-cone) -add_pinocchio_unit_test(coulomb-friction-cone) +pinocchio_add_cpp_test(cartesian-product-liegroups) +pinocchio_add_cpp_test(regressor) +pinocchio_add_cpp_test(version) +pinocchio_add_cpp_test(copy) +pinocchio_add_cpp_test(constraint-cholesky) +pinocchio_add_cpp_test(classic-acceleration) +pinocchio_add_cpp_test(box-set) +pinocchio_add_cpp_test(full-space-cone) +pinocchio_add_cpp_test(zero-cone) +pinocchio_add_cpp_test(orthant-cone) +pinocchio_add_cpp_test(coulomb-friction-cone) # Solvers -add_pinocchio_unit_test(pgs-solver) -add_pinocchio_unit_test(admm-solver) +pinocchio_add_cpp_test(pgs-solver) +pinocchio_add_cpp_test(admm-solver) # Symmetric cones jordan operations -add_pinocchio_unit_test(second-order-cone-jordan-operation) -add_pinocchio_unit_test(orthant-cone-jordan-operation) +pinocchio_add_cpp_test(second-order-cone-jordan-operation) +pinocchio_add_cpp_test(orthant-cone-jordan-operation) # Serialization -add_pinocchio_unit_test(serialization) -add_pinocchio_unit_test(serialization-math) -add_pinocchio_unit_test(serialization-multibody) -add_pinocchio_unit_test(serialization-multibody-joint) -add_pinocchio_unit_test(serialization-algorithm) -add_pinocchio_unit_test(serialization-constraints) -add_pinocchio_unit_test(csv) +pinocchio_add_cpp_test(serialization) +pinocchio_add_cpp_test(serialization-math) +pinocchio_add_cpp_test(serialization-multibody) +pinocchio_add_cpp_test(serialization-multibody-joint) +pinocchio_add_cpp_test(serialization-algorithm) +pinocchio_add_cpp_test(serialization-constraints) +pinocchio_add_cpp_test(csv) # algorithm -add_pinocchio_unit_test(algorithm-utils-motion) -add_pinocchio_unit_test(algorithm-utils-force) +pinocchio_add_cpp_test(algorithm-utils-motion) +pinocchio_add_cpp_test(algorithm-utils-force) # Multiprecision arithmetic if(BUILD_ADVANCED_TESTING) - add_pinocchio_unit_test(multiprecision) + pinocchio_add_cpp_test(multiprecision) if(PINOCCHIO_BUILD_MPFR_TESTING) - add_pinocchio_unit_test(multiprecision-mpfr) + pinocchio_add_cpp_test(multiprecision-mpfr) target_link_libraries( pinocchio-test-cpp-multiprecision-mpfr PRIVATE MPFR::MPFR @@ -211,7 +211,7 @@ endif() # special scalars if(BUILD_WITH_AUTODIFF_SUPPORT) macro(ADD_CPPAD_UNIT_TEST name) - add_pinocchio_unit_test(${name}) + pinocchio_add_cpp_test(${name}) add_dependencies(pinocchio-test-cpp-cppad pinocchio-test-cpp-${name}) target_link_libraries( pinocchio-test-cpp-${name} @@ -236,7 +236,7 @@ endif() if(BUILD_WITH_CODEGEN_SUPPORT) macro(ADD_CPPADCG_UNIT_TEST name) - add_pinocchio_unit_test(${name}) + pinocchio_add_cpp_test(${name}) add_dependencies(pinocchio-test-cpp-cppadcg pinocchio-test-cpp-${name}) target_compile_definitions( pinocchio-test-cpp-${name} @@ -247,7 +247,6 @@ if(BUILD_WITH_CODEGEN_SUPPORT) PRIVATE pinocchio_cppadcg_headers ) endmacro() - if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) add_custom_target(pinocchio-test-cpp-cppadcg) set_target_properties( @@ -265,7 +264,7 @@ endif() if(BUILD_WITH_CASADI_SUPPORT) macro(ADD_CASADI_UNIT_TEST name) - add_pinocchio_unit_test(${name}) + pinocchio_add_cpp_test(${name}) add_dependencies(pinocchio-test-cpp-casadi pinocchio-test-cpp-${name}) target_compile_definitions( pinocchio-test-cpp-${name} @@ -302,7 +301,7 @@ endif() # rtsan if(BUILD_WITH_RTSAN) - add_pinocchio_unit_test(dynamic-allocations) + pinocchio_add_cpp_test(dynamic-allocations) target_compile_options( pinocchio-test-cpp-dynamic-allocations PRIVATE -fsanitize=realtime @@ -325,7 +324,7 @@ endif() if(BUILD_WITH_OPENMP_SUPPORT) macro(add_pinocchio_parallel_unit_test name) - add_pinocchio_unit_test(${name}) + pinocchio_add_cpp_test(${name}) target_link_libraries( pinocchio-test-cpp-${name} PUBLIC pinocchio_parallel diff --git a/unittest/python/CMakeLists.txt b/unittest/python/CMakeLists.txt index 560dca77f8..f837710a78 100644 --- a/unittest/python/CMakeLists.txt +++ b/unittest/python/CMakeLists.txt @@ -2,27 +2,20 @@ # Copyright (c) 2015-2025 CNRS INRIA # -function(pinocchio_python_add_test name) - set(test_name "${PROJECT_NAME}-test-py-${name}") +function(pinocchio_add_python_test_or_example target_name file_name) add_test( - NAME ${test_name} + NAME ${target_name} COMMAND $ - ${CMAKE_CURRENT_SOURCE_DIR}/${name}.py + ${CMAKE_CURRENT_SOURCE_DIR}/${file_name}.py ) set_tests_properties( - ${test_name} + ${target_name} PROPERTIES ENVIRONMENT "PYTHONPATH=$/.." LABELS "python" ) - set_tests_properties( - ${test_name} - PROPERTIES - ENVIRONMENT_MODIFICATION - "EXAMPLE_ROBOT_DATA_MODEL_DIR=set:${EXAMPLE_ROBOT_DATA_MODEL_DIR}" - ) # TODO: Remove this once coal and example-robot-data also use jrl-v2. # (Only meaningful when Pinocchio is built in-tree inside the # simple-workspace superbuild; empty/no-op in a standalone build.) @@ -33,81 +26,85 @@ function(pinocchio_python_add_test name) "${PROJECT_PYTHON_PACKAGES_IN_WORKSPACE}" ) set_tests_properties( - ${test_name} + ${target_name} PROPERTIES ENVIRONMENT_MODIFICATION - "PYTHONPATH=path_list_prepend:${_pythonpath}" + "EXAMPLE_ROBOT_DATA_MODEL_DIR=set:${EXAMPLE_ROBOT_DATA_MODEL_DIR};PYTHONPATH=path_list_prepend:${_pythonpath}" ) endfunction() -pinocchio_python_add_test(bindings) +function(pinocchio_add_python_test name) + pinocchio_add_python_test_or_example("${PROJECT_NAME}-test-py-${name}" "${name}") +endfunction() + +pinocchio_add_python_test(bindings) # Multibody -pinocchio_python_add_test(bindings_joint_composite) -pinocchio_python_add_test(bindings_joints) -pinocchio_python_add_test(bindings_model) -pinocchio_python_add_test(bindings_data) -pinocchio_python_add_test(bindings_geometry_model) -pinocchio_python_add_test(bindings_liegroups) +pinocchio_add_python_test(bindings_joint_composite) +pinocchio_add_python_test(bindings_joints) +pinocchio_add_python_test(bindings_model) +pinocchio_add_python_test(bindings_data) +pinocchio_add_python_test(bindings_geometry_model) +pinocchio_add_python_test(bindings_liegroups) # Spatial -pinocchio_python_add_test(bindings_force) -pinocchio_python_add_test(bindings_frame) -pinocchio_python_add_test(bindings_inertia) -pinocchio_python_add_test(bindings_spatial) -pinocchio_python_add_test(bindings_motion) -pinocchio_python_add_test(bindings_SE3) -pinocchio_python_add_test(explog) -pinocchio_python_add_test(rpy) +pinocchio_add_python_test(bindings_force) +pinocchio_add_python_test(bindings_frame) +pinocchio_add_python_test(bindings_inertia) +pinocchio_add_python_test(bindings_spatial) +pinocchio_add_python_test(bindings_motion) +pinocchio_add_python_test(bindings_SE3) +pinocchio_add_python_test(explog) +pinocchio_add_python_test(rpy) # Algo -pinocchio_python_add_test(bindings_com) -pinocchio_python_add_test(bindings_kinematic_regressor) -pinocchio_python_add_test(bindings_regressor) -pinocchio_python_add_test(bindings_dynamics) -pinocchio_python_add_test(bindings_kinematics) -pinocchio_python_add_test(bindings_rnea) -pinocchio_python_add_test(bindings_aba) -pinocchio_python_add_test(bindings_joint_algorithms) +pinocchio_add_python_test(bindings_com) +pinocchio_add_python_test(bindings_kinematic_regressor) +pinocchio_add_python_test(bindings_regressor) +pinocchio_add_python_test(bindings_dynamics) +pinocchio_add_python_test(bindings_kinematics) +pinocchio_add_python_test(bindings_rnea) +pinocchio_add_python_test(bindings_aba) +pinocchio_add_python_test(bindings_joint_algorithms) # Solvers -pinocchio_python_add_test(bindings_pgs) -pinocchio_python_add_test(bindings_admm) +pinocchio_add_python_test(bindings_pgs) +pinocchio_add_python_test(bindings_admm) # Algo derivatives -pinocchio_python_add_test(bindings_kinematics_derivatives) -pinocchio_python_add_test(bindings_frame_derivatives) -pinocchio_python_add_test(bindings_forward_dynamics_derivatives) -pinocchio_python_add_test(bindings_inverse_dynamics_derivatives) -pinocchio_python_add_test(bindings_centroidal_dynamics_derivatives) -pinocchio_python_add_test(bindings_com_velocity_derivatives) +pinocchio_add_python_test(bindings_kinematics_derivatives) +pinocchio_add_python_test(bindings_frame_derivatives) +pinocchio_add_python_test(bindings_forward_dynamics_derivatives) +pinocchio_add_python_test(bindings_inverse_dynamics_derivatives) +pinocchio_add_python_test(bindings_centroidal_dynamics_derivatives) +pinocchio_add_python_test(bindings_com_velocity_derivatives) # Parsers -pinocchio_python_add_test(bindings_sample_models) -pinocchio_python_add_test(bindings_mjcf) -pinocchio_python_add_test(bindings_model_graph) +pinocchio_add_python_test(bindings_sample_models) +pinocchio_add_python_test(bindings_mjcf) +pinocchio_add_python_test(bindings_model_graph) # Others -pinocchio_python_add_test(robot_wrapper) -pinocchio_python_add_test(utils) -pinocchio_python_add_test(serialization) -pinocchio_python_add_test(version) -pinocchio_python_add_test(bindings_std_vector) -pinocchio_python_add_test(bindings_std_map) +pinocchio_add_python_test(robot_wrapper) +pinocchio_add_python_test(utils) +pinocchio_add_python_test(serialization) +pinocchio_add_python_test(version) +pinocchio_add_python_test(bindings_std_vector) +pinocchio_add_python_test(bindings_std_map) if(BUILD_WITH_COLLISION_SUPPORT) - pinocchio_python_add_test(bindings_geometry_object) - pinocchio_python_add_test(bindings_coal_transform) - pinocchio_python_add_test(bindings_constraints) - pinocchio_python_add_test(bindings_lcaba) + pinocchio_add_python_test(bindings_geometry_object) + pinocchio_add_python_test(bindings_coal_transform) + pinocchio_add_python_test(bindings_constraints) + pinocchio_add_python_test(bindings_lcaba) endif() if(urdfdom_FOUND) - pinocchio_python_add_test(bindings_urdf) - pinocchio_python_add_test(bindings_geometry_model_urdf) - pinocchio_python_add_test(bindings_contact_inverse_dynamics) - pinocchio_python_add_test(bindings_viser_visualizer) + pinocchio_add_python_test(bindings_urdf) + pinocchio_add_python_test(bindings_geometry_model_urdf) + pinocchio_add_python_test(bindings_contact_inverse_dynamics) + pinocchio_add_python_test(bindings_viser_visualizer) endif(urdfdom_FOUND) file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/serialization-data") # handle casadi if(BUILD_WITH_CASADI_SUPPORT) - pinocchio_python_add_test(bindings_casadi_main_algo) - pinocchio_python_add_test(bindings_casadi_explog) + pinocchio_add_python_test(bindings_casadi_main_algo) + pinocchio_add_python_test(bindings_casadi_explog) add_dependencies(pinocchio-tests pinocchio_pywrap_casadi) endif() @@ -201,7 +198,7 @@ endfunction() # TODO @jorisv: reenable these on windows when we normalize paths to lib/bin like on eigenpy if(NOT WIN32 AND PINOCCHIO_BUILD_VISUALIZERS) pinocchio_add_python_cpp_module(bindings_visualizer PIN_TARGETS pinocchio_visualizers) - pinocchio_python_add_test(bindings_visualizer) + pinocchio_add_python_test(bindings_visualizer) set_tests_properties( "pinocchio-test-py-bindings_visualizer" PROPERTIES diff --git a/unittest/python/pybind11/CMakeLists.txt b/unittest/python/pybind11/CMakeLists.txt index 21b8bee380..f3e9f25895 100644 --- a/unittest/python/pybind11/CMakeLists.txt +++ b/unittest/python/pybind11/CMakeLists.txt @@ -48,7 +48,7 @@ if(WIN32) target_compile_definitions(cpp2pybind11 PRIVATE -DNOMINMAX) endif(WIN32) -pinocchio_python_add_test(test-cpp2pybind11) +pinocchio_add_python_test(test-cpp2pybind11) set_tests_properties( "pinocchio-test-py-test-cpp2pybind11" PROPERTIES From de2d4b0c6bf9de941449c5d161f098f169225cc5 Mon Sep 17 00:00:00 2001 From: Jeanne Matheron Date: Tue, 11 Aug 2026 17:42:54 +0200 Subject: [PATCH 32/32] lint: format cmake --- CMakeLists.txt | 10 ++-- benchmark/CMakeLists.txt | 54 +++++++++++---------- bindings/python/CMakeLists.txt | 5 +- cmake/find-external/GMP/FindGMP.cmake | 25 ++++++++-- cmake/find-external/MPFR/FindMPFR.cmake | 3 +- examples/CMakeLists.txt | 64 ++++++++++++++----------- 6 files changed, 95 insertions(+), 66 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ccd4f26fa..47f7292b06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,7 +100,7 @@ if(BUILD_WITH_URDF_SUPPORT) endif() if(BUILD_WITH_SDF_SUPPORT) -# the following lines allows to link to SDFormat, indeed SDFormat has its version number in its target until version ==16 + # the following lines allows to link to SDFormat, indeed SDFormat has its version number in its target until version ==16 set(SDF_VERSIONS "15" "13" "12") list(APPEND SDF_VERSIONS "") foreach(version IN LISTS SDF_VERSIONS) @@ -165,8 +165,8 @@ string( if(BUILD_WITH_CASADI_SUPPORT) jrl_find_package(casadi REQUIRED) - # Normalize CasADi link target across versions. - #Prefer imported target (casadi::casadi), then legacy target (casadi) + # Normalize CasADi link target across versions. + #Prefer imported target (casadi::casadi), then legacy target (casadi) if(NOT TARGET casadi::casadi AND TARGET casadi) add_library(casadi::casadi ALIAS casadi) endif() @@ -1008,8 +1008,8 @@ if(BUILD_WITH_CODEGEN_SUPPORT) target_link_libraries( pinocchio_cppadcg_headers - INTERFACE - pinocchio_default_headers cppadcg::cppadcg) + INTERFACE pinocchio_default_headers cppadcg::cppadcg + ) target_compile_definitions( pinocchio_cppadcg_headers diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index 7e690ad5b0..1a7ca9b15c 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -20,25 +20,24 @@ function(pinocchio_add_benchmark benchmark_name) set(target_name "pinocchio-benchmark-${benchmark_name}") add_executable(${target_name} ${benchmark_name}.cpp) - target_link_libraries(${target_name} - PRIVATE pinocchio benchmark::benchmark pinocchio-benchmarks-resources) - + target_link_libraries( + ${target_name} + PRIVATE pinocchio benchmark::benchmark pinocchio-benchmarks-resources + ) + jrl_target_set_default_compile_options(${target_name} PRIVATE) jrl_target_enforce_msvc_conformance(${target_name} PRIVATE) add_dependencies(pinocchio-benchmarks ${target_name}) endfunction() - - # modernize_target_link_libraries( - # ${bench_name} - # SCOPE PRIVATE - # TARGETS Boost::filesystem - # LIBRARIES ${Boost_FILESYSTEM_LIBRARY} - # INCLUDE_DIRS ${Boost_INCLUDE_DIRS} - # ) - - +# modernize_target_link_libraries( +# ${bench_name} +# SCOPE PRIVATE +# TARGETS Boost::filesystem +# LIBRARIES ${Boost_FILESYSTEM_LIBRARY} +# INCLUDE_DIRS ${Boost_INCLUDE_DIRS} +# ) pinocchio_add_benchmark(spatial-operations) # timings-eigen @@ -46,7 +45,7 @@ pinocchio_add_benchmark(timings-eigen) # timings-linalg pinocchio_add_benchmark(timings-linalg-inverse) -if (BUILD_WITH_PARSERS_SUPPORT) +if(BUILD_WITH_PARSERS_SUPPORT) # timings pinocchio_add_benchmark(timings) # timings cholesky @@ -68,11 +67,14 @@ if (BUILD_WITH_PARSERS_SUPPORT) if(BUILD_WITH_CODEGEN_SUPPORT) macro(pinocchio_add_cppadcg_benchmark benchmark_name) pinocchio_add_benchmark(${benchmark_name}) - target_link_libraries(pinocchio-benchmark-${benchmark_name} - PRIVATE pinocchio_cppadcg) - target_compile_definitions(pinocchio-benchmark-${benchmark_name} + target_link_libraries( + pinocchio-benchmark-${benchmark_name} + PRIVATE pinocchio_cppadcg + ) + target_compile_definitions( + pinocchio-benchmark-${benchmark_name} PRIVATE PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" - ) + ) endmacro() pinocchio_add_cppadcg_benchmark(timings-cg) endif() @@ -89,15 +91,17 @@ if (BUILD_WITH_PARSERS_SUPPORT) #cppad if(BUILD_WITH_AUTODIFF_SUPPORT) - macro(pinocchio_add_cppad_benchmark benchmark_name) + macro(pinocchio_add_cppad_benchmark benchmark_name) pinocchio_add_benchmark(${benchmark_name}) - target_link_libraries(pinocchio-benchmark-${benchmark_name} - PRIVATE pinocchio_cppad) - target_compile_definitions(pinocchio-benchmark-${benchmark_name} + target_link_libraries( + pinocchio-benchmark-${benchmark_name} + PRIVATE pinocchio_cppad + ) + target_compile_definitions( + pinocchio-benchmark-${benchmark_name} PRIVATE PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" - ) - endmacro() + ) + endmacro() pinocchio_add_cppad_benchmark(timings-cppad-jit) endif() endif() - diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt index f24f4b8411..d6d78aa847 100644 --- a/bindings/python/CMakeLists.txt +++ b/bindings/python/CMakeLists.txt @@ -423,7 +423,10 @@ jrl_python_compile_all(DIRECTORY # Install binding in the right location jrl_python_compute_install_dir(python_install_dir) -install(TARGETS pinocchio_pywrap_default DESTINATION ${python_install_dir}/pinocchio) +install( + TARGETS pinocchio_pywrap_default + DESTINATION ${python_install_dir}/pinocchio +) install( DIRECTORY ${CMAKE_BINARY_DIR}/lib/site-packages/pinocchio diff --git a/cmake/find-external/GMP/FindGMP.cmake b/cmake/find-external/GMP/FindGMP.cmake index d5a9f511c7..21be17af42 100644 --- a/cmake/find-external/GMP/FindGMP.cmake +++ b/cmake/find-external/GMP/FindGMP.cmake @@ -11,20 +11,35 @@ if(GMP_INCLUDE_DIR AND NOT TARGET GMP::GMP) # `#define __GNU_MP_VERSION_MINOR 3` # `#define __GNU_MP_VERSION_PATCHLEVEL 0` file(READ ${GMP_INCLUDE_DIR}/gmp.h gmp_h) - string(REGEX MATCH "#define[ \t]__GNU_MP_VERSION[ \t]+([0-9]+)" _match_major ${gmp_h}) + string( + REGEX MATCH "#define[ \t]__GNU_MP_VERSION[ \t]+([0-9]+)" + _match_major + ${gmp_h} + ) set(GMP_VERSION_MAJOR ${CMAKE_MATCH_1}) - string(REGEX MATCH "#define[ \t]__GNU_MP_VERSION_MINOR[ \t]+([0-9]+)" _match_major ${gmp_h}) + string( + REGEX MATCH "#define[ \t]__GNU_MP_VERSION_MINOR[ \t]+([0-9]+)" + _match_major + ${gmp_h} + ) set(GMP_VERSION_MINOR ${CMAKE_MATCH_1}) - string(REGEX MATCH "#define[ \t]__GNU_MP_VERSION_PATCHLEVEL[ \t]+([0-9]+)" _match_major ${gmp_h}) + string( + REGEX MATCH "#define[ \t]__GNU_MP_VERSION_PATCHLEVEL[ \t]+([0-9]+)" + _match_major + ${gmp_h} + ) set(GMP_VERSION_MICRO ${CMAKE_MATCH_1}) - set(GMP_VERSION ${GMP_VERSION_MAJOR}.${GMP_VERSION_MINOR}.${GMP_VERSION_MICRO}) + set(GMP_VERSION + ${GMP_VERSION_MAJOR}.${GMP_VERSION_MINOR}.${GMP_VERSION_MICRO} + ) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args( GMP REQUIRED_VARS GMP_LIBRARY GMP_INCLUDE_DIR - VERSION_VAR GMP_VERSION) + VERSION_VAR GMP_VERSION +) if(GMP_FOUND AND NOT TARGET GMP::GMP) add_library(GMP::GMP UNKNOWN IMPORTED) diff --git a/cmake/find-external/MPFR/FindMPFR.cmake b/cmake/find-external/MPFR/FindMPFR.cmake index e13201baa1..ace6e1b7e8 100644 --- a/cmake/find-external/MPFR/FindMPFR.cmake +++ b/cmake/find-external/MPFR/FindMPFR.cmake @@ -36,7 +36,8 @@ include(FindPackageHandleStandardArgs) find_package_handle_standard_args( MPFR REQUIRED_VARS MPFR_LIBRARY MPFR_INCLUDE - VERSION_VAR MPFR_VERSION) + VERSION_VAR MPFR_VERSION +) # mpfr depend of gmp find_package(GMP REQUIRED) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 8b60c57e82..858a486137 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -4,7 +4,6 @@ add_custom_target(pinocchio-examples) - function(pinocchio_add_cpp_example example_name) set(target_name "pinocchio-example-cpp-${example_name}") pinocchio_add_cpp_test_or_example(${target_name} ${example_name}) @@ -69,7 +68,10 @@ if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) if(BUILD_WITH_CASADI_SUPPORT) function(pinocchio_add_casadi_example name) pinocchio_add_cpp_example(${name}) - add_dependencies(pinocchio-example-cpp-casadi pinocchio-example-cpp-${name}) + add_dependencies( + pinocchio-example-cpp-casadi + pinocchio-example-cpp-${name} + ) target_compile_definitions( pinocchio-example-cpp-${name} PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" @@ -93,7 +95,10 @@ if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) if(BUILD_WITH_AUTODIFF_SUPPORT) function(pinocchio_add_cppad_example name) pinocchio_add_cpp_example(${name}) - add_dependencies(pinocchio-example-cpp-cppad pinocchio-example-cpp-${name}) + add_dependencies( + pinocchio-example-cpp-cppad + pinocchio-example-cpp-${name} + ) target_link_libraries( pinocchio-example-cpp-${name} PRIVATE pinocchio_cppad_headers @@ -110,17 +115,19 @@ if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) if(BUILD_WITH_CODEGEN_SUPPORT AND BUILD_WITH_URDF_SUPPORT) function(pinocchio_add_cppadcg_example name) pinocchio_add_cpp_example(${name}) - add_dependencies(pinocchio-example-cpp-cppadcg pinocchio-example-cpp-${name}) + add_dependencies( + pinocchio-example-cpp-cppadcg + pinocchio-example-cpp-${name} + ) target_compile_definitions( pinocchio-example-cpp-${name} PUBLIC PINOCCHIO_CXX_COMPILER=\"${CMAKE_CXX_COMPILER}\" ) - + target_link_libraries( pinocchio-example-cpp-${name} PRIVATE pinocchio_cppadcg_headers ) - endfunction() add_custom_target(pinocchio-example-cpp-cppadcg) set_target_properties( @@ -128,41 +135,40 @@ if(NOT BUILD_STANDALONE_PYTHON_INTERFACE) PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD True ) pinocchio_add_cppadcg_example(codegen-rnea) - pinocchio_add_cppadcg_example(codegen-crba) + pinocchio_add_cppadcg_example(codegen-crba) endif() endif() if(BUILD_PYTHON_INTERFACE) - pinocchio_add_python_example(inverse-kinematics) - pinocchio_add_python_example(inverse-kinematics-3d) - pinocchio_add_python_example(overview-simple) - pinocchio_add_python_example(kinematics-derivatives) - pinocchio_add_python_example(forward-dynamics-derivatives) - pinocchio_add_python_example(inverse-dynamics-derivatives) - pinocchio_add_python_example(model-graph) - pinocchio_add_python_example(model-configuration-converter) - pinocchio_add_python_example(ellipsoid-joint-kinematics) - pinocchio_add_python_example(admm-constraint-solver) - + pinocchio_add_python_example(inverse-kinematics) + pinocchio_add_python_example(inverse-kinematics-3d) + pinocchio_add_python_example(overview-simple) + pinocchio_add_python_example(kinematics-derivatives) + pinocchio_add_python_example(forward-dynamics-derivatives) + pinocchio_add_python_example(inverse-dynamics-derivatives) + pinocchio_add_python_example(model-graph) + pinocchio_add_python_example(model-configuration-converter) + pinocchio_add_python_example(ellipsoid-joint-kinematics) + pinocchio_add_python_example(admm-constraint-solver) if(BUILD_WITH_URDF_SUPPORT) - pinocchio_add_python_example(overview-urdf) - pinocchio_add_python_example(gepetto-viewer) - pinocchio_add_python_example(build-reduced-model) - pinocchio_add_python_example(robot-wrapper-viewer) - pinocchio_add_python_example(geometry-models) - pinocchio_add_python_example(constraint-cholesky) - + pinocchio_add_python_example(overview-urdf) + pinocchio_add_python_example(gepetto-viewer) + pinocchio_add_python_example(build-reduced-model) + pinocchio_add_python_example(robot-wrapper-viewer) + pinocchio_add_python_example(geometry-models) + pinocchio_add_python_example(constraint-cholesky) + if(BUILD_ADVANCED_TESTING) # Set as advanced testing because it need a new # example_robot_data release (> 4.4) # and because computation is long in Debug - pinocchio_add_python_example(g1-constraint-simulation) + pinocchio_add_python_example(g1-constraint-simulation) endif() endif() - if( BUILD_WITH_CASADI_SUPPORT) + if(BUILD_WITH_CASADI_SUPPORT) pinocchio_add_python_example(quadrotor-ocp) endif() @@ -181,7 +187,7 @@ if(BUILD_PYTHON_INTERFACE) pinocchio_add_python_example(simulation-closed-kinematic-chains) pinocchio_add_python_example(simulation-lcaba) pinocchio_add_python_example(model-graph-geometry) - + if(BUILD_WITH_URDF_SUPPORT) pinocchio_add_python_example(meshcat-viewer) pinocchio_add_python_example(meshcat-viewer-dae) @@ -194,7 +200,7 @@ if(BUILD_PYTHON_INTERFACE) pinocchio_add_python_example(static-contact-dynamics) endif() - if( BUILD_WITH_CASADI_SUPPORT) + if(BUILD_WITH_CASADI_SUPPORT) pinocchio_add_python_example(cartpole) endif() endif()