diff --git a/CMakeLists.txt b/CMakeLists.txt index 864ba661435373afb6da8f785d293c95812c5067..322789c2adea6bec228872de4e325e2ea9247982 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,92 +1,96 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.1) +cmake_minimum_required(VERSION 3.1) # Project properties -SET(PROJECT_NAME hpp-centroidal-dynamics) -SET(PROJECT_DESCRIPTION - "Utility classes for testing (robust) equilibrium of a system in contact with the environment, and other centroidal dynamics methods." - ) +set(PROJECT_NAME hpp-centroidal-dynamics) +set(PROJECT_DESCRIPTION + "Utility classes for testing (robust) equilibrium of a system in contact with the environment, and other centroidal dynamics methods." +) # Project options -OPTION(BUILD_PYTHON_INTERFACE "Build the python bindings" ON) +option(BUILD_PYTHON_INTERFACE "Build the python bindings" ON) # Project configuration -SET(PROJECT_USE_CMAKE_EXPORT TRUE) -SET(CUSTOM_HEADER_DIR "hpp/centroidal-dynamics") -SET(CXX_DISABLE_WERROR TRUE) +set(PROJECT_USE_CMAKE_EXPORT TRUE) +set(CUSTOM_HEADER_DIR "hpp/centroidal-dynamics") +set(CXX_DISABLE_WERROR TRUE) # JRL-cmakemodule setup -INCLUDE(cmake/hpp.cmake) -INCLUDE(cmake/boost.cmake) +include(cmake/hpp.cmake) +include(cmake/boost.cmake) # Project definition -COMPUTE_PROJECT_ARGS(PROJECT_ARGS LANGUAGES CXX) -PROJECT(${PROJECT_NAME} ${PROJECT_ARGS}) +compute_project_args(PROJECT_ARGS LANGUAGES CXX) +project(${PROJECT_NAME} ${PROJECT_ARGS}) -IF(BUILD_PYTHON_INTERFACE) - STRING(REGEX REPLACE "-" "_" PY_NAME ${PROJECT_NAME}) - ADD_PROJECT_DEPENDENCY(eigenpy 2.7.12 REQUIRED) -ENDIF(BUILD_PYTHON_INTERFACE) +if(BUILD_PYTHON_INTERFACE) + string(REGEX REPLACE "-" "_" PY_NAME ${PROJECT_NAME}) + add_project_dependency(eigenpy 2.7.12 REQUIRED) +endif(BUILD_PYTHON_INTERFACE) # Project dependencies -ADD_PROJECT_DEPENDENCY(Eigen3 REQUIRED) +add_project_dependency(Eigen3 REQUIRED) set(CMAKE_MODULE_PATH - ${PROJECT_SOURCE_DIR}/cmake/find-external/CDD - ${PROJECT_SOURCE_DIR}/cmake/find-external/CLP - ${PROJECT_SOURCE_DIR}/cmake/find-external/qpOASES - ) + ${PROJECT_SOURCE_DIR}/cmake/find-external/CDD + ${PROJECT_SOURCE_DIR}/cmake/find-external/CLP + ${PROJECT_SOURCE_DIR}/cmake/find-external/qpOASES) find_package(CDD REQUIRED) find_package(qpOASES REQUIRED) find_package(CLP) -IF("${CLP_LIBRARY}" STREQUAL "CLP_LIBRARY-NOTFOUND") - MESSAGE(STATUS "CLP_LIBRARY equal to CLP_LIBRARY-NOTFOUND so I assume CLP was not found ") -ELSE() +if("${CLP_LIBRARY}" STREQUAL "CLP_LIBRARY-NOTFOUND") + message( + STATUS + "CLP_LIBRARY equal to CLP_LIBRARY-NOTFOUND so I assume CLP was not found " + ) +else() message(STATUS "CLP library found, defining macro CLP_FOUND") add_definitions(-DCLP_FOUND) -ENDIF() +endif() # Main Library -SET(${PROJECT_NAME}_HEADERS - include/${CUSTOM_HEADER_DIR}/local_config.hh - include/${CUSTOM_HEADER_DIR}/util.hh - include/${CUSTOM_HEADER_DIR}/logger.hh - include/${CUSTOM_HEADER_DIR}/solver_LP_abstract.hh - include/${CUSTOM_HEADER_DIR}/solver_LP_qpoases.hh - include/${CUSTOM_HEADER_DIR}/solver_LP_clp.hh - include/${CUSTOM_HEADER_DIR}/centroidal_dynamics.hh - include/${CUSTOM_HEADER_DIR}/stop-watch.hh - ) - -SET(${PROJECT_NAME}_SOURCES - src/centroidal_dynamics.cpp - src/solver_LP_abstract.cpp - src/solver_LP_qpoases.cpp - src/solver_LP_clp.cpp - src/util.cpp - src/logger.cpp - src/stop-watch.cpp - ) - -ADD_LIBRARY(${PROJECT_NAME} SHARED - ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS}) -TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC $<INSTALL_INTERFACE:include>) -TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PUBLIC - ${EIGEN3_INCLUDE_DIR} ${CDD_INCLUDE_DIRS} ${qpOASES_INCLUDE_DIRS}) -TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${CDD_LIBRARIES} ${qpOASES_LIBRARY}) - -IF(CLP_FOUND) - TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PUBLIC "${CLP_INCLUDE_DIR}") - TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${CLP_LIBRARIES} - /usr/lib/libCoinUtils.so) -ENDIF(CLP_FOUND) - -INSTALL(TARGETS ${PROJECT_NAME} EXPORT ${TARGETS_EXPORT_NAME} DESTINATION lib) - -ADD_SUBDIRECTORY(test) -IF(BUILD_PYTHON_INTERFACE) - ADD_SUBDIRECTORY(python) -ENDIF(BUILD_PYTHON_INTERFACE) - -INSTALL(FILES package.xml DESTINATION share/${PROJECT_NAME}) +set(${PROJECT_NAME}_HEADERS + include/${CUSTOM_HEADER_DIR}/local_config.hh + include/${CUSTOM_HEADER_DIR}/util.hh + include/${CUSTOM_HEADER_DIR}/logger.hh + include/${CUSTOM_HEADER_DIR}/solver_LP_abstract.hh + include/${CUSTOM_HEADER_DIR}/solver_LP_qpoases.hh + include/${CUSTOM_HEADER_DIR}/solver_LP_clp.hh + include/${CUSTOM_HEADER_DIR}/centroidal_dynamics.hh + include/${CUSTOM_HEADER_DIR}/stop-watch.hh) + +set(${PROJECT_NAME}_SOURCES + src/centroidal_dynamics.cpp + src/solver_LP_abstract.cpp + src/solver_LP_qpoases.cpp + src/solver_LP_clp.cpp + src/util.cpp + src/logger.cpp + src/stop-watch.cpp) + +add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES} + ${${PROJECT_NAME}_HEADERS}) +target_include_directories(${PROJECT_NAME} PUBLIC $<INSTALL_INTERFACE:include>) +target_include_directories( + ${PROJECT_NAME} SYSTEM PUBLIC ${EIGEN3_INCLUDE_DIR} ${CDD_INCLUDE_DIRS} + ${qpOASES_INCLUDE_DIRS}) +target_link_libraries(${PROJECT_NAME} ${CDD_LIBRARIES} ${qpOASES_LIBRARY}) + +if(CLP_FOUND) + target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC "${CLP_INCLUDE_DIR}") + target_link_libraries(${PROJECT_NAME} ${CLP_LIBRARIES} + /usr/lib/libCoinUtils.so) +endif(CLP_FOUND) + +install( + TARGETS ${PROJECT_NAME} + EXPORT ${TARGETS_EXPORT_NAME} + DESTINATION lib) + +add_subdirectory(test) +if(BUILD_PYTHON_INTERFACE) + add_subdirectory(python) +endif(BUILD_PYTHON_INTERFACE) + +install(FILES package.xml DESTINATION share/${PROJECT_NAME}) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 4903df9907dc704c95dd8a4a660456e82eb5a659..16dfe56823d44bd5fbb842084296c80b4d37588c 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -1,14 +1,15 @@ # Define the wrapper library that wraps our library -ADD_LIBRARY(${PY_NAME} SHARED centroidal_dynamics_python.cpp) -TARGET_LINK_LIBRARIES(${PY_NAME} ${PROJECT_NAME} eigenpy::eigenpy) +add_library(${PY_NAME} SHARED centroidal_dynamics_python.cpp) +target_link_libraries(${PY_NAME} ${PROJECT_NAME} eigenpy::eigenpy) # don't prepend wrapper library name with lib -SET_TARGET_PROPERTIES(${PY_NAME} PROPERTIES PREFIX "") +set_target_properties(${PY_NAME} PROPERTIES PREFIX "") -IF(APPLE) +if(APPLE) # We need to change the extension for python bindings - SET_TARGET_PROPERTIES(${PY_NAME} PROPERTIES SUFFIX ".so") -ENDIF(APPLE) + set_target_properties(${PY_NAME} PROPERTIES SUFFIX ".so") +endif(APPLE) -INSTALL(TARGETS ${PY_NAME} DESTINATION ${PYTHON_SITELIB}) +install(TARGETS ${PY_NAME} DESTINATION ${PYTHON_SITELIB}) -ADD_PYTHON_UNIT_TEST("python-centroidal-dynamics" "python/test/binding_tests.py" "python") +add_python_unit_test("python-centroidal-dynamics" + "python/test/binding_tests.py" "python") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 6883f8ed9d207bccb2cd9da024e2e40cf929e308..0bb93fcd159bb29895164f089fd40525432ef339 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,11 +1,12 @@ -ADD_UNIT_TEST(static-equilibrium test_static_equilibrium.cpp) -TARGET_LINK_LIBRARIES(static-equilibrium ${PROJECT_NAME}) +add_unit_test(static-equilibrium test_static_equilibrium.cpp) +target_link_libraries(static-equilibrium ${PROJECT_NAME}) -ADD_UNIT_TEST(lp-solvers test_LP_solvers.cpp) -TARGET_LINK_LIBRARIES(lp-solvers ${PROJECT_NAME}) +add_unit_test(lp-solvers test_LP_solvers.cpp) +target_link_libraries(lp-solvers ${PROJECT_NAME}) -IF(NOT ${PROJECT_SOURCE_DIR} STREQUAL ${PROJECT_BINARY_DIR}) - ADD_CUSTOM_TARGET(link_target ALL COMMAND ${CMAKE_COMMAND} -E create_symlink - "${PROJECT_SOURCE_DIR}/test_data" - "${PROJECT_BINARY_DIR}/test_data") -ENDIF(NOT ${PROJECT_SOURCE_DIR} STREQUAL ${PROJECT_BINARY_DIR}) +if(NOT ${PROJECT_SOURCE_DIR} STREQUAL ${PROJECT_BINARY_DIR}) + add_custom_target( + link_target ALL + COMMAND ${CMAKE_COMMAND} -E create_symlink + "${PROJECT_SOURCE_DIR}/test_data" "${PROJECT_BINARY_DIR}/test_data") +endif(NOT ${PROJECT_SOURCE_DIR} STREQUAL ${PROJECT_BINARY_DIR})