resetting manifest requested domain to floor
[platform/upstream/libbullet.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.4.3)
2 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
3
4 #this line has to appear before 'PROJECT' in order to be able to disable incremental linking
5 SET(MSVC_INCREMENTAL_DEFAULT ON)
6
7 PROJECT(BULLET_PHYSICS)
8 SET(BULLET_VERSION 2.81)
9
10 IF(COMMAND cmake_policy)
11    cmake_policy(SET CMP0003 NEW)
12 ENDIF(COMMAND cmake_policy)
13
14
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
20 SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
21 #MESSAGE("CMAKE_CXX_FLAGS_DEBUG="+${CMAKE_CXX_FLAGS_DEBUG})
22
23 OPTION(USE_DOUBLE_PRECISION "Use double precision"      OFF)
24 OPTION(USE_GRAPHICAL_BENCHMARK "Use Graphical Benchmark" ON)
25
26
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)
29
30 OPTION(USE_CUSTOM_VECTOR_MATH "Use custom vectormath library" OFF)
31
32 IF (USE_CUSTOM_VECTOR_MATH)
33         ADD_DEFINITIONS(-DUSE_SYSTEM_VECTORMATH)
34         IF(WIN32)
35         SET (VECTOR_MATH_INCLUDE ${BULLET_PHYSICS_SOURCE_DIR}/src/vectormath/sse CACHE PATH "Vector Math library include path.")
36         ELSE(WIN32)
37         SET (VECTOR_MATH_INCLUDE ${BULLET_PHYSICS_SOURCE_DIR}/src/vectormath/scalar CACHE PATH "Vector Math library include path.")
38         ENDIF(WIN32)
39 ENDIF(USE_CUSTOM_VECTOR_MATH)
40
41
42 IF (APPLE OR MSVC)
43         OPTION(BUILD_MULTITHREADING "Use BulletMultiThreading" ON)
44 ELSE()
45         OPTION(BUILD_MULTITHREADING "Use BulletMultiThreading" OFF)
46 ENDIF()
47
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)
53
54         IF (MSVC OR APPLE)
55                 OPTION(BUILD_MINICL_OPENCL_DEMOS "Build OpenCL demos for MiniCL (Generic CPU)"  ON)
56         ELSE()
57                 OPTION(BUILD_MINICL_OPENCL_DEMOS "Build OpenCL demos for MiniCL (Generic CPU)" OFF)
58         ENDIF(MSVC OR APPLE)
59
60         IF(MSVC)
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)
64                 ELSE()
65                         OPTION(USE_DX11 "Use DirectX 11"        OFF)
66                 ENDIF()
67         
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")
73                         IF (CMAKE_CL_64)
74                                 SET(CMAKE_ATISTREAMSDK_LIBPATH          ${AMD_OPENCL_BASE_DIR}/lib/x86_64 )
75                         ELSE(CMAKE_CL_64)
76                                 SET(CMAKE_ATISTREAMSDK_LIBPATH          ${AMD_OPENCL_BASE_DIR}/lib/x86 )
77                         ENDIF(CMAKE_CL_64)
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)
80                         IF (CMAKE_CL_64)
81                                 SET(CMAK_GLEW_LIBRARY
82                                         ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glew64s.lib           )
83                         ELSE(CMAKE_CL_64)
84                                 SET(CMAK_GLEW_LIBRARY           ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glew32s.lib           )
85                         ENDIF(CMAKE_CL_64)
86                 ELSE()
87                         OPTION(BUILD_AMD_OPENCL_DEMOS "Build OpenCL demos for AMD (GPU or CPU)" OFF)
88                 ENDIF()
89                 
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})
95                         IF (CMAKE_CL_64)
96                                 SET(CMAKE_INTELOCLSDK_LIBPATH           ${INTEL_OPENCL_BASE_DIR}/lib/x64 )
97                         ELSE(CMAKE_CL_64)
98                                 SET(CMAKE_INTELOCLSDK_LIBPATH           ${INTEL_OPENCL_BASE_DIR}/lib/x86 )
99                         ENDIF(CMAKE_CL_64)
100                         SET(INTEL_OPENCL_LIBRARIES ${CMAKE_INTELOCLSDK_LIBPATH}/OpenCL.lib)
101                         OPTION(BUILD_INTEL_OPENCL_DEMOS "Build OpenCL demos for Intel (CPU)"    ON)
102                 ELSE()
103                         OPTION(BUILD_INTEL_OPENCL_DEMOS "Build OpenCL demos for Intel (CPU)"    OFF)
104                 ENDIF()
105                 
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})
111                         IF (CMAKE_CL_64)
112                                 SET(CMAKE_NVSDKCOMPUTE_LIBPATH          ${NVIDIA_OPENCL_BASE_DIR}/lib/x64 )
113                         ELSE(CMAKE_CL_64)
114                                 SET(CMAKE_NVSDKCOMPUTE_LIBPATH          ${NVIDIA_OPENCL_BASE_DIR}/lib/Win32     )
115                         ENDIF(CMAKE_CL_64)
116                 SET(NVIDIA_OPENCL_LIBRARIES             ${CMAKE_NVSDKCOMPUTE_LIBPATH}/OpenCL.lib)
117                 
118                         OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)"  ON)
119                 ELSE()
120                         OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)"  OFF)
121                 ENDIF()
122         ELSE(MSVC)
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})
129                         IF (CMAKE_CL_64)
130                                 SET(CMAKE_ATISTREAMSDK_LIBPATH          ${AMD_OPENCL_BASE_DIR}/lib/x86_64 )
131                         ELSE(CMAKE_CL_64)
132                                 SET(CMAKE_ATISTREAMSDK_LIBPATH          ${AMD_OPENCL_BASE_DIR}/lib/x86 )
133                         ENDIF(CMAKE_CL_64)
134                         OPTION(BUILD_AMD_OPENCL_DEMOS "Build OpenCL demos for AMD (GPU or CPU)" ON)
135                         SET(CMAKE_ATISTREAMSDK_LIBRARY          OpenCL )
136                 ELSE()
137                         OPTION(BUILD_AMD_OPENCL_DEMOS "Build OpenCL demos for AMD (GPU or CPU)" OFF)
138                 ENDIF(AMD_OPENCL_BASE_DIR)
139                 
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)
147     ELSE ()
148             MESSAGE("INTEL OPENCL NOT FOUND")
149             OPTION(BUILD_INTEL_OPENCL_DEMOS "Build OpenCL demos for Intel (CPU)"        OFF)
150     ENDIF ()
151
152
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)
160                 ELSE ()
161                         MESSAGE("NVidia OPENCL NOT FOUND")
162                         OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)"  OFF)
163                 ENDIF ()
164         ENDIF(MSVC)
165
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)
174
175
176
177
178 #SET(CMAKE_EXE_LINKER_FLAGS_INIT    "/STACK:10000000 /INCREMENTAL:NO")  
179 #SET(CMAKE_EXE_LINKER_FLAGS    "/STACK:10000000 /INCREMENTAL:NO")       
180
181 #MESSAGE("MSVC_INCREMENTAL_YES_FLAG"+${MSVC_INCREMENTAL_YES_FLAG})
182
183
184 IF(MSVC)
185         IF (NOT USE_MSVC_INCREMENTAL_LINKING)
186                 #MESSAGE("MSVC_INCREMENTAL_DEFAULT"+${MSVC_INCREMENTAL_DEFAULT})
187                 SET( MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL:NO")
188                  
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}")
192         
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}) 
197                 
198                 
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}" )
202         
203         ENDIF (NOT USE_MSVC_INCREMENTAL_LINKING)
204
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")
214                 ENDFOREACH(flag_var)
215         ENDIF (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
216
217         OPTION(USE_MSVC_SSE "Use MSVC /arch:sse option" ON)
218         IF (USE_MSVC_SSE)
219                 ADD_DEFINITIONS(/arch:SSE)
220         ENDIF()
221         OPTION(USE_MSVC_FAST_FLOATINGPOINT "Use MSVC /fp:fast option"   ON)
222         IF (USE_MSVC_FAST_FLOATINGPOINT)
223                 ADD_DEFINITIONS(/fp:fast)
224   ENDIF()
225 ENDIF(MSVC)
226
227
228
229 IF (WIN32)
230 OPTION(INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES "Create MSVC projectfiles that can be distributed" OFF)
231
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})
239 ELSE()
240         SET (LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE PATH "Single output directory for building all libraries.")
241 ENDIF()
242
243
244
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)
247
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.")
251
252
253
254
255
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)
260
261 ENDIF (WIN32)
262
263
264 OPTION(BUILD_CPU_DEMOS "Build original Bullet CPU demos"        ON)
265
266
267
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)
272
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)
277
278 IF(USE_GRAPHICAL_BENCHMARK)
279 ADD_DEFINITIONS( -DUSE_GRAPHICAL_BENCHMARK)
280 ENDIF (USE_GRAPHICAL_BENCHMARK)
281
282 IF (WIN32)
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 )
288
289 IF (USE_GLUT AND MSVC)
290         string (REPLACE "/D_WINDOWS" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
291         remove_definitions(-D_WINDOWS )
292 ENDIF()
293
294
295
296 ELSE(WIN32)
297 OPTION(USE_GLUT "Use Glut"      ON)
298 ENDIF(WIN32)
299
300    
301 IF(COMMAND cmake_policy)
302    cmake_policy(SET CMP0003 NEW)
303 ENDIF(COMMAND cmake_policy)
304    
305
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.
308
309 FIND_PACKAGE(OpenGL)
310 IF (OPENGL_FOUND)
311         MESSAGE("OPENGL FOUND")
312         MESSAGE(${OPENGL_LIBRARIES})
313 ELSE (OPENGL_FOUND)
314         MESSAGE("OPENGL NOT FOUND")
315         SET(OPENGL_gl_LIBRARY opengl32)
316         SET(OPENGL_glu_LIBRARY glu32)
317 ENDIF (OPENGL_FOUND)
318
319 # ADD_DEFINITIONS(-DBT_USE_FREEGLUT)
320
321 FIND_PACKAGE(GLU)
322
323 IF (USE_GLUT)
324         FIND_PACKAGE(GLUT)
325         IF (GLUT_FOUND)
326                 MESSAGE("GLUT FOUND")
327                 MESSAGE(${GLUT_glut_LIBRARY})
328         ELSE (GLUT_FOUND)
329                 IF (MINGW)
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
333                         SET(GLUT_FOUND TRUE)
334                 ENDIF (MINGW)
335                 IF (MSVC)
336                         SET(GLUT_FOUND TRUE)
337                         IF (CMAKE_CL_64)
338                                 message("Win64 using Glut/glut64.lib")
339                                 SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut64.lib)
340                         ELSE(CMAKE_CL_64)
341                                 message("Win32 using Glut/glut32.lib")
342                                 SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut32.lib)
343                         ENDIF (CMAKE_CL_64)
344                         INCLUDE_DIRECTORIES(${BULLET_PHYSICS_SOURCE_DIR}/Glut)
345                 ELSE()
346                         MESSAGE("GLUT NOT FOUND")       
347                 ENDIF (MSVC)
348         ENDIF (GLUT_FOUND)
349
350         IF(NOT WIN32)   
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) 
353         ENDIF()
354 ENDIF(USE_GLUT)
355
356
357 OPTION(BUILD_DEMOS "Set when you want to build the demos" ON)
358 IF(BUILD_DEMOS)
359         IF(EXISTS ${BULLET_PHYSICS_SOURCE_DIR}/Demos AND IS_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR}/Demos)
360                 SUBDIRS(Demos)
361         ENDIF()
362 ENDIF(BUILD_DEMOS)
363
364 #  "Demos_ps3")
365 IF (MSVC)
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")
369                         SUBDIRS(Demos_ps3)
370                 ENDIF()
371         ENDIF()
372 ENDIF(MSVC)
373
374
375 OPTION(BUILD_EXTRAS "Set when you want to build the extras" ON)
376 IF(BUILD_EXTRAS)
377   SUBDIRS(Extras)
378 ENDIF(BUILD_EXTRAS)
379
380 #Maya Dynamica plugin is moved to http://dynamica.googlecode.com
381
382 SUBDIRS(src)
383
384 IF("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")
385         OPTION(INSTALL_LIBS "Set when you want to install libraries" ON)
386 ELSE()
387         IF(APPLE AND FRAMEWORK)
388                 OPTION(INSTALL_LIBS "Set when you want to install libraries" ON)
389         ELSE()
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)
392         ENDIF()
393 ENDIF()
394
395 IF(INSTALL_LIBS)
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")
401         IF(NOT WIN32)
402           CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/bullet.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/bullet.pc @ONLY)
403         INSTALL(
404             FILES
405         ${CMAKE_CURRENT_BINARY_DIR}/bullet.pc
406         DESTINATION
407         ${PKGCONFIG_INSTALL_PREFIX})
408         ENDIF(NOT WIN32)
409 ENDIF(INSTALL_LIBS)
410
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)
415
416 OPTION(BUILD_UNIT_TESTS "Build Unit Tests"      OFF)
417
418 IF (BUILD_UNIT_TESTS)
419         SUBDIRS(UnitTests)
420 ENDIF()