From 4a218cf5ab2a29bf7b9ae399a99cdd2de8257e61 Mon Sep 17 00:00:00 2001 From: Mansard <nmansard@laas.fr> Date: Fri, 14 Nov 2014 15:13:54 +0100 Subject: [PATCH] Added conditionnal compilation of urdf and python. Added precompilation of pyc file. --- CMakeLists.txt | 125 ++++++++++++++++++++++++++----------------------- 1 file changed, 67 insertions(+), 58 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 616402d50..adc38b069 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,18 +27,16 @@ ELSE(WIN32) SET(LINK create_symlink) ENDIF(WIN32) +# --- OPTIONS ---------------------------------------- +OPTION (BUILD_BENCHMARK "Build the benchmarks" OFF) # ---------------------------------------------------- # --- DEPENDANCIES ----------------------------------- # ---------------------------------------------------- -ADD_REQUIRED_DEPENDENCY("eigenpy >= v1.2.0") -ADD_REQUIRED_DEPENDENCY("urdfdom >= v0.3.0") -ADD_REQUIRED_DEPENDENCY("eigen3 >= v3.0.5") - -# ---------------------------------------------------- -# --- BENCHMARKS ------------------------------------- -# ---------------------------------------------------- -OPTION (BUILD_BENCHMARK "Build the benchmarks" OFF) +ADD_REQUIRED_DEPENDENCY("eigen3 >= 3.0.5") +ADD_OPTIONAL_DEPENDENCY("eigenpy >= 1.2.0") +ADD_OPTIONAL_DEPENDENCY("metapod >= 1.0.7") +ADD_OPTIONAL_DEPENDENCY("urdfdom >= 0.2.10") # ---------------------------------------------------- # --- INCLUDE ---------------------------------------- @@ -66,7 +64,6 @@ SET(HEADERS multibody/joint/joint-generic.hpp multibody/model.hpp multibody/visitor.hpp - multibody/parser/urdf.hpp multibody/parser/sample-models.hpp algorithm/rnea.hpp algorithm/crba.hpp @@ -87,6 +84,10 @@ SET(HEADERS python/parsers.hpp ) +IF(URDFDOM_FOUND) + LIST(APPEND HEADERS multibody/parser/urdf.hpp) +ENDIF(URDFDOM_FOUND) + MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio") MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/math") MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/spatial") @@ -111,60 +112,68 @@ ENDFOREACH(header) # ---------------------------------------------------- # --- PYTHON ----------------------------------------- # ---------------------------------------------------- -FINDPYTHON() -MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}") - -# --- COMPILE WRAPPER -SET(PYWRAP ${PROJECT_NAME}_pywrap) -ADD_LIBRARY(${PYWRAP} SHARED src/python/module.cpp src/python/python.cpp) -PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} eigenpy) -PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} urdfdom) -TARGET_LINK_LIBRARIES(${PYWRAP} ${Boost_LIBRARIES} eigenpy) -SET_TARGET_PROPERTIES(${PYWRAP} PROPERTIES - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/python/${PROJECT_NAME}") -INSTALL(FILES - "${CMAKE_BINARY_DIR}/lib/python/${PROJECT_NAME}/lib${PYWRAP}.so" - DESTINATION ${PYTHON_SITELIB}/${PROJECT_NAME}) - -# --- INSTALL SCRIPTS -SET(PYTHON_FILES - python/__init__.py - python/utils.py - python/robot_wrapper.py - python/rpy.py - python/explog.py -) -FOREACH(python ${PYTHON_FILES}) - GET_FILENAME_COMPONENT(pythonFile ${python} NAME) - EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E ${LINK} - ${${PROJECT_NAME}_SOURCE_DIR}/src/${python} - ${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}) - - # Tag pyc file as generated. - SET_SOURCE_FILES_PROPERTIES( - "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c" - PROPERTIES GENERATED TRUE) - - EXECUTE_PROCESS(COMMAND - ${PYTHON_EXECUTABLE} -m py_compile - ${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile} ) - - # Clean generated files. - SET_PROPERTY( - DIRECTORY APPEND PROPERTY - ADDITIONAL_MAKE_CLEAN_FILES - "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c") +IF(EIGENPY_FOUND) + FINDPYTHON() + MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}") + + # --- COMPILE WRAPPER + SET(PYWRAP ${PROJECT_NAME}_pywrap) + ADD_LIBRARY(${PYWRAP} SHARED src/python/module.cpp src/python/python.cpp) + PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} eigenpy) + IF(URDFDOM_FOUND) + PKG_CONFIG_USE_DEPENDENCY(${PYWRAP} urdfdom) + + ENDIF(URDFDOM_FOUND) + TARGET_LINK_LIBRARIES(${PYWRAP} ${Boost_LIBRARIES} eigenpy) + SET_TARGET_PROPERTIES(${PYWRAP} PROPERTIES + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/python/${PROJECT_NAME}") INSTALL(FILES - "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}" - "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c" + "${CMAKE_BINARY_DIR}/lib/python/${PROJECT_NAME}/lib${PYWRAP}.so" DESTINATION ${PYTHON_SITELIB}/${PROJECT_NAME}) -ENDFOREACH(python) - + + # --- INSTALL SCRIPTS + SET(PYTHON_FILES + python/__init__.py + python/utils.py + python/robot_wrapper.py + python/rpy.py + python/explog.py + ) + FOREACH(python ${PYTHON_FILES}) + GET_FILENAME_COMPONENT(pythonFile ${python} NAME) + EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E ${LINK} + ${${PROJECT_NAME}_SOURCE_DIR}/src/${python} + ${${PROJECT_NAME}_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}) + + # Tag pyc file as generated. + SET_SOURCE_FILES_PROPERTIES( + "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c" + PROPERTIES GENERATED TRUE) + + EXECUTE_PROCESS(COMMAND + ${PYTHON_EXECUTABLE} -m py_compile + ${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile} ) + + # Clean generated files. + SET_PROPERTY( + DIRECTORY APPEND PROPERTY + ADDITIONAL_MAKE_CLEAN_FILES + "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c") + + INSTALL(FILES + "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}" + "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}c" + DESTINATION ${PYTHON_SITELIB}/${PROJECT_NAME}) + ENDFOREACH(python) +ENDIF(EIGENPY_FOUND) + +# --- EXECUTABLES -------------------------------------------------------------- +# --- EXECUTABLES -------------------------------------------------------------- +# --- EXECUTABLES -------------------------------------------------------------- ADD_SUBDIRECTORY(unittest) - IF (BUILD_BENCHMARK) - ADD_SUBDIRECTORY (benchmark) + ADD_SUBDIRECTORY (benchmark) ENDIF (BUILD_BENCHMARK) SETUP_PROJECT_FINALIZE() -- GitLab