diff --git a/CMakeLists.txt b/CMakeLists.txt index c3aea116dc6cd11998af70a3e9c02856d0dd2111..0669950223d1f3ae7129bc95cb74ffccf77b614e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ set (Simox_BUILD_DIRECTORY ${CMAKE_BINARY_DIR} CACHE STRING "Simox build directo #set (Simox_BUILD_VirtualRobot TRUE CACHE BOOL "Build Simox VirtualRobot") set (Simox_BUILD_Saba TRUE CACHE BOOL "Build Motion Planning library") set (Simox_BUILD_GraspStudio TRUE CACHE BOOL "Build Grasp Planning library") -set (Simox_BUILD_SimDynamics FALSE CACHE BOOL "Build Dynamic Simulation") +set (Simox_BUILD_SimDynamics TRUE CACHE BOOL "Build Dynamic Simulation") INCLUDE (config.cmake) @@ -34,23 +34,25 @@ if (Simox_BUILD_GraspStudio) list (APPEND Simox_LIBRARIES GraspStudio) endif() if (Simox_BUILD_SimDynamics) - add_subdirectory(SimDynamics) - list(APPEND SIMOX_EXPORT_TARGET_LIST SimDynamics) - list (APPEND Simox_LIBRARIES SimDynamics) - if (SimDynamics_BULLET_OpenGL) - list(APPEND SIMOX_EXPORT_TARGET_LIST BulletOpenGLSupport) + find_package(Bullet QUIET) + if(BULLET_FOUND) + add_subdirectory(SimDynamics) + list(APPEND SIMOX_EXPORT_TARGET_LIST SimDynamics) + list (APPEND Simox_LIBRARIES SimDynamics) + if (SimDynamics_BULLET_OpenGL) + list(APPEND SIMOX_EXPORT_TARGET_LIST BulletOpenGLSupport) + endif() + + list (APPEND Simox_EXTERNAL_LIBRARIES ${Simox_SimDynamics_EXTERNAL_LIBRARIES}) + list (APPEND Simox_EXTERNAL_INCLUDE_DIRS ${Simox_SimDynamics_INCLUDE_DIRS}) + #MESSAGE ("Simox_EXTERNAL_LIBRARY_FLAGS::: ${Simox_EXTERNAL_LIBRARY_FLAGS} !!!!!!!!!!!!!!!!") + #MESSAGE ("Simox_SimDynamics_COMPILE_FLAGS::: ${Simox_SimDynamics_COMPILE_FLAGS} !!!!!!!!!!!!!!!!") + #list (APPEND Simox_EXTERNAL_LIBRARY_FLAGS ${Simox_SimDynamics_COMPILE_FLAGS}) + set (Simox_EXTERNAL_LIBRARY_FLAGS "${Simox_EXTERNAL_LIBRARY_FLAGS} ${Simox_SimDynamics_COMPILE_FLAGS}") + #MESSAGE ("Simox_EXTERNAL_LIBRARY_FLAGS::: ${Simox_EXTERNAL_LIBRARY_FLAGS} !!!!!!!!!!!!!!!!") + else() + message("NOT building SimDynamics since bullet was not found") endif() - - list (APPEND Simox_EXTERNAL_LIBRARIES ${Simox_SimDynamics_EXTERNAL_LIBRARIES}) - list (APPEND Simox_EXTERNAL_INCLUDE_DIRS ${Simox_SimDynamics_INCLUDE_DIRS}) - #MESSAGE ("Simox_EXTERNAL_LIBRARY_FLAGS::: ${Simox_EXTERNAL_LIBRARY_FLAGS} !!!!!!!!!!!!!!!!") - #MESSAGE ("Simox_SimDynamics_COMPILE_FLAGS::: ${Simox_SimDynamics_COMPILE_FLAGS} !!!!!!!!!!!!!!!!") - #list (APPEND Simox_EXTERNAL_LIBRARY_FLAGS ${Simox_SimDynamics_COMPILE_FLAGS}) - set (Simox_EXTERNAL_LIBRARY_FLAGS "${Simox_EXTERNAL_LIBRARY_FLAGS} ${Simox_SimDynamics_COMPILE_FLAGS}") - #MESSAGE ("Simox_EXTERNAL_LIBRARY_FLAGS::: ${Simox_EXTERNAL_LIBRARY_FLAGS} !!!!!!!!!!!!!!!!") - - - endif() MESSAGE(STATUS "** Simox_EXTERNAL_INCLUDE_DIRS:${Simox_EXTERNAL_INCLUDE_DIRS}") diff --git a/CMakeModules/BulletCheckPrecision.cmake b/CMakeModules/BulletCheckPrecision.cmake new file mode 100644 index 0000000000000000000000000000000000000000..93c99b7ada79a1e708b2743f70f688672e070158 --- /dev/null +++ b/CMakeModules/BulletCheckPrecision.cmake @@ -0,0 +1,55 @@ +macro(BulletCheckPrecision) + message(STATUS "Testing Bullet for use of double precision...") + try_compile( + _resultDouble + ${PROJECT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/CMakeModules/BulletCheckPrecision.cpp + CMAKE_FLAGS + "-DINCLUDE_DIRECTORIES:string=${BULLET_INCLUDE_DIRS}" + "-DLINK_LIBRARIES:string=${BULLET_LIBRARIES}" + "-DCMAKE_CXX_FLAGS:string=-std=c++11" + COMPILE_DEFINITIONS + "-DBT_USE_DOUBLE_PRECISION" + OUTPUT_VARIABLE _buildOutDouble + ) + if( _resultDouble ) + message(STATUS "Bullet double precision detected. Automatically defining BT_USE_DOUBLE_PRECISION") + set(BULLET_USE_SINGLE_PRECISION OFF CACHE BOOL "" FORCE) + add_definitions(-DBT_USE_DOUBLE_PRECISION) + else() + # Try it *without* -DBT_USE_DOUBLE_PRECISION to make sure it's single... + try_compile( + _resultSingle + ${PROJECT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/CMakeModules/BulletCheckPrecision.cpp + CMAKE_FLAGS + "-DINCLUDE_DIRECTORIES:string=${BULLET_INCLUDE_DIRS}" + "-DLINK_LIBRARIES:string=${BULLET_LIBRARIES}" + OUTPUT_VARIABLE _buildOutSingle + ) + if( _resultSingle ) + message(STATUS "Bullet single precision detected. Not defining BT_USE_DOUBLE_PRECISION") + set(BULLET_USE_SINGLE_PRECISION ON CACHE BOOL "" FORCE) + else() + message(ERROR "Unable to determine single or double precision.") + message(STATUS "----------------------------------") + message(STATUS "Build config for double precision:") + message(STATUS " CMAKE_FLAGS") + message(STATUS " -DINCLUDE_DIRECTORIES:string=${BULLET_INCLUDE_DIRS}") + message(STATUS " -DLINK_LIBRARIES:string=${BULLET_LIBRARIES}") + message(STATUS " -DCMAKE_CXX_FLAGS:string=-std=c++11") + message(STATUS " COMPILE_DEFINITIONS") + message(STATUS " -DBT_USE_DOUBLE_PRECISION") + message(STATUS "Build output for double precision:") + message(STATUS "${_buildOutDouble}") + message(STATUS "----------------------------------") + message(STATUS "Build config for single precision:") + message(STATUS " CMAKE_FLAGS") + message(STATUS " -DINCLUDE_DIRECTORIES:string=${BULLET_INCLUDE_DIRS}") + message(STATUS " -DLINK_LIBRARIES:string=${BULLET_LIBRARIES}") + message(STATUS "Build output for single precision:") + message(STATUS "${_buildOutSingle}") + message(FATAL_ERROR "Unable to determine single or double precision.") + endif() + endif() +endmacro() diff --git a/CMakeModules/BulletCheckPrecision.cpp b/CMakeModules/BulletCheckPrecision.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4e6fb014facd20a7cb4a91a9b4363b8daf9bcbf7 --- /dev/null +++ b/CMakeModules/BulletCheckPrecision.cpp @@ -0,0 +1,10 @@ +#pragma GCC diagnostic ignored "-Wunused-variable" +#include <btBulletCollisionCommon.h> + +int main() +{ + btVector3 vec(0.0, 1.0, 0.0); + btStaticPlaneShape(vec, 0.0); + + return 0; +} diff --git a/SimDynamics/CMakeModules/FindBullet.cmake b/CMakeModules/FindBullet.cmake similarity index 85% rename from SimDynamics/CMakeModules/FindBullet.cmake rename to CMakeModules/FindBullet.cmake index 1f0e645acfe0296e7da4db3118ad4ce8340e26ff..808658d399127c0863609a7e9d2b1d0ab28ac928 100644 --- a/SimDynamics/CMakeModules/FindBullet.cmake +++ b/CMakeModules/FindBullet.cmake @@ -3,7 +3,7 @@ # This script defines: # BULLET_FOUND, set to 1 if found # BULLET_LIBRARIES -# BULLET_INCLUDE_DIR +# BULLET_INCLUDE_DIRS # BULLET_*_LIBRARY, one for each library (for example, "BULLET_BulletCollision_LIBRARY"). # BULLET_*_LIBRARY_debug, one for each library. # BULLET_DEMOS_INCLUDE_DIR - Directory containing the Demos headers @@ -16,15 +16,15 @@ # You can also use Bullet out of a source tree by specifying BULLET_SOURCE_DIR # and BULLET_BUILD_DIR (in environment or CMake). - SET( BULLET_ROOT "" CACHE PATH "Bullet install dir, parent of both header files and binaries." ) SET( BULLET_BUILD_DIR "" CACHE PATH "Parent directory of Bullet binary file directories such as src/BulletCollision." ) SET( BULLET_SOURCE_DIR "" CACHE PATH "Parent directory of Bullet header file directories such as src or include." ) -#UNSET( BULLET_INCLUDE_DIR CACHE ) -MARK_AS_ADVANCED( BULLET_INCLUDE_DIR ) -FIND_PATH( BULLET_INCLUDE_DIR btBulletCollisionCommon.h +#UNSET( BULLET_INCLUDE_DIRS CACHE ) +MARK_AS_ADVANCED( BULLET_INCLUDE_DIRS ) +FIND_PATH( BULLET_INCLUDE_DIRS btBulletCollisionCommon.h PATHS + $ENV{Bullet_DIR} ${BULLET_ROOT} $ENV{BULLET_ROOT} ${BULLET_SOURCE_DIR} @@ -33,33 +33,34 @@ FIND_PATH( BULLET_INCLUDE_DIR btBulletCollisionCommon.h PATH_SUFFIXES /BulletCollision /src + ../src /include /include/bullet /src/BulletCollision /include/BulletCollision /include/bullet/BulletCollision ) -IF( BULLET_INCLUDE_DIR ) - #SET( BULLET_DEMOS_INCLUDE_DIR ${BULLET_INCLUDE_DIR}/../Demos/OpenGL ) +IF( BULLET_INCLUDE_DIRS ) + #SET( BULLET_DEMOS_INCLUDE_DIR ${BULLET_INCLUDE_DIRS}/../Demos/OpenGL ) FIND_PATH( BULLET_OPENGL_INCLUDE_DIR DemoApplication.h PATHS - ${BULLET_INCLUDE_DIR} - ${BULLET_INCLUDE_DIR}/.. - ${BULLET_INCLUDE_DIR}/../OpenGL - ${BULLET_INCLUDE_DIR}/OpenGL - ${BULLET_INCLUDE_DIR}/../Demos/OpenGL + ${BULLET_INCLUDE_DIRS} + ${BULLET_INCLUDE_DIRS}/.. + ${BULLET_INCLUDE_DIRS}/../OpenGL + ${BULLET_INCLUDE_DIRS}/OpenGL + ${BULLET_INCLUDE_DIRS}/../Demos/OpenGL ) FIND_PATH( BULLET_DEMOS_INCLUDE_DIR GlutDemoApplication.h PATHS - ${BULLET_INCLUDE_DIR} - ${BULLET_INCLUDE_DIR}/.. - ${BULLET_INCLUDE_DIR}/../OpenGL - ${BULLET_INCLUDE_DIR}/OpenGL - ${BULLET_INCLUDE_DIR}/../Demos/OpenGL + ${BULLET_INCLUDE_DIRS} + ${BULLET_INCLUDE_DIRS}/.. + ${BULLET_INCLUDE_DIRS}/../OpenGL + ${BULLET_INCLUDE_DIRS}/OpenGL + ${BULLET_INCLUDE_DIRS}/../Demos/OpenGL ) MESSAGE (STATUS " **** BULLET_OPENGL_INCLUDE_DIR: ${BULLET_OPENGL_INCLUDE_DIR}") MESSAGE (STATUS " **** BULLET_DEMOS_INCLUDE_DIR: ${BULLET_DEMOS_INCLUDE_DIR}") -ENDIF( BULLET_INCLUDE_DIR ) +ENDIF( BULLET_INCLUDE_DIRS ) MACRO( FIND_BULLET_LIBRARY_DIRNAME LIBNAME DIRNAME ) #UNSET( BULLET_${LIBNAME}_LIBRARY CACHE ) @@ -70,6 +71,7 @@ MACRO( FIND_BULLET_LIBRARY_DIRNAME LIBNAME DIRNAME ) NAMES ${LIBNAME} PATHS + $ENV{Bullet_DIR} ${BULLET_ROOT} $ENV{BULLET_ROOT} ${BULLET_BUILD_DIR} @@ -97,6 +99,7 @@ MACRO( FIND_BULLET_LIBRARY_DIRNAME LIBNAME DIRNAME ) ${LIBNAME}_Debug ${LIBNAME} PATHS + $ENV{Bullet_DIR} ${BULLET_ROOT} $ENV{BULLET_ROOT} ${BULLET_BUILD_DIR} @@ -149,9 +152,9 @@ MARK_AS_ADVANCED( BULLET_LIBRARIES ) MARK_AS_ADVANCED( BULLET_LIBRARIES_debug ) SET( BULLET_FOUND 0 ) -IF( BULLET_INCLUDE_DIR AND BULLET_LIBRARIES ) +IF( BULLET_INCLUDE_DIRS AND BULLET_LIBRARIES ) SET( BULLET_FOUND 1 ) -ENDIF( BULLET_INCLUDE_DIR AND BULLET_LIBRARIES ) +ENDIF( BULLET_INCLUDE_DIRS AND BULLET_LIBRARIES ) # Possible future support for collision-only (no dynamics) diff --git a/SimDynamics/CMakeLists.txt b/SimDynamics/CMakeLists.txt index 38231e549d7cda724d998029990d1286662edd88..d93890fc29a3ac0186976ca1f580bbfe39c7019a 100644 --- a/SimDynamics/CMakeLists.txt +++ b/SimDynamics/CMakeLists.txt @@ -11,7 +11,8 @@ MESSAGE (STATUS "***** CONFIGURING Simox project SimDynamics *****") GET_FILENAME_COMPONENT (CurrentSimDynamicsPath ${CMAKE_CURRENT_LIST_FILE} PATH) SET(SimDynamics_DIR ${CurrentSimDynamicsPath}) -SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${SimDynamics_DIR}/CMakeModules) + + INCLUDE (Cxx11Test) SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_FLAG}") @@ -31,27 +32,33 @@ if (SimDynamics_USE_BULLET) SET (BULLET_ROOT ${BULLET_ROOT} CACHE PATH "Bullet Path") Find_Package(Bullet) if (BULLET_FOUND) - MESSAGE (STATUS " ** Found Bullet at ${BULLET_INCLUDE_DIR}") + MESSAGE (STATUS " ** Found Bullet at ${BULLET_INCLUDE_DIRS}") + + + #MESSAGE (STATUS "BULLET_LIBRARIES: ${BULLET_LIBRARIES}") #MESSAGE (STATUS "BULLET_OPENGL_INCLUDE_DIR: ${BULLET_OPENGL_INCLUDE_DIR}") #MESSAGE (STATUS "BULLET_OpenGLSupport_LIBRARY_debug: ${BULLET_OpenGLSupport_LIBRARY_debug}") - SET(SIMDYNAMICS_INCLUDE_DIRS "${BULLET_INCLUDE_DIR}" "${BULLET_INCLUDE_DIR}/bullet") # "${BULLET_DEMOS_INCLUDE_DIR}" "${BULLET_OPENGL_INCLUDE_DIR}")# PARENT_SCOPE) + SET(SIMDYNAMICS_INCLUDE_DIRS "${BULLET_INCLUDE_DIRS}" "${BULLET_INCLUDE_DIRS}/bullet") # "${BULLET_DEMOS_INCLUDE_DIR}" "${BULLET_OPENGL_INCLUDE_DIR}")# PARENT_SCOPE) INCLUDE_DIRECTORIES( - ${BULLET_INCLUDE_DIR} - ${BULLET_INCLUDE_DIR}/bullet + ${BULLET_INCLUDE_DIRS} + ${BULLET_INCLUDE_DIRS}/bullet ) - OPTION( SimDynamics_USE_BULLET_DOUBLE_PRECISION "Use Bullet Engine built with double precision" OFF ) - IF (WIN32) - OPTION(SimDynamics_USE_BULLET_USE_GLUT "Use Glut" OFF) - else() - OPTION(SimDynamics_USE_BULLET_USE_GLUT "Use Glut" ON) - endif() - IF( SimDynamics_USE_BULLET_DOUBLE_PRECISION ) + IF (WIN32) + OPTION(SimDynamics_USE_BULLET_USE_GLUT "Use Glut" OFF) + else() + OPTION(SimDynamics_USE_BULLET_USE_GLUT "Use Glut" ON) + endif() + + include(BulletCheckPrecision) + message(STATUS "BULLET_INCLUDE_DIRS ${BULLET_INCLUDE_DIRS}") + BulletCheckPrecision() + IF( NOT BULLET_USE_SINGLE_PRECISION ) ADD_DEFINITIONS( -DBT_USE_DOUBLE_PRECISION) LIST(APPEND SIMDYNAMICS_COMPILE_FLAGS "-DBT_USE_DOUBLE_PRECISION") - ENDIF( SimDynamics_USE_BULLET_DOUBLE_PRECISION ) + ENDIF() #MESSAGE(STATUS "BULLET_LIBRARIES:${BULLET_LIBRARIES}") SET (SimDynamics_PHYSICS_LIBRARIES "${BULLET_LIBRARIES}") SET (SimDynamics_DYNAMICSENGINE TRUE)