1 cmake_minimum_required(VERSION 2.4.3)
2 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
4 #this line has to appear before 'PROJECT' in order to be able to disable incremental linking
5 SET(MSVC_INCREMENTAL_DEFAULT ON)
7 PROJECT(BULLET_PHYSICS)
8 SET(BULLET_VERSION 2.81)
10 IF(COMMAND cmake_policy)
11 cmake_policy(SET CMP0003 NEW)
12 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)
20 SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
21 #MESSAGE("CMAKE_CXX_FLAGS_DEBUG="+${CMAKE_CXX_FLAGS_DEBUG})
23 OPTION(USE_DOUBLE_PRECISION "Use double precision" OFF)
24 OPTION(USE_GRAPHICAL_BENCHMARK "Use Graphical Benchmark" ON)
27 OPTION(USE_MSVC_RUNTIME_LIBRARY_DLL "Use MSVC Runtime Library DLL (/MD or /MDd)" OFF)
28 OPTION(USE_MSVC_INCREMENTAL_LINKING "Use MSVC Incremental Linking" OFF)
30 OPTION(USE_CUSTOM_VECTOR_MATH "Use custom vectormath library" OFF)
32 IF (USE_CUSTOM_VECTOR_MATH)
33 ADD_DEFINITIONS(-DUSE_SYSTEM_VECTORMATH)
35 SET (VECTOR_MATH_INCLUDE ${BULLET_PHYSICS_SOURCE_DIR}/src/vectormath/sse CACHE PATH "Vector Math library include path.")
37 SET (VECTOR_MATH_INCLUDE ${BULLET_PHYSICS_SOURCE_DIR}/src/vectormath/scalar CACHE PATH "Vector Math library include path.")
39 ENDIF(USE_CUSTOM_VECTOR_MATH)
43 OPTION(BUILD_MULTITHREADING "Use BulletMultiThreading" ON)
45 OPTION(BUILD_MULTITHREADING "Use BulletMultiThreading" OFF)
48 IF (BUILD_MULTITHREADING)
49 OPTION(USE_MULTITHREADED_BENCHMARK "Use Multithreaded Benchmark" OFF)
50 IF (USE_MULTITHREADED_BENCHMARK)
51 ADD_DEFINITIONS(-DUSE_PARALLEL_SOLVER_BENCHMARK -DUSE_PARALLEL_DISPATCHER_BENCHMARK)
52 ENDIF(USE_MULTITHREADED_BENCHMARK)
55 OPTION(BUILD_MINICL_OPENCL_DEMOS "Build OpenCL demos for MiniCL (Generic CPU)" ON)
57 OPTION(BUILD_MINICL_OPENCL_DEMOS "Build OpenCL demos for MiniCL (Generic CPU)" OFF)
61 FIND_PATH(DIRECTX_SDK_BASE_DIR Include/D3D11.h PATH $ENV{DXSDK_DIR} )
62 IF(DIRECTX_SDK_BASE_DIR)
63 OPTION(USE_DX11 "Use DirectX 11" ON)
65 OPTION(USE_DX11 "Use DirectX 11" OFF)
68 FIND_PATH(AMD_OPENCL_BASE_DIR include/CL/cl.h PATH $ENV{ATISTREAMSDKROOT} $ENV{AMDAPPSDKROOT} )
69 IF(AMD_OPENCL_BASE_DIR)
70 #AMD adds an extras slash at the end of the ATISTREAMSDKROOT variable
71 SET(AMD_OPENCL_INCLUDES ${AMD_OPENCL_BASE_DIR}/include )
72 MESSAGE("AMD OPENCL SDK FOUND")
74 SET(CMAKE_ATISTREAMSDK_LIBPATH ${AMD_OPENCL_BASE_DIR}/lib/x86_64 )
76 SET(CMAKE_ATISTREAMSDK_LIBPATH ${AMD_OPENCL_BASE_DIR}/lib/x86 )
78 SET(CMAKE_ATISTREAMSDK_LIBRARY ${CMAKE_ATISTREAMSDK_LIBPATH}/OpenCL.lib )
79 OPTION(BUILD_AMD_OPENCL_DEMOS "Build OpenCL demos for AMD (GPU or CPU)" ON)
82 ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glew64s.lib )
84 SET(CMAK_GLEW_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glew32s.lib )
87 OPTION(BUILD_AMD_OPENCL_DEMOS "Build OpenCL demos for AMD (GPU or CPU)" OFF)
90 FIND_PATH(INTEL_OPENCL_BASE_DIR include/CL/cl.h PATH $ENV{INTELOCLSDKROOT} )
91 IF(INTEL_OPENCL_BASE_DIR)
92 SET(INTEL_OPENCL_INCLUDES ${INTEL_OPENCL_BASE_DIR}/include )
93 MESSAGE("INTEL OPENCL SDK FOUND")
94 MESSAGE(${INTEL_OPENCL_INCLUDES})
96 SET(CMAKE_INTELOCLSDK_LIBPATH ${INTEL_OPENCL_BASE_DIR}/lib/x64 )
98 SET(CMAKE_INTELOCLSDK_LIBPATH ${INTEL_OPENCL_BASE_DIR}/lib/x86 )
100 SET(INTEL_OPENCL_LIBRARIES ${CMAKE_INTELOCLSDK_LIBPATH}/OpenCL.lib)
101 OPTION(BUILD_INTEL_OPENCL_DEMOS "Build OpenCL demos for Intel (CPU)" ON)
103 OPTION(BUILD_INTEL_OPENCL_DEMOS "Build OpenCL demos for Intel (CPU)" OFF)
106 FIND_PATH(NVIDIA_OPENCL_BASE_DIR include/CL/cl.h PATH $ENV{CUDA_PATH} )
107 IF(NVIDIA_OPENCL_BASE_DIR)
108 SET(NVIDIA_OPENCL_INCLUDES ${NVIDIA_OPENCL_BASE_DIR}/include )
109 MESSAGE("NVIDIA OPENCL SDK FOUND")
110 MESSAGE(${NVIDIA_OPENCL_INCLUDES})
112 SET(CMAKE_NVSDKCOMPUTE_LIBPATH ${NVIDIA_OPENCL_BASE_DIR}/lib/x64 )
114 SET(CMAKE_NVSDKCOMPUTE_LIBPATH ${NVIDIA_OPENCL_BASE_DIR}/lib/Win32 )
116 SET(NVIDIA_OPENCL_LIBRARIES ${CMAKE_NVSDKCOMPUTE_LIBPATH}/OpenCL.lib)
118 OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)" ON)
120 OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)" OFF)
123 FIND_PATH(AMD_OPENCL_BASE_DIR include/CL/cl.h PATH $ENV{ATISTREAMSDKROOT} $ENV{AMDAPPSDKROOT} )
124 IF(AMD_OPENCL_BASE_DIR)
125 #AMD adds an extras slash at the end of the ATISTREAMSDKROOT variable
126 SET(AMD_OPENCL_INCLUDES ${AMD_OPENCL_BASE_DIR}/include )
127 MESSAGE("AMD OPENCL SDK FOUND")
128 MESSAGE(${AMD_OPENCL_INCLUDES})
130 SET(CMAKE_ATISTREAMSDK_LIBPATH ${AMD_OPENCL_BASE_DIR}/lib/x86_64 )
132 SET(CMAKE_ATISTREAMSDK_LIBPATH ${AMD_OPENCL_BASE_DIR}/lib/x86 )
134 OPTION(BUILD_AMD_OPENCL_DEMOS "Build OpenCL demos for AMD (GPU or CPU)" ON)
135 SET(CMAKE_ATISTREAMSDK_LIBRARY OpenCL )
137 OPTION(BUILD_AMD_OPENCL_DEMOS "Build OpenCL demos for AMD (GPU or CPU)" OFF)
138 ENDIF(AMD_OPENCL_BASE_DIR)
140 FIND_PATH(INTEL_OPENCL_INCLUDES CL/cl.h)
141 FIND_PATH(INTEL_OPENCL_ICD_CFG intelocl64.icd /etc/OpenCL/vendors)
142 FIND_LIBRARY(INTEL_OPENCL_LIBRARIES OpenCL PATH /usr/lib64)
143 IF (INTEL_OPENCL_INCLUDES AND INTEL_OPENCL_LIBRARIES AND INTEL_OPENCL_ICD_CFG)
144 MESSAGE("INTEL OPENCL SDK FOUND")
145 MESSAGE(${INTEL_OPENCL_LIBRARIES})
146 OPTION(BUILD_INTEL_OPENCL_DEMOS "Build OpenCL demos for Intel (CPU)" ON)
148 MESSAGE("INTEL OPENCL NOT FOUND")
149 OPTION(BUILD_INTEL_OPENCL_DEMOS "Build OpenCL demos for Intel (CPU)" OFF)
153 FIND_PATH(NVIDIA_OPENCL_INCLUDES CL/cl.h)
154 FIND_PATH(NVIDIA_OPENCL_ICD_CFG nvidia.icd /etc/OpenCL/vendors)
155 FIND_LIBRARY(NVIDIA_OPENCL_LIBRARIES OpenCL PATH /usr/lib64 /usr/local/lib)
156 IF (NVIDIA_OPENCL_INCLUDES AND NVIDIA_OPENCL_LIBRARIES AND NVIDIA_OPENCL_ICD_CFG)
157 MESSAGE("NVidia OPENCL FOUND")
158 MESSAGE(${NVIDIA_OPENCL_LIBRARIES})
159 OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)" ON)
161 MESSAGE("NVidia OPENCL NOT FOUND")
162 OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)" OFF)
166 ELSE(BUILD_MULTITHREADING)
167 # SET(BUILD_NVIDIA_OPENCL_DEMOS OFF CACHE BOOL "Build OpenCL demos for NVidia" FORCE)
168 # SET(BUILD_AMD_OPENCL_DEMOS OFF CACHE BOOL "Build OpenCL demos for AMD" FORCE)
169 # SET(BUILD_INTEL_OPENCL_DEMOS OFF CACHE BOOL "Build OpenCL demos for Intel (CPU)" FORCE)
170 # SET(BUILD_MINICL_OPENCL_DEMOS OFF CACHE BOOL "Build OpenCL demos for MiniCL (Generic CPU)" FORCE)
171 # SET(USE_DX11 OFF CACHE BOOL "Use DirectX 11" FORCE)
172 # SET(USE_MULTITHREADED_BENCHMARK OFF CACHE BOOL "Use Multithreaded Benchmark" FORCE)
173 ENDIF(BUILD_MULTITHREADING)
178 #SET(CMAKE_EXE_LINKER_FLAGS_INIT "/STACK:10000000 /INCREMENTAL:NO")
179 #SET(CMAKE_EXE_LINKER_FLAGS "/STACK:10000000 /INCREMENTAL:NO")
181 #MESSAGE("MSVC_INCREMENTAL_YES_FLAG"+${MSVC_INCREMENTAL_YES_FLAG})
185 IF (NOT USE_MSVC_INCREMENTAL_LINKING)
186 #MESSAGE("MSVC_INCREMENTAL_DEFAULT"+${MSVC_INCREMENTAL_DEFAULT})
187 SET( MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL:NO")
189 STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
190 SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/INCREMENTAL:NO ${replacementFlags}" )
191 MESSAGE("CMAKE_EXE_LINKER_FLAGS_DEBUG=${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
193 # STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags2 ${CMAKE_EXE_LINKER_FLAGS})
194 # SET(CMAKE_EXE_LINKER_FLAGS ${replacementFlag2})
195 # STRING(REPLACE "INCREMENTAL:YES" "" replacementFlags3 ${CMAKE_EXTRA_LINK_FLAGS})
196 # SET(CMAKE_EXTRA_LINK_FLAGS ${replacementFlag3})
199 STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags3 ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO})
200 SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${replacementFlags3})
201 SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/INCREMENTAL:NO ${replacementFlags3}" )
203 ENDIF (NOT USE_MSVC_INCREMENTAL_LINKING)
205 IF (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
206 #We statically link to reduce dependancies
207 FOREACH(flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
208 IF(${flag_var} MATCHES "/MD")
209 STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
210 ENDIF(${flag_var} MATCHES "/MD")
211 IF(${flag_var} MATCHES "/MDd")
212 STRING(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
213 ENDIF(${flag_var} MATCHES "/MDd")
215 ENDIF (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
217 OPTION(USE_MSVC_SSE "Use MSVC /arch:sse option" ON)
219 ADD_DEFINITIONS(/arch:SSE)
221 OPTION(USE_MSVC_FAST_FLOATINGPOINT "Use MSVC /fp:fast option" ON)
222 IF (USE_MSVC_FAST_FLOATINGPOINT)
223 ADD_DEFINITIONS(/fp:fast)
230 OPTION(INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES "Create MSVC projectfiles that can be distributed" OFF)
232 IF (INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES)
233 SET (LIBRARY_OUTPUT_PATH ${BULLET_PHYSICS_SOURCE_DIR}/lib CACHE PATH "Single output directory for building all libraries.")
234 SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR})
235 SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BULLET_PHYSICS_SOURCE_DIR})
236 SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BULLET_PHYSICS_SOURCE_DIR})
237 SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${BULLET_PHYSICS_SOURCE_DIR})
238 SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${BULLET_PHYSICS_SOURCE_DIR})
240 SET (LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE PATH "Single output directory for building all libraries.")
245 OPTION(INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES "Create MSVC projectfiles with relative paths" OFF)
246 OPTION(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES "Add MSVC postfix for executable names (_Debug)" OFF)
248 SET(CMAKE_DEBUG_POSTFIX "_Debug" CACHE STRING "Adds a postfix for debug-built libraries.")
249 SET(CMAKE_MINSIZEREL_POSTFIX "_MinsizeRel" CACHE STRING "Adds a postfix for MinsizeRelease-built libraries.")
250 SET(CMAKE_RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo" CACHE STRING "Adds a postfix for ReleaseWithDebug-built libraries.")
256 IF (INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES)
257 SET(CMAKE_SUPPRESS_REGENERATION 1)
258 SET(CMAKE_USE_RELATIVE_PATHS 1)
259 ENDIF(INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES)
264 OPTION(BUILD_CPU_DEMOS "Build original Bullet CPU demos" ON)
268 OPTION(INTERNAL_UPDATE_SERIALIZATION_STRUCTURES "Internal update serialization structures" OFF)
269 IF (INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
270 ADD_DEFINITIONS( -DBT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
271 ENDIF (INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
273 IF (USE_DOUBLE_PRECISION)
274 ADD_DEFINITIONS( -DBT_USE_DOUBLE_PRECISION)
275 SET( BULLET_DOUBLE_DEF "-DBT_USE_DOUBLE_PRECISION")
276 ENDIF (USE_DOUBLE_PRECISION)
278 IF(USE_GRAPHICAL_BENCHMARK)
279 ADD_DEFINITIONS( -DUSE_GRAPHICAL_BENCHMARK)
280 ENDIF (USE_GRAPHICAL_BENCHMARK)
283 OPTION(USE_GLUT "Use Glut" ON)
284 ADD_DEFINITIONS( -D_IRR_STATIC_LIB_ )
285 ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
286 ADD_DEFINITIONS( -D_CRT_SECURE_NO_DEPRECATE )
287 ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
289 IF (USE_GLUT AND MSVC)
290 string (REPLACE "/D_WINDOWS" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
291 remove_definitions(-D_WINDOWS )
297 OPTION(USE_GLUT "Use Glut" ON)
301 IF(COMMAND cmake_policy)
302 cmake_policy(SET CMP0003 NEW)
303 ENDIF(COMMAND cmake_policy)
306 # This is the shortcut to finding GLU, GLUT and OpenGL if they are properly installed on your system
307 # This should be the case.
311 MESSAGE("OPENGL FOUND")
312 MESSAGE(${OPENGL_LIBRARIES})
314 MESSAGE("OPENGL NOT FOUND")
315 SET(OPENGL_gl_LIBRARY opengl32)
316 SET(OPENGL_glu_LIBRARY glu32)
319 # ADD_DEFINITIONS(-DBT_USE_FREEGLUT)
326 MESSAGE("GLUT FOUND")
327 MESSAGE(${GLUT_glut_LIBRARY})
330 MESSAGE ("GLUT NOT FOUND not found, trying to use MINGW glut32")
331 SET(GLUT_glut_LIBRARY glut32)
332 #TODO add better GLUT detection for MinGW
338 message("Win64 using Glut/glut64.lib")
339 SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut64.lib)
341 message("Win32 using Glut/glut32.lib")
342 SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut32.lib)
344 INCLUDE_DIRECTORIES(${BULLET_PHYSICS_SOURCE_DIR}/Glut)
346 MESSAGE("GLUT NOT FOUND")
351 # This is added for linux. This should always work if everything is installed and working fine.
352 INCLUDE_DIRECTORIES(/usr/include /usr/local/include)
357 OPTION(BUILD_DEMOS "Set when you want to build the demos" ON)
359 IF(EXISTS ${BULLET_PHYSICS_SOURCE_DIR}/Demos AND IS_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR}/Demos)
366 IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES)
367 IF(EXISTS ${BULLET_PHYSICS_SOURCE_DIR}/Demos_ps3 AND IS_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR}/Demos_ps3)
368 MESSAGE("Demos_ps3 found")
375 OPTION(BUILD_EXTRAS "Set when you want to build the extras" ON)
380 #Maya Dynamica plugin is moved to http://dynamica.googlecode.com
384 IF("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")
385 OPTION(INSTALL_LIBS "Set when you want to install libraries" ON)
387 IF(APPLE AND FRAMEWORK)
388 OPTION(INSTALL_LIBS "Set when you want to install libraries" ON)
390 #by default, don't enable the 'INSTALL' option for Xcode and MSVC projectfiles
391 OPTION(INSTALL_LIBS "Set when you want to install libraries" OFF)
396 SET (LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" )
397 SET (LIB_DESTINATION "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE STRING "Library directory name")
398 ## the following are directories where stuff will be installed to
399 SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include/bullet/" CACHE PATH "The subdirectory to the header prefix")
400 SET(PKGCONFIG_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/pkgconfig/" CACHE STRING "Base directory for pkgconfig files")
402 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/bullet.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/bullet.pc @ONLY)
405 ${CMAKE_CURRENT_BINARY_DIR}/bullet.pc
407 ${PKGCONFIG_INSTALL_PREFIX})
411 #INSTALL of other files requires CMake 2.6
412 IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
413 OPTION(INSTALL_EXTRA_LIBS "Set when you want extra libraries installed" OFF)
414 ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
416 OPTION(BUILD_UNIT_TESTS "Build Unit Tests" OFF)
418 IF (BUILD_UNIT_TESTS)