CMakeLists.txt 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  1. cmake_minimum_required(VERSION 2.4.3)
  2. set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
  3. cmake_policy(SET CMP0017 NEW)
  4. #this line has to appear before 'PROJECT' in order to be able to disable incremental linking
  5. SET(MSVC_INCREMENTAL_DEFAULT ON)
  6. PROJECT(BULLET_PHYSICS)
  7. FILE (STRINGS "VERSION" BULLET_VERSION)
  8. IF(COMMAND cmake_policy)
  9. cmake_policy(SET CMP0003 NEW)
  10. if(POLICY CMP0042)
  11. # Enable MACOSX_RPATH by default.
  12. cmake_policy(SET CMP0042 NEW)
  13. endif(POLICY CMP0042)
  14. ENDIF(COMMAND cmake_policy)
  15. IF (NOT CMAKE_BUILD_TYPE)
  16. # SET(CMAKE_BUILD_TYPE "Debug")
  17. SET(CMAKE_BUILD_TYPE "Release")
  18. ENDIF (NOT CMAKE_BUILD_TYPE)
  19. SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
  20. #MESSAGE("CMAKE_CXX_FLAGS_DEBUG="+${CMAKE_CXX_FLAGS_DEBUG})
  21. OPTION(USE_DOUBLE_PRECISION "Use double precision" OFF)
  22. OPTION(USE_GRAPHICAL_BENCHMARK "Use Graphical Benchmark" ON)
  23. OPTION(BUILD_SHARED_LIBS "Use shared libraries" OFF)
  24. OPTION(USE_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD "Use btSoftMultiBodyDynamicsWorld" ON)
  25. OPTION(BULLET2_MULTITHREADING "Build Bullet 2 libraries with mutex locking around certain operations (required for multi-threading)" OFF)
  26. IF (BULLET2_MULTITHREADING)
  27. OPTION(BULLET2_USE_OPEN_MP_MULTITHREADING "Build Bullet 2 with support for multi-threading with OpenMP (requires a compiler with OpenMP support)" OFF)
  28. OPTION(BULLET2_USE_TBB_MULTITHREADING "Build Bullet 2 with support for multi-threading with Intel Threading Building Blocks (requires the TBB library to be already installed)" OFF)
  29. IF (MSVC)
  30. OPTION(BULLET2_USE_PPL_MULTITHREADING "Build Bullet 2 with support for multi-threading with Microsoft Parallel Patterns Library (requires MSVC compiler)" OFF)
  31. ENDIF (MSVC)
  32. ENDIF (BULLET2_MULTITHREADING)
  33. IF(NOT WIN32)
  34. SET(DL ${CMAKE_DL_LIBS})
  35. IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
  36. MESSAGE("Linux")
  37. SET(OSDEF -D_LINUX)
  38. ELSE(CMAKE_SYSTEM_NAME MATCHES "Linux")
  39. IF(APPLE)
  40. MESSAGE("Apple")
  41. SET(OSDEF -D_DARWIN)
  42. ELSE(APPLE)
  43. MESSAGE("BSD?")
  44. SET(OSDEF -D_BSD)
  45. ENDIF(APPLE)
  46. ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
  47. ENDIF(NOT WIN32)
  48. OPTION(USE_MSVC_INCREMENTAL_LINKING "Use MSVC Incremental Linking" OFF)
  49. OPTION(USE_CUSTOM_VECTOR_MATH "Use custom vectormath library" OFF)
  50. #statically linking VC++ isn't supported for WindowsPhone/WindowsStore
  51. IF (CMAKE_SYSTEM_NAME STREQUAL WindowsPhone OR CMAKE_SYSTEM_NAME STREQUAL WindowsStore)
  52. OPTION(USE_MSVC_RUNTIME_LIBRARY_DLL "Use MSVC Runtime Library DLL (/MD or /MDd)" ON)
  53. ELSE ()
  54. OPTION(USE_MSVC_RUNTIME_LIBRARY_DLL "Use MSVC Runtime Library DLL (/MD or /MDd)" OFF)
  55. ENDIF (CMAKE_SYSTEM_NAME STREQUAL WindowsPhone OR CMAKE_SYSTEM_NAME STREQUAL WindowsStore)
  56. #SET(CMAKE_EXE_LINKER_FLAGS_INIT "/STACK:10000000 /INCREMENTAL:NO")
  57. #SET(CMAKE_EXE_LINKER_FLAGS "/STACK:10000000 /INCREMENTAL:NO")
  58. #MESSAGE("MSVC_INCREMENTAL_YES_FLAG"+${MSVC_INCREMENTAL_YES_FLAG})
  59. # Disable, MSVC workaround
  60. IF(MSVC)
  61. IF (NOT USE_MSVC_INCREMENTAL_LINKING)
  62. #MESSAGE("MSVC_INCREMENTAL_DEFAULT"+${MSVC_INCREMENTAL_DEFAULT})
  63. SET( MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL:NO")
  64. STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
  65. SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/INCREMENTAL:NO ${replacementFlags}" )
  66. MESSAGE("CMAKE_EXE_LINKER_FLAGS_DEBUG=${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
  67. STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags2 ${CMAKE_EXE_LINKER_FLAGS})
  68. SET(CMAKE_EXE_LINKER_FLAGS ${replacementFlag2})
  69. STRING(REPLACE "INCREMENTAL:YES" "" replacementFlags3 "${CMAKE_EXTRA_LINK_FLAGS}")
  70. SET(CMAKE_EXTRA_LINK_FLAGS ${replacementFlag3})
  71. STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags3 "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}")
  72. SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${replacementFlags3})
  73. SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/INCREMENTAL:NO ${replacementFlags3}" )
  74. ENDIF (NOT USE_MSVC_INCREMENTAL_LINKING)
  75. IF (NOT USE_MSVC_RUNTIME_LIBRARY_DLL AND FALSE)
  76. #We statically link to reduce dependancies
  77. 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 )
  78. IF(${flag_var} MATCHES "/MD")
  79. STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
  80. ENDIF(${flag_var} MATCHES "/MD")
  81. IF(${flag_var} MATCHES "/MDd")
  82. STRING(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
  83. ENDIF(${flag_var} MATCHES "/MDd")
  84. ENDFOREACH(flag_var)
  85. ENDIF ()
  86. IF (CMAKE_CL_64)
  87. ADD_DEFINITIONS(-D_WIN64)
  88. ELSE()
  89. OPTION(USE_MSVC_SSE "Use MSVC /arch:sse option" OFF)
  90. option(USE_MSVC_SSE2 "Compile your program with SSE2 instructions" ON)
  91. IF (USE_MSVC_SSE)
  92. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE")
  93. ENDIF()
  94. IF (USE_MSVC_SSE2)
  95. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2")
  96. ENDIF()
  97. ENDIF()
  98. option(USE_MSVC_AVX "Compile your program with AVX instructions" OFF)
  99. IF(USE_MSVC_AVX)
  100. add_definitions(/arch:AVX)
  101. ENDIF()
  102. OPTION(USE_MSVC_FAST_FLOATINGPOINT "Use MSVC /fp:fast option" ON)
  103. IF (USE_MSVC_FAST_FLOATINGPOINT)
  104. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:fast")
  105. ENDIF()
  106. OPTION(USE_MSVC_STRING_POOLING "Use MSVC /GF string pooling option" ON)
  107. IF (USE_MSVC_STRING_POOLING)
  108. SET(CMAKE_C_FLAGS "/GF ${CMAKE_C_FLAGS}")
  109. SET(CMAKE_CXX_FLAGS "/GF ${CMAKE_CXX_FLAGS}")
  110. ENDIF()
  111. OPTION(USE_MSVC_FUNCTION_LEVEL_LINKING "Use MSVC /Gy function level linking option" ON)
  112. IF(USE_MSVC_FUNCTION_LEVEL_LINKING)
  113. SET(CMAKE_C_FLAGS "/Gy ${CMAKE_C_FLAGS}")
  114. SET(CMAKE_CXX_FLAGS "/Gy ${CMAKE_CXX_FLAGS}")
  115. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /OPT:REF")
  116. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /OPT:REF")
  117. ENDIF(USE_MSVC_FUNCTION_LEVEL_LINKING)
  118. OPTION(USE_MSVC_EXEPTIONS "Use MSVC C++ exceptions option" OFF)
  119. OPTION(USE_MSVC_COMDAT_FOLDING "Use MSVC /OPT:ICF COMDAT folding option" ON)
  120. IF(USE_MSVC_COMDAT_FOLDING)
  121. set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /OPT:ICF")
  122. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /OPT:ICF")
  123. ENDIF()
  124. OPTION(USE_MSVC_DISABLE_RTTI "Use MSVC /GR- disabled RTTI flags option" ON)
  125. IF(USE_MSVC_DISABLE_RTTI)
  126. STRING(REGEX REPLACE "/GR" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Disable RTTI
  127. SET(CMAKE_C_FLAGS "/GR- ${CMAKE_C_FLAGS}")
  128. SET(CMAKE_CXX_FLAGS "/GR- ${CMAKE_CXX_FLAGS}")
  129. ENDIF(USE_MSVC_DISABLE_RTTI)
  130. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244 /wd4267")
  131. ENDIF()
  132. IF (WIN32)
  133. OPTION(INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES "Create MSVC projectfiles that can be distributed" OFF)
  134. IF (INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES)
  135. SET (LIBRARY_OUTPUT_PATH ${BULLET_PHYSICS_SOURCE_DIR}/lib CACHE PATH "Single output directory for building all libraries.")
  136. SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR})
  137. SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BULLET_PHYSICS_SOURCE_DIR})
  138. SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BULLET_PHYSICS_SOURCE_DIR})
  139. SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${BULLET_PHYSICS_SOURCE_DIR})
  140. SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${BULLET_PHYSICS_SOURCE_DIR})
  141. ELSE()
  142. SET (LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE PATH "Single output directory for building all libraries.")
  143. ENDIF()
  144. OPTION(INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES "Create MSVC projectfiles with relative paths" OFF)
  145. OPTION(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES "Add MSVC postfix for executable names (_Debug)" OFF)
  146. SET(CMAKE_DEBUG_POSTFIX "_Debug" CACHE STRING "Adds a postfix for debug-built libraries.")
  147. SET(CMAKE_MINSIZEREL_POSTFIX "_MinsizeRel" CACHE STRING "Adds a postfix for MinsizeRelease-built libraries.")
  148. SET(CMAKE_RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo" CACHE STRING "Adds a postfix for ReleaseWithDebug-built libraries.")
  149. IF (INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES)
  150. SET(CMAKE_SUPPRESS_REGENERATION 1)
  151. SET(CMAKE_USE_RELATIVE_PATHS 1)
  152. ENDIF(INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES)
  153. ENDIF (WIN32)
  154. OPTION(BUILD_CPU_DEMOS "Build original Bullet CPU examples" OFF)
  155. OPTION(INTERNAL_UPDATE_SERIALIZATION_STRUCTURES "Internal update serialization structures" OFF)
  156. IF (INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
  157. ADD_DEFINITIONS( -DBT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
  158. ENDIF (INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
  159. IF (USE_DOUBLE_PRECISION)
  160. ADD_DEFINITIONS( -DBT_USE_DOUBLE_PRECISION)
  161. SET( BULLET_DOUBLE_DEF "-DBT_USE_DOUBLE_PRECISION")
  162. ENDIF (USE_DOUBLE_PRECISION)
  163. IF (NOT USE_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD)
  164. ADD_DEFINITIONS(-DSKIP_SOFT_BODY_MULTI_BODY_DYNAMICS_WORLD)
  165. ENDIF ()
  166. IF(USE_GRAPHICAL_BENCHMARK)
  167. ADD_DEFINITIONS( -DUSE_GRAPHICAL_BENCHMARK)
  168. ENDIF (USE_GRAPHICAL_BENCHMARK)
  169. IF(BULLET2_MULTITHREADING)
  170. ADD_DEFINITIONS( -DBT_THREADSAFE=1 )
  171. IF (NOT MSVC)
  172. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
  173. ENDIF (NOT MSVC)
  174. IF (NOT WIN32)
  175. LINK_LIBRARIES( pthread )
  176. ENDIF (NOT WIN32)
  177. ENDIF (BULLET2_MULTITHREADING)
  178. IF (BULLET2_USE_OPEN_MP_MULTITHREADING)
  179. ADD_DEFINITIONS("-DBT_USE_OPENMP=1")
  180. IF (MSVC)
  181. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /openmp")
  182. ELSE (MSVC)
  183. # GCC, Clang
  184. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
  185. ENDIF (MSVC)
  186. ENDIF (BULLET2_USE_OPEN_MP_MULTITHREADING)
  187. IF (BULLET2_USE_TBB_MULTITHREADING)
  188. SET (BULLET2_TBB_INCLUDE_DIR "not found" CACHE PATH "Directory for Intel TBB includes.")
  189. SET (BULLET2_TBB_LIB_DIR "not found" CACHE PATH "Directory for Intel TBB libraries.")
  190. find_library(TBB_LIBRARY tbb PATHS ${BULLET2_TBB_LIB_DIR})
  191. find_library(TBBMALLOC_LIBRARY tbbmalloc PATHS ${BULLET2_TBB_LIB_DIR})
  192. ADD_DEFINITIONS("-DBT_USE_TBB=1")
  193. INCLUDE_DIRECTORIES( ${BULLET2_TBB_INCLUDE_DIR} )
  194. LINK_LIBRARIES( ${TBB_LIBRARY} ${TBBMALLOC_LIBRARY} )
  195. ENDIF (BULLET2_USE_TBB_MULTITHREADING)
  196. IF (BULLET2_USE_PPL_MULTITHREADING)
  197. ADD_DEFINITIONS("-DBT_USE_PPL=1")
  198. ENDIF (BULLET2_USE_PPL_MULTITHREADING)
  199. IF (WIN32)
  200. OPTION(USE_GLUT "Use Glut" ON)
  201. ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
  202. ADD_DEFINITIONS( -D_CRT_SECURE_NO_DEPRECATE )
  203. ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
  204. IF (USE_GLUT AND MSVC)
  205. string (REPLACE "/D_WINDOWS" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
  206. remove_definitions(-D_WINDOWS )
  207. ENDIF()
  208. ELSE(WIN32)
  209. OPTION(USE_GLUT "Use Glut" ON)
  210. ENDIF(WIN32)
  211. IF(COMMAND cmake_policy)
  212. cmake_policy(SET CMP0003 NEW)
  213. ENDIF(COMMAND cmake_policy)
  214. # This is the shortcut to finding GLU, GLUT and OpenGL if they are properly installed on your system
  215. # This should be the case.
  216. FIND_PACKAGE(OpenGL)
  217. IF (OPENGL_FOUND)
  218. MESSAGE("OPENGL FOUND")
  219. MESSAGE(${OPENGL_LIBRARIES})
  220. ELSE (OPENGL_FOUND)
  221. MESSAGE("OPENGL NOT FOUND")
  222. SET(OPENGL_gl_LIBRARY opengl32)
  223. SET(OPENGL_glu_LIBRARY glu32)
  224. ENDIF (OPENGL_FOUND)
  225. #FIND_PACKAGE(GLU)
  226. IF (APPLE)
  227. FIND_LIBRARY(COCOA_LIBRARY Cocoa)
  228. ENDIF()
  229. OPTION(BUILD_BULLET3 "Set when you want to build Bullet 3" ON)
  230. # Optional Python configuration
  231. # Will not probe environment for Python configuration (which can abort the
  232. # build process) unless you explicitly turn on BUILD_PYBULLET.
  233. OPTION(BUILD_PYBULLET "Set when you want to build pybullet (Python bindings for Bullet)" OFF)
  234. IF(BUILD_PYBULLET)
  235. SET(PYTHON_VERSION_PYBULLET "" CACHE STRING "Python version pybullet will use.")
  236. SET(Python_ADDITIONAL_VERSIONS 3 3.6 3.5 3.4 3.3 3.2 3.1 3.0 2.7 2.7.12 2.7.10 2.7.3 )
  237. SET_PROPERTY(CACHE PYTHON_VERSION_PYBULLET PROPERTY STRINGS ${Python_ADDITIONAL_VERSIONS})
  238. SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/build3/cmake ${CMAKE_MODULE_PATH})
  239. OPTION(EXACT_PYTHON_VERSION "Require Python and match PYTHON_VERSION_PYBULLET exactly, e.g. 2.7.12" OFF)
  240. IF(EXACT_PYTHON_VERSION)
  241. set(EXACT_PYTHON_VERSION_FLAG EXACT REQUIRED)
  242. ENDIF(EXACT_PYTHON_VERSION)
  243. # first find the python interpreter
  244. FIND_PACKAGE(PythonInterp ${PYTHON_VERSION_PYBULLET} ${EXACT_PYTHON_VERSION_FLAG})
  245. # python library should exactly match that of the interpreter
  246. # the following can result in fatal error if you don't have the right python configuration
  247. FIND_PACKAGE(PythonLibs ${PYTHON_VERSION_STRING} EXACT)
  248. ENDIF(BUILD_PYBULLET)
  249. OPTION(BUILD_ENET "Set when you want to build apps with enet UDP networking support" ON)
  250. OPTION(BUILD_CLSOCKET "Set when you want to build apps with enet TCP networking support" ON)
  251. IF(BUILD_PYBULLET)
  252. FIND_PACKAGE(PythonLibs)
  253. OPTION(BUILD_PYBULLET_NUMPY "Set when you want to build pybullet with NumPy support" OFF)
  254. OPTION(BUILD_PYBULLET_ENET "Set when you want to build pybullet with enet UDP networking support" ON)
  255. OPTION(BUILD_PYBULLET_CLSOCKET "Set when you want to build pybullet with enet TCP networking support" ON)
  256. OPTION(BUILD_PYBULLET_MAC_USE_PYTHON_FRAMEWORK "Set when you want to use the Python Framework on Mac" OFF)
  257. IF(BUILD_PYBULLET_NUMPY)
  258. #include(FindNumPy)
  259. FIND_PACKAGE(NumPy)
  260. if (PYTHON_NUMPY_FOUND)
  261. message("NumPy found")
  262. add_definitions(-DPYBULLET_USE_NUMPY)
  263. else()
  264. message("NumPy not found")
  265. endif()
  266. ENDIF()
  267. IF(WIN32)
  268. SET(BUILD_SHARED_LIBS OFF CACHE BOOL "Shared Libs" FORCE)
  269. ELSE(WIN32)
  270. SET(BUILD_SHARED_LIBS ON CACHE BOOL "Shared Libs" FORCE)
  271. ENDIF(WIN32)
  272. IF(APPLE)
  273. OPTION(BUILD_PYBULLET_MAC_USE_PYTHON_FRAMEWORK "Set when you want to use the Python Framework on Mac" ON)
  274. IF(NOT BUILD_PYBULLET_MAC_USE_PYTHON_FRAMEWORK)
  275. add_definitions(-DB3_NO_PYTHON_FRAMEWORK)
  276. ENDIF(NOT BUILD_PYBULLET_MAC_USE_PYTHON_FRAMEWORK)
  277. OPTION(BUILD_PYBULLET_SHOW_PY_VERSION "Set when you want to show the PY_MAJOR_VERSION and PY_MAJOR_VERSION using #pragme message." OFF)
  278. IF(BUILD_PYBULLET_SHOW_PY_VERSION)
  279. add_definitions(-DB3_DUMP_PYTHON_VERSION)
  280. ENDIF()
  281. ENDIF(APPLE)
  282. ENDIF(BUILD_PYBULLET)
  283. IF(BUILD_BULLET3)
  284. IF(APPLE)
  285. MESSAGE("Mac OSX Version is ${_CURRENT_OSX_VERSION}")
  286. IF(_CURRENT_OSX_VERSION VERSION_LESS 10.9)
  287. MESSAGE("Mac OSX below 10.9 has no OpenGL 3 support so please disable the BUILD_OPENGL3_DEMOS option")
  288. #unset(BUILD_OPENGL3_DEMOS CACHE)
  289. OPTION(BUILD_OPENGL3_DEMOS "Set when you want to build the OpenGL3+ demos" OFF)
  290. ELSE()
  291. OPTION(BUILD_OPENGL3_DEMOS "Set when you want to build the OpenGL3+ demos" ON)
  292. ENDIF()
  293. ELSE()
  294. OPTION(BUILD_OPENGL3_DEMOS "Set when you want to build Bullet 3 OpenGL3+ demos" ON)
  295. ENDIF()
  296. ELSE(BUILD_BULLET3)
  297. unset(BUILD_OPENGL3_DEMOS CACHE)
  298. OPTION(BUILD_OPENGL3_DEMOS "Set when you want to build Bullet 3 OpenGL3+ demos" OFF)
  299. ENDIF(BUILD_BULLET3)
  300. IF(BUILD_OPENGL3_DEMOS)
  301. IF(EXISTS ${BULLET_PHYSICS_SOURCE_DIR}/Demos3 AND IS_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR}/Demos3)
  302. SUBDIRS(Demos3)
  303. ENDIF()
  304. ELSE()
  305. ADD_DEFINITIONS(-DNO_OPENGL3)
  306. ENDIF(BUILD_OPENGL3_DEMOS)
  307. OPTION(BUILD_BULLET2_DEMOS "Set when you want to build the Bullet 2 demos" ON)
  308. IF(BUILD_BULLET2_DEMOS)
  309. IF(EXISTS ${BULLET_PHYSICS_SOURCE_DIR}/examples AND IS_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR}/examples)
  310. SUBDIRS(examples)
  311. ENDIF()
  312. ENDIF(BUILD_BULLET2_DEMOS)
  313. OPTION(BUILD_EXTRAS "Set when you want to build the extras" ON)
  314. IF(BUILD_EXTRAS)
  315. SUBDIRS(Extras)
  316. ENDIF(BUILD_EXTRAS)
  317. SUBDIRS(src)
  318. IF("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")
  319. OPTION(INSTALL_LIBS "Set when you want to install libraries" ON)
  320. ELSE()
  321. IF(APPLE AND FRAMEWORK)
  322. OPTION(INSTALL_LIBS "Set when you want to install libraries" ON)
  323. ELSE()
  324. #by default, don't enable the 'INSTALL' option for Xcode and MSVC projectfiles
  325. OPTION(INSTALL_LIBS "Set when you want to install libraries" OFF)
  326. ENDIF()
  327. ENDIF()
  328. IF(INSTALL_LIBS)
  329. #INSTALL of other files requires CMake 2.6
  330. IF(BUILD_EXTRAS)
  331. IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
  332. OPTION(INSTALL_EXTRA_LIBS "Set when you want extra libraries installed" ON)
  333. ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
  334. ENDIF(BUILD_EXTRAS)
  335. SET (LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" )
  336. SET (LIB_DESTINATION "lib${LIB_SUFFIX}" CACHE STRING "Library directory name")
  337. ## the following are directories where stuff will be installed to
  338. SET(INCLUDE_INSTALL_DIR "include/bullet/" CACHE PATH "The subdirectory to the header prefix")
  339. SET(PKGCONFIG_INSTALL_PREFIX "lib${LIB_SUFFIX}/pkgconfig/" CACHE STRING "Base directory for pkgconfig files")
  340. IF(NOT MSVC)
  341. CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/bullet.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/bullet.pc @ONLY)
  342. INSTALL(
  343. FILES
  344. ${CMAKE_CURRENT_BINARY_DIR}/bullet.pc
  345. DESTINATION
  346. ${PKGCONFIG_INSTALL_PREFIX})
  347. ENDIF(NOT MSVC)
  348. ENDIF()
  349. OPTION(BUILD_UNIT_TESTS "Build Unit Tests" OFF)
  350. IF (BUILD_UNIT_TESTS)
  351. ENABLE_TESTING()
  352. SUBDIRS(test)
  353. ENDIF()
  354. set (BULLET_CONFIG_CMAKE_PATH lib${LIB_SUFFIX}/cmake/bullet )
  355. list (APPEND BULLET_LIBRARIES LinearMath)
  356. list (APPEND BULLET_LIBRARIES Bullet3Common)
  357. list (APPEND BULLET_LIBRARIES BulletInverseDynamics)
  358. list (APPEND BULLET_LIBRARIES BulletCollision)
  359. list (APPEND BULLET_LIBRARIES BulletDynamics)
  360. list (APPEND BULLET_LIBRARIES BulletSoftBody)
  361. set (BULLET_USE_FILE ${BULLET_CONFIG_CMAKE_PATH}/UseBullet.cmake)
  362. configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/BulletConfig.cmake.in
  363. ${CMAKE_CURRENT_BINARY_DIR}/BulletConfig.cmake
  364. @ONLY ESCAPE_QUOTES
  365. )
  366. OPTION(INSTALL_CMAKE_FILES "Install generated CMake files" ON)
  367. IF (INSTALL_CMAKE_FILES)
  368. install ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/UseBullet.cmake
  369. ${CMAKE_CURRENT_BINARY_DIR}/BulletConfig.cmake
  370. DESTINATION ${BULLET_CONFIG_CMAKE_PATH}
  371. )
  372. ENDIF (INSTALL_CMAKE_FILES)