CMakeLists.txt 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. cmake_minimum_required(VERSION 2.4.3)
  2. set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
  3. #this line has to appear before 'PROJECT' in order to be able to disable incremental linking
  4. SET(MSVC_INCREMENTAL_DEFAULT ON)
  5. PROJECT(BULLET_PHYSICS)
  6. SET(BULLET_VERSION 2.85)
  7. IF(COMMAND cmake_policy)
  8. cmake_policy(SET CMP0003 NEW)
  9. if(POLICY CMP0042)
  10. # Enable MACOSX_RPATH by default.
  11. cmake_policy(SET CMP0042 NEW)
  12. endif(POLICY CMP0042)
  13. ENDIF(COMMAND cmake_policy)
  14. IF (NOT CMAKE_BUILD_TYPE)
  15. # SET(CMAKE_BUILD_TYPE "Debug")
  16. SET(CMAKE_BUILD_TYPE "Release")
  17. ENDIF (NOT CMAKE_BUILD_TYPE)
  18. SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
  19. #MESSAGE("CMAKE_CXX_FLAGS_DEBUG="+${CMAKE_CXX_FLAGS_DEBUG})
  20. OPTION(USE_DOUBLE_PRECISION "Use double precision" OFF)
  21. OPTION(USE_GRAPHICAL_BENCHMARK "Use Graphical Benchmark" ON)
  22. OPTION(BUILD_SHARED_LIBS "Use shared libraries" OFF)
  23. OPTION(USE_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD "Use btSoftMultiBodyDynamicsWorld" OFF)
  24. OPTION(BULLET2_USE_THREAD_LOCKS "Build Bullet 2 libraries with mutex locking around certain operations" OFF)
  25. OPTION(USE_MSVC_INCREMENTAL_LINKING "Use MSVC Incremental Linking" OFF)
  26. OPTION(USE_CUSTOM_VECTOR_MATH "Use custom vectormath library" OFF)
  27. #statically linking VC++ isn't supported for WindowsPhone/WindowsStore
  28. IF (CMAKE_SYSTEM_NAME STREQUAL WindowsPhone OR CMAKE_SYSTEM_NAME STREQUAL WindowsStore)
  29. OPTION(USE_MSVC_RUNTIME_LIBRARY_DLL "Use MSVC Runtime Library DLL (/MD or /MDd)" ON)
  30. ELSE ()
  31. OPTION(USE_MSVC_RUNTIME_LIBRARY_DLL "Use MSVC Runtime Library DLL (/MD or /MDd)" OFF)
  32. ENDIF (CMAKE_SYSTEM_NAME STREQUAL WindowsPhone OR CMAKE_SYSTEM_NAME STREQUAL WindowsStore)
  33. #SET(CMAKE_EXE_LINKER_FLAGS_INIT "/STACK:10000000 /INCREMENTAL:NO")
  34. #SET(CMAKE_EXE_LINKER_FLAGS "/STACK:10000000 /INCREMENTAL:NO")
  35. #MESSAGE("MSVC_INCREMENTAL_YES_FLAG"+${MSVC_INCREMENTAL_YES_FLAG})
  36. IF(MSVC)
  37. IF (NOT USE_MSVC_INCREMENTAL_LINKING)
  38. #MESSAGE("MSVC_INCREMENTAL_DEFAULT"+${MSVC_INCREMENTAL_DEFAULT})
  39. SET( MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL:NO")
  40. STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
  41. SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/INCREMENTAL:NO ${replacementFlags}" )
  42. MESSAGE("CMAKE_EXE_LINKER_FLAGS_DEBUG=${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
  43. STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags2 ${CMAKE_EXE_LINKER_FLAGS})
  44. SET(CMAKE_EXE_LINKER_FLAGS ${replacementFlag2})
  45. STRING(REPLACE "INCREMENTAL:YES" "" replacementFlags3 "${CMAKE_EXTRA_LINK_FLAGS}")
  46. SET(CMAKE_EXTRA_LINK_FLAGS ${replacementFlag3})
  47. STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags3 "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}")
  48. SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${replacementFlags3})
  49. SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/INCREMENTAL:NO ${replacementFlags3}" )
  50. ENDIF (NOT USE_MSVC_INCREMENTAL_LINKING)
  51. IF (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
  52. #We statically link to reduce dependancies
  53. FOREACH(flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO )
  54. IF(${flag_var} MATCHES "/MD")
  55. STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
  56. ENDIF(${flag_var} MATCHES "/MD")
  57. IF(${flag_var} MATCHES "/MDd")
  58. STRING(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
  59. ENDIF(${flag_var} MATCHES "/MDd")
  60. ENDFOREACH(flag_var)
  61. ENDIF (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
  62. IF (CMAKE_CL_64)
  63. ADD_DEFINITIONS(-D_WIN64)
  64. ELSE()
  65. OPTION(USE_MSVC_SSE "Use MSVC /arch:sse option" ON)
  66. IF (USE_MSVC_SSE)
  67. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE")
  68. ENDIF()
  69. ENDIF()
  70. OPTION(USE_MSVC_FAST_FLOATINGPOINT "Use MSVC /fp:fast option" ON)
  71. IF (USE_MSVC_FAST_FLOATINGPOINT)
  72. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:fast")
  73. ENDIF()
  74. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244 /wd4267")
  75. ENDIF(MSVC)
  76. IF (WIN32)
  77. OPTION(INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES "Create MSVC projectfiles that can be distributed" OFF)
  78. IF (INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES)
  79. SET (LIBRARY_OUTPUT_PATH ${BULLET_PHYSICS_SOURCE_DIR}/lib CACHE PATH "Single output directory for building all libraries.")
  80. SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR})
  81. SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BULLET_PHYSICS_SOURCE_DIR})
  82. SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BULLET_PHYSICS_SOURCE_DIR})
  83. SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${BULLET_PHYSICS_SOURCE_DIR})
  84. SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${BULLET_PHYSICS_SOURCE_DIR})
  85. ELSE()
  86. SET (LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE PATH "Single output directory for building all libraries.")
  87. ENDIF()
  88. OPTION(INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES "Create MSVC projectfiles with relative paths" OFF)
  89. OPTION(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES "Add MSVC postfix for executable names (_Debug)" OFF)
  90. SET(CMAKE_DEBUG_POSTFIX "_Debug" CACHE STRING "Adds a postfix for debug-built libraries.")
  91. SET(CMAKE_MINSIZEREL_POSTFIX "_MinsizeRel" CACHE STRING "Adds a postfix for MinsizeRelease-built libraries.")
  92. SET(CMAKE_RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo" CACHE STRING "Adds a postfix for ReleaseWithDebug-built libraries.")
  93. IF (INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES)
  94. SET(CMAKE_SUPPRESS_REGENERATION 1)
  95. SET(CMAKE_USE_RELATIVE_PATHS 1)
  96. ENDIF(INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES)
  97. ENDIF (WIN32)
  98. OPTION(BUILD_CPU_DEMOS "Build original Bullet CPU examples" ON)
  99. OPTION(INTERNAL_UPDATE_SERIALIZATION_STRUCTURES "Internal update serialization structures" OFF)
  100. IF (INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
  101. ADD_DEFINITIONS( -DBT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
  102. ENDIF (INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
  103. IF (USE_DOUBLE_PRECISION)
  104. ADD_DEFINITIONS( -DBT_USE_DOUBLE_PRECISION)
  105. SET( BULLET_DOUBLE_DEF "-DBT_USE_DOUBLE_PRECISION")
  106. ENDIF (USE_DOUBLE_PRECISION)
  107. IF (USE_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD)
  108. ADD_DEFINITIONS(-DUSE_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD)
  109. ENDIF (USE_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD)
  110. IF(USE_GRAPHICAL_BENCHMARK)
  111. ADD_DEFINITIONS( -DUSE_GRAPHICAL_BENCHMARK)
  112. ENDIF (USE_GRAPHICAL_BENCHMARK)
  113. IF(BULLET2_USE_THREAD_LOCKS)
  114. ADD_DEFINITIONS( -DBT_THREADSAFE=1 )
  115. IF (NOT MSVC)
  116. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  117. ENDIF (NOT MSVC)
  118. ENDIF (BULLET2_USE_THREAD_LOCKS)
  119. IF (WIN32)
  120. OPTION(USE_GLUT "Use Glut" ON)
  121. ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
  122. ADD_DEFINITIONS( -D_CRT_SECURE_NO_DEPRECATE )
  123. ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
  124. IF (USE_GLUT AND MSVC)
  125. string (REPLACE "/D_WINDOWS" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
  126. remove_definitions(-D_WINDOWS )
  127. ENDIF()
  128. ELSE(WIN32)
  129. OPTION(USE_GLUT "Use Glut" ON)
  130. ENDIF(WIN32)
  131. IF(COMMAND cmake_policy)
  132. cmake_policy(SET CMP0003 NEW)
  133. ENDIF(COMMAND cmake_policy)
  134. # This is the shortcut to finding GLU, GLUT and OpenGL if they are properly installed on your system
  135. # This should be the case.
  136. FIND_PACKAGE(OpenGL)
  137. IF (OPENGL_FOUND)
  138. MESSAGE("OPENGL FOUND")
  139. MESSAGE(${OPENGL_LIBRARIES})
  140. ELSE (OPENGL_FOUND)
  141. MESSAGE("OPENGL NOT FOUND")
  142. SET(OPENGL_gl_LIBRARY opengl32)
  143. SET(OPENGL_glu_LIBRARY glu32)
  144. ENDIF (OPENGL_FOUND)
  145. #FIND_PACKAGE(GLU)
  146. IF (APPLE)
  147. FIND_LIBRARY(COCOA_LIBRARY Cocoa)
  148. ENDIF()
  149. OPTION(BUILD_BULLET3 "Set when you want to build Bullet 3" ON)
  150. OPTION(BUILD_PYBULLET "Set when you want to build pybullet (experimental Python bindings for Bullet)" OFF)
  151. IF(BUILD_PYBULLET)
  152. FIND_PACKAGE(PythonLibs)
  153. OPTION(BUILD_PYBULLET_NUMPY "Set when you want to build pybullet with NumPy support" OFF)
  154. OPTION(BUILD_PYBULLET_ENET "Set when you want to build pybullet with enet UDP networking support" ON)
  155. IF(BUILD_PYBULLET_NUMPY)
  156. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_LIST_DIR}/build3/cmake)
  157. #include(FindNumPy)
  158. FIND_PACKAGE(NumPy)
  159. if (PYTHON_NUMPY_FOUND)
  160. message("NumPy found")
  161. add_definitions(-DPYBULLET_USE_NUMPY)
  162. else()
  163. message("NumPy not found")
  164. endif()
  165. ENDIF()
  166. OPTION(BUILD_PYBULLET "Set when you want to build pybullet (experimental Python bindings for Bullet)" OFF)
  167. IF(WIN32)
  168. SET(BUILD_SHARED_LIBS OFF CACHE BOOL "Shared Libs" FORCE)
  169. ELSE(WIN32)
  170. SET(BUILD_SHARED_LIBS ON CACHE BOOL "Shared Libs" FORCE)
  171. ENDIF(WIN32)
  172. ENDIF(BUILD_PYBULLET)
  173. IF(BUILD_BULLET3)
  174. IF(APPLE)
  175. MESSAGE("Mac OSX Version is ${_CURRENT_OSX_VERSION}")
  176. IF(_CURRENT_OSX_VERSION VERSION_LESS 10.9)
  177. MESSAGE("Mac OSX below 10.9 has no OpenGL 3 support so please disable the BUILD_OPENGL3_DEMOS option")
  178. #unset(BUILD_OPENGL3_DEMOS CACHE)
  179. OPTION(BUILD_OPENGL3_DEMOS "Set when you want to build the OpenGL3+ demos" OFF)
  180. ELSE()
  181. OPTION(BUILD_OPENGL3_DEMOS "Set when you want to build the OpenGL3+ demos" ON)
  182. ENDIF()
  183. ELSE()
  184. OPTION(BUILD_OPENGL3_DEMOS "Set when you want to build Bullet 3 OpenGL3+ demos" ON)
  185. ENDIF()
  186. ELSE(BUILD_BULLET3)
  187. unset(BUILD_OPENGL3_DEMOS CACHE)
  188. OPTION(BUILD_OPENGL3_DEMOS "Set when you want to build Bullet 3 OpenGL3+ demos" OFF)
  189. ENDIF(BUILD_BULLET3)
  190. IF(BUILD_OPENGL3_DEMOS)
  191. IF(EXISTS ${BULLET_PHYSICS_SOURCE_DIR}/Demos3 AND IS_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR}/Demos3)
  192. SUBDIRS(Demos3)
  193. ENDIF()
  194. ELSE()
  195. ADD_DEFINITIONS(-DNO_OPENGL3)
  196. ENDIF(BUILD_OPENGL3_DEMOS)
  197. OPTION(BUILD_BULLET2_DEMOS "Set when you want to build the Bullet 2 demos" ON)
  198. IF(BUILD_BULLET2_DEMOS)
  199. IF(EXISTS ${BULLET_PHYSICS_SOURCE_DIR}/examples AND IS_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR}/examples)
  200. SUBDIRS(examples)
  201. ENDIF()
  202. IF (BULLET2_USE_THREAD_LOCKS)
  203. OPTION(BULLET2_MULTITHREADED_OPEN_MP_DEMO "Build Bullet 2 MultithreadedDemo using OpenMP (requires a compiler with OpenMP support)" OFF)
  204. OPTION(BULLET2_MULTITHREADED_TBB_DEMO "Build Bullet 2 MultithreadedDemo using Intel Threading Building Blocks (requires the TBB library to be already installed)" OFF)
  205. IF (MSVC)
  206. OPTION(BULLET2_MULTITHREADED_PPL_DEMO "Build Bullet 2 MultithreadedDemo using Microsoft Parallel Patterns Library (requires MSVC compiler)" OFF)
  207. ENDIF (MSVC)
  208. ENDIF (BULLET2_USE_THREAD_LOCKS)
  209. ENDIF(BUILD_BULLET2_DEMOS)
  210. OPTION(BUILD_EXTRAS "Set when you want to build the extras" ON)
  211. IF(BUILD_EXTRAS)
  212. SUBDIRS(Extras)
  213. ENDIF(BUILD_EXTRAS)
  214. #Maya Dynamica plugin is moved to http://dynamica.googlecode.com
  215. SUBDIRS(src)
  216. IF("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")
  217. OPTION(INSTALL_LIBS "Set when you want to install libraries" ON)
  218. ELSE()
  219. IF(APPLE AND FRAMEWORK)
  220. OPTION(INSTALL_LIBS "Set when you want to install libraries" ON)
  221. ELSE()
  222. #by default, don't enable the 'INSTALL' option for Xcode and MSVC projectfiles
  223. OPTION(INSTALL_LIBS "Set when you want to install libraries" OFF)
  224. ENDIF()
  225. ENDIF()
  226. IF(INSTALL_LIBS)
  227. SET (LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" )
  228. SET (LIB_DESTINATION "lib${LIB_SUFFIX}" CACHE STRING "Library directory name")
  229. ## the following are directories where stuff will be installed to
  230. SET(INCLUDE_INSTALL_DIR "include/bullet/" CACHE PATH "The subdirectory to the header prefix")
  231. SET(PKGCONFIG_INSTALL_PREFIX "lib${LIB_SUFFIX}/pkgconfig/" CACHE STRING "Base directory for pkgconfig files")
  232. IF(NOT MSVC)
  233. CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/bullet.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/bullet.pc @ONLY)
  234. INSTALL(
  235. FILES
  236. ${CMAKE_CURRENT_BINARY_DIR}/bullet.pc
  237. DESTINATION
  238. ${PKGCONFIG_INSTALL_PREFIX})
  239. ENDIF(NOT MSVC)
  240. ENDIF(INSTALL_LIBS)
  241. #INSTALL of other files requires CMake 2.6
  242. IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
  243. OPTION(INSTALL_EXTRA_LIBS "Set when you want extra libraries installed" OFF)
  244. ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
  245. OPTION(BUILD_UNIT_TESTS "Build Unit Tests" ON)
  246. IF (BUILD_UNIT_TESTS)
  247. ENABLE_TESTING()
  248. SUBDIRS(test)
  249. ENDIF()
  250. set (BULLET_CONFIG_CMAKE_PATH lib${LIB_SUFFIX}/cmake/bullet )
  251. list (APPEND BULLET_LIBRARIES LinearMath)
  252. IF(BUILD_BULLET3)
  253. list (APPEND BULLET_LIBRARIES BulletInverseDynamics)
  254. ENDIF(BUILD_BULLET3)
  255. list (APPEND BULLET_LIBRARIES BulletCollision)
  256. list (APPEND BULLET_LIBRARIES BulletDynamics)
  257. list (APPEND BULLET_LIBRARIES BulletSoftBody)
  258. set (BULLET_USE_FILE ${BULLET_CONFIG_CMAKE_PATH}/UseBullet.cmake)
  259. configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/BulletConfig.cmake.in
  260. ${CMAKE_CURRENT_BINARY_DIR}/BulletConfig.cmake
  261. @ONLY ESCAPE_QUOTES
  262. )
  263. install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/UseBullet.cmake
  264. ${CMAKE_CURRENT_BINARY_DIR}/BulletConfig.cmake
  265. DESTINATION ${BULLET_CONFIG_CMAKE_PATH}
  266. )