Skip to content
Snippets Groups Projects
CMakeLists.txt 5.28 KiB
Newer Older
Nicolas Mansard's avatar
Nicolas Mansard committed
#
#  Copyright 2014 CNRS
#

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)

INCLUDE(cmake/base.cmake)
INCLUDE(cmake/boost.cmake)
INCLUDE(cmake/cpack.cmake)
INCLUDE(cmake/eigen.cmake)
INCLUDE(cmake/python.cmake)

SET(PROJECT_NAME pinocchio)
SET(PROJECT_DESCRIPTION "Rigid multi body dynamics algorithms")
SET(PROJECT_URL "http://github.com/stac-of-tasks/pinocchio")

# Disable -Werror on Unix for now.
SET(CXX_DISABLE_WERROR True)
SET(CMAKE_VERBOSE_MAKEFILE True)

project(${PROJECT_NAME})
SETUP_PROJECT()

IF(WIN32)
  SET(LINK copy_if_different)
ELSE(WIN32)
  SET(LINK create_symlink)
ENDIF(WIN32)


Nicolas Mansard's avatar
Nicolas Mansard committed
# ----------------------------------------------------
# --- DEPENDANCIES -----------------------------------
# ----------------------------------------------------
ADD_REQUIRED_DEPENDENCY("eigenpy >= v1.0.1")
Nicolas Mansard's avatar
Nicolas Mansard committed
ADD_REQUIRED_DEPENDENCY("urdfdom >= v0.3.0")
ADD_REQUIRED_DEPENDENCY("eigen3 >= v3.0.5")
 
# ----------------------------------------------------
# --- BENCHMARKS -------------------------------------
# ----------------------------------------------------
OPTION (BUILD_BENCHMARK "Build the benchmarks" OFF)
Nicolas Mansard's avatar
Nicolas Mansard committed

# ----------------------------------------------------
# --- INCLUDE ----------------------------------------
# ----------------------------------------------------
  spatial/symmetric3.hpp
Nicolas Mansard's avatar
Nicolas Mansard committed
  spatial/se3.hpp
  spatial/motion.hpp
  spatial/force.hpp
  spatial/inertia.hpp
  spatial/fwd.hpp
  spatial/skew.hpp
  spatial/act-on-set.hpp
Nicolas Mansard's avatar
Nicolas Mansard committed
  multibody/constraint.hpp
  multibody/force-set.hpp
Nicolas Mansard's avatar
Nicolas Mansard committed
  multibody/joint.hpp
  multibody/joint/joint-base.hpp
  multibody/joint/joint-revolute.hpp
  multibody/joint/joint-free-flyer.hpp
  multibody/joint/joint-variant.hpp
Nicolas Mansard's avatar
Nicolas Mansard committed
  multibody/model.hpp
  multibody/parser/urdf.hpp
  multibody/parser/sample-models.hpp
  algorithm/rnea.hpp
  algorithm/jacobian.hpp
Nicolas Mansard's avatar
Nicolas Mansard committed
  algorithm/cholesky.hpp
Nicolas Mansard's avatar
Nicolas Mansard committed
  algorithm/center-of-mass.hpp
  python/eigen_container.hpp
  python/handler.hpp
  python/python.hpp
  python/se3.hpp
  python/force.hpp
  python/motion.hpp
  python/inertia.hpp
  python/model.hpp
  python/data.hpp
Nicolas Mansard's avatar
Nicolas Mansard committed
)

MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio")
MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/math")
Nicolas Mansard's avatar
Nicolas Mansard committed
MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/spatial")
MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/multibody")
MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/multibody/joint")
MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/multibody/parser")
Nicolas Mansard's avatar
Nicolas Mansard committed
MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/tools")
MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/algorithm")
MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/include/pinocchio/python")
Nicolas Mansard's avatar
Nicolas Mansard committed

FOREACH(header ${HEADERS})
Nicolas Mansard's avatar
Nicolas Mansard committed
  GET_FILENAME_COMPONENT(headerName ${header} NAME)
  GET_FILENAME_COMPONENT(headerPath ${header} PATH)
  EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E ${LINK}
    ${${PROJECT_NAME}_SOURCE_DIR}/src/${header}
    ${${PROJECT_NAME}_BINARY_DIR}/include/${PROJECT_NAME}/${header})
  INSTALL(FILES ${${PROJECT_NAME}_SOURCE_DIR}/src/${header}
	  DESTINATION ${CMAKE_INSTALL_PREFIX}/include/${PROJECT_NAME}/${headerPath}
Nicolas Mansard's avatar
Nicolas Mansard committed
          PERMISSIONS OWNER_READ GROUP_READ WORLD_READ OWNER_WRITE)
ENDFOREACH(header)

# ----------------------------------------------------
# --- PYTHON -----------------------------------------
Nicolas Mansard's avatar
Nicolas Mansard committed
# ----------------------------------------------------
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)
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
)
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/${pythonFile}c"
  #  PROPERTIES GENERATED TRUE)

  # Clean generated files.
  #SET_PROPERTY(
  #  DIRECTORY APPEND PROPERTY
  #  ADDITIONAL_MAKE_CLEAN_FILES
  #  "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${pythonFile}c")

  #INSTALL(CODE
  #  "EXECUTE_PROCESS(COMMAND
  #  \"${PYTHON_EXECUTABLE}\"
  #  \"-m py_compile\"
  #  \"${CMAKE_CURRENT_BINARY_DIR}/lib/python/${pythonFile}\")    ")

  INSTALL(FILES
    "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${PROJECT_NAME}/${pythonFile}"
  #  "${CMAKE_CURRENT_BINARY_DIR}/lib/python/${pythonFile}c"
    DESTINATION ${PYTHON_SITELIB}/${PROJECT_NAME})
ENDFOREACH(python)
IF (BUILD_BENCHMARK)
	ADD_SUBDIRECTORY (benchmark)
ENDIF (BUILD_BENCHMARK)
Nicolas Mansard's avatar
Nicolas Mansard committed
SETUP_PROJECT_FINALIZE()
SETUP_PROJECT_CPACK()