1 cmake_minimum_required(VERSION 2.4.3)
\r
2 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
\r
4 #this line has to appear before 'PROJECT' in order to be able to disable incremental linking
\r
5 SET(MSVC_INCREMENTAL_DEFAULT ON)
\r
7 PROJECT(PHYSICS_EFFECTS)
\r
8 SET(PHYSICS_EFFECTS_VERSION 2.0)
\r
10 SET(BULLET_VERSION 2.80)
\r
12 SET(BULLET_PHYSICS_SOURCE_DIR "../..")
\r
14 IF(COMMAND cmake_policy)
\r
15 cmake_policy(SET CMP0003 NEW)
\r
16 ENDIF(COMMAND cmake_policy)
\r
18 INCLUDE_DIRECTORIES( ${PHYSICS_EFFECTS_SOURCE_DIR}/include )
\r
20 IF (NOT CMAKE_BUILD_TYPE)
\r
21 # SET(CMAKE_BUILD_TYPE "Debug")
\r
22 SET(CMAKE_BUILD_TYPE "Release")
\r
23 ENDIF (NOT CMAKE_BUILD_TYPE)
\r
25 SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
\r
26 #MESSAGE("CMAKE_CXX_FLAGS_DEBUG="+${CMAKE_CXX_FLAGS_DEBUG})
\r
28 OPTION(USE_DOUBLE_PRECISION "Use double precision" OFF)
\r
29 OPTION(USE_GRAPHICAL_BENCHMARK "Use Graphical Benchmark" ON)
\r
30 OPTION(USE_MULTITHREADED_BENCHMARK "Use Multithreaded Benchmark" OFF)
\r
32 ADD_DEFINITIONS(-DPFX_USE_FREE_VECTORMATH)
\r
34 IF (USE_MULTITHREADED_BENCHMARK)
\r
35 ADD_DEFINITIONS(-DUSE_PARALLEL_SOLVER_BENCHMARK -DUSE_PARALLEL_DISPATCHER_BENCHMARK)
\r
38 OPTION(USE_MSVC_RUNTIME_LIBRARY_DLL "Use MSVC Runtime Library DLL (/MD or /MDd)" ON)
\r
39 OPTION(USE_MSVC_INCREMENTAL_LINKING "Use MSVC Incremental Linking" OFF)
\r
41 OPTION(USE_CUSTOM_VECTOR_MATH "Use custom vectormath library" OFF)
\r
43 IF (USE_CUSTOM_VECTOR_MATH)
\r
44 ADD_DEFINITIONS(-DUSE_SYSTEM_VECTORMATH)
\r
46 SET (VECTOR_MATH_INCLUDE ${BULLET_PHYSICS_SOURCE_DIR}/src/vectormath/sse CACHE PATH "Vector Math library include path.")
\r
48 SET (VECTOR_MATH_INCLUDE ${BULLET_PHYSICS_SOURCE_DIR}/src/vectormath/scalar CACHE PATH "Vector Math library include path.")
\r
50 ENDIF(USE_CUSTOM_VECTOR_MATH)
\r
53 FIND_PATH(DIRECTX_SDK_BASE_DIR Include/D3D11.h PATH $ENV{DXSDK_DIR} )
\r
54 IF(DIRECTX_SDK_BASE_DIR)
\r
55 OPTION(USE_DX11 "Use DirectX 11" ON)
\r
57 OPTION(USE_DX11 "Use DirectX 11" OFF)
\r
62 #SET(CMAKE_EXE_LINKER_FLAGS_INIT "/STACK:10000000 /INCREMENTAL:NO")
\r
63 #SET(CMAKE_EXE_LINKER_FLAGS "/STACK:10000000 /INCREMENTAL:NO")
\r
65 #MESSAGE("MSVC_INCREMENTAL_YES_FLAG"+${MSVC_INCREMENTAL_YES_FLAG})
\r
69 IF (NOT USE_MSVC_INCREMENTAL_LINKING)
\r
70 #MESSAGE("MSVC_INCREMENTAL_DEFAULT"+${MSVC_INCREMENTAL_DEFAULT})
\r
71 SET( MSVC_INCREMENTAL_YES_FLAG "/INCREMENTAL:NO")
\r
73 STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags ${CMAKE_EXE_LINKER_FLAGS_DEBUG})
\r
74 SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/INCREMENTAL:NO ${replacementFlags}" )
\r
75 MESSAGE("CMAKE_EXE_LINKER_FLAGS_DEBUG=${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
\r
77 # STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags2 ${CMAKE_EXE_LINKER_FLAGS})
\r
78 # SET(CMAKE_EXE_LINKER_FLAGS ${replacementFlag2})
\r
79 # STRING(REPLACE "INCREMENTAL:YES" "" replacementFlags3 ${CMAKE_EXTRA_LINK_FLAGS})
\r
80 # SET(CMAKE_EXTRA_LINK_FLAGS ${replacementFlag3})
\r
83 STRING(REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" replacementFlags3 ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO})
\r
84 SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${replacementFlags3})
\r
85 SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/INCREMENTAL:NO ${replacementFlags3}" )
\r
87 ENDIF (NOT USE_MSVC_INCREMENTAL_LINKING)
\r
89 IF (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
\r
90 #We statically link to reduce dependancies
\r
91 FOREACH(flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
\r
92 IF(${flag_var} MATCHES "/MD")
\r
93 STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
\r
94 ENDIF(${flag_var} MATCHES "/MD")
\r
95 IF(${flag_var} MATCHES "/MDd")
\r
96 STRING(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
\r
97 ENDIF(${flag_var} MATCHES "/MDd")
\r
98 ENDFOREACH(flag_var)
\r
99 ENDIF (NOT USE_MSVC_RUNTIME_LIBRARY_DLL)
\r
101 OPTION(USE_MSVC_SSE "Use MSVC /arch:sse option" ON)
\r
103 ADD_DEFINITIONS(/arch:SSE)
\r
105 OPTION(USE_MSVC_FAST_FLOATINGPOINT "Use MSVC /fp:fast option" ON)
\r
106 IF (USE_MSVC_FAST_FLOATINGPOINT)
\r
107 ADD_DEFINITIONS(/fp:fast)
\r
114 OPTION(INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES "Create MSVC projectfiles that can be distributed" OFF)
\r
116 IF (INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES)
\r
117 SET (LIBRARY_OUTPUT_PATH ${BULLET_PHYSICS_SOURCE_DIR}/lib CACHE PATH "Single output directory for building all libraries.")
\r
118 SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BULLET_PHYSICS_SOURCE_DIR})
\r
119 SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BULLET_PHYSICS_SOURCE_DIR})
\r
120 SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BULLET_PHYSICS_SOURCE_DIR})
\r
121 SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${BULLET_PHYSICS_SOURCE_DIR})
\r
122 SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${BULLET_PHYSICS_SOURCE_DIR})
\r
124 SET (LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE PATH "Single output directory for building all libraries.")
\r
127 OPTION(INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES "Create MSVC projectfiles with relative paths" OFF)
\r
128 OPTION(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES "Add MSVC postfix for executable names (_Debug)" OFF)
\r
131 FIND_PATH(AMD_OPENCL_BASE_DIR include/CL/cl.h PATH $ENV{ATISTREAMSDKROOT} )
\r
132 IF(AMD_OPENCL_BASE_DIR)
\r
133 #AMD adds an extras slash at the end of the ATISTREAMSDKROOT variable
\r
134 SET(AMD_OPENCL_INCLUDES ${AMD_OPENCL_BASE_DIR}/include )
\r
135 MESSAGE(${AMD_OPENCL_INCLUDES})
\r
137 SET(CMAKE_ATISTREAMSDK_LIBPATH ${AMD_OPENCL_BASE_DIR}/lib/x86_64 )
\r
139 SET(CMAKE_ATISTREAMSDK_LIBPATH ${AMD_OPENCL_BASE_DIR}/lib/x86 )
\r
141 OPTION(BUILD_AMD_OPENCL_DEMOS "Build OpenCL demos for AMD (GPU or CPU)" ON)
\r
143 OPTION(BUILD_AMD_OPENCL_DEMOS "Build OpenCL demos for AMD (GPU or CPU)" OFF)
\r
146 FIND_PATH(NVIDIA_OPENCL_BASE_DIR OpenCL/common/inc/CL/cl.h PATH $ENV{NVSDKCOMPUTE_ROOT} )
\r
147 IF(NVIDIA_OPENCL_BASE_DIR)
\r
148 SET(NVIDIA_OPENCL_INCLUDES ${NVIDIA_OPENCL_BASE_DIR}/OpenCL/common/inc )
\r
149 MESSAGE(${NVIDIA_OPENCL_INCLUDES})
\r
151 SET(CMAKE_NVSDKCOMPUTE_LIBPATH ${NVIDIA_OPENCL_BASE_DIR}/OpenCL/common/lib/x64 )
\r
153 SET(CMAKE_NVSDKCOMPUTE_LIBPATH ${NVIDIA_OPENCL_BASE_DIR}/OpenCL/common/lib/Win32 )
\r
155 SET(NVIDIA_OPENCL_LIBRARIES ${CMAKE_NVSDKCOMPUTE_LIBPATH}/OpenCL.lib)
\r
157 OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)" ON)
\r
159 OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)" OFF)
\r
165 IF (INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES)
\r
166 SET(CMAKE_SUPPRESS_REGENERATION 1)
\r
167 SET(CMAKE_USE_RELATIVE_PATHS 1)
\r
168 ENDIF(INTERNAL_CREATE_MSVC_RELATIVE_PATH_PROJECTFILES)
\r
173 OPTION(BUILD_MINICL_OPENCL_DEMOS "Build OpenCL demos for MiniCL (Generic CPU)" ON)
\r
175 OPTION(BUILD_MINICL_OPENCL_DEMOS "Build OpenCL demos for MiniCL (Generic CPU)" OFF)
\r
177 FIND_PATH(NVIDIA_OPENCL_INCLUDES CL/cl.h)
\r
178 FIND_LIBRARY(NVIDIA_OPENCL_LIBRARIES OpenCL PATH /usr/lib /usr/local/lib)
\r
179 IF (NVIDIA_OPENCL_INCLUDES AND NVIDIA_OPENCL_LIBRARIES)
\r
180 MESSAGE("OPENCL FOUND")
\r
181 MESSAGE(${NVIDIA_OPENCL_LIBRARIES})
\r
182 OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)" ON)
\r
184 MESSAGE("OPENCL NOT FOUND")
\r
185 OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)" OFF)
\r
189 OPTION(BUILD_CPU_DEMOS "Build original Bullet CPU demos" ON)
\r
193 OPTION(INTERNAL_UPDATE_SERIALIZATION_STRUCTURES "Internal update serialization structures" OFF)
\r
194 IF (INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
\r
195 ADD_DEFINITIONS( -DBT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
\r
196 ENDIF (INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
\r
198 IF (USE_DOUBLE_PRECISION)
\r
199 ADD_DEFINITIONS( -DBT_USE_DOUBLE_PRECISION)
\r
200 ENDIF (USE_DOUBLE_PRECISION)
\r
202 IF(USE_GRAPHICAL_BENCHMARK)
\r
203 ADD_DEFINITIONS( -DUSE_GRAPHICAL_BENCHMARK)
\r
204 ENDIF (USE_GRAPHICAL_BENCHMARK)
\r
207 OPTION(USE_GLUT "Use Glut" ON)
\r
208 ADD_DEFINITIONS( -D_IRR_STATIC_LIB_ )
\r
209 ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
\r
210 ADD_DEFINITIONS( -D_CRT_SECURE_NO_DEPRECATE )
\r
211 ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
\r
213 IF (USE_GLUT AND MSVC)
\r
214 string (REPLACE "/D_WINDOWS" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
\r
215 remove_definitions(-D_WINDOWS )
\r
221 OPTION(USE_GLUT "Use Glut" ON)
\r
225 IF(COMMAND cmake_policy)
\r
226 cmake_policy(SET CMP0003 NEW)
\r
227 ENDIF(COMMAND cmake_policy)
\r
230 # This is the shortcut to finding GLU, GLUT and OpenGL if they are properly installed on your system
\r
231 # This should be the case.
\r
233 FIND_PACKAGE(OpenGL)
\r
235 MESSAGE("OPENGL FOUND")
\r
236 MESSAGE(${OPENGL_LIBRARIES})
\r
237 ELSE (OPENGL_FOUND)
\r
238 MESSAGE("OPENGL NOT FOUND")
\r
239 SET(OPENGL_gl_LIBRARY opengl32)
\r
240 SET(OPENGL_glu_LIBRARY glu32)
\r
241 ENDIF (OPENGL_FOUND)
\r
243 # ADD_DEFINITIONS(-DBT_USE_FREEGLUT)
\r
250 MESSAGE("GLUT FOUND")
\r
251 MESSAGE(${GLUT_glut_LIBRARY})
\r
254 MESSAGE ("GLUT NOT FOUND not found, trying to use MINGW glut32")
\r
255 SET(GLUT_glut_LIBRARY glut32)
\r
256 #TODO add better GLUT detection for MinGW
\r
257 SET(GLUT_FOUND TRUE)
\r
260 SET(GLUT_FOUND TRUE)
\r
262 message("Win64 using Glut/glut64.lib")
\r
263 SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut64.lib)
\r
265 message("Win32 using Glut/glut32.lib")
\r
266 SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut32.lib)
\r
267 ENDIF (CMAKE_CL_64)
\r
268 INCLUDE_DIRECTORIES(${BULLET_PHYSICS_SOURCE_DIR}/Glut)
\r
270 MESSAGE("GLUT NOT FOUND")
\r
275 # This is added for linux. This should always work if everything is installed and working fine.
\r
276 INCLUDE_DIRECTORIES(/usr/include /usr/local/include)
\r
281 OPTION(BUILD_DEMOS "Set when you want to build the demos" ON)
\r
283 IF(EXISTS ${PHYSICS_EFFECTS_SOURCE_DIR}/sample AND IS_DIRECTORY ${PHYSICS_EFFECTS_SOURCE_DIR}/sample)
\r
290 IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES)
\r
291 IF(EXISTS ${PHYSICS_EFFECTS_SOURCE_DIR}/Demos_ps3 AND IS_DIRECTORY ${PHYSICS_EFFECTS_SOURCE_DIR}/Demos_ps3)
\r
292 MESSAGE("Demos_ps3 found")
\r
299 #OPTION(BUILD_EXTRAS "Set when you want to build the extras" OFF)
\r
302 #ENDIF(BUILD_EXTRAS)
\r
304 #Maya Dynamica plugin is moved to http://dynamica.googlecode.com
\r
308 IF("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")
\r
309 OPTION(INSTALL_LIBS "Set when you want to install libraries" OFF)
\r
311 IF(APPLE AND FRAMEWORK)
\r
312 OPTION(INSTALL_LIBS "Set when you want to install libraries" ON)
\r
314 #by default, don't enable the 'INSTALL' option for Xcode and MSVC projectfiles
\r
315 OPTION(INSTALL_LIBS "Set when you want to install libraries" OFF)
\r
320 SET (LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" )
\r
321 SET (LIB_DESTINATION "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE STRING "Library directory name")
\r
322 ## the following are directories where stuff will be installed to
\r
323 SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include/bullet/" CACHE PATH "The subdirectory to the header prefix")
\r
324 SET(PKGCONFIG_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/pkgconfig/" CACHE STRING "Base directory for pkgconfig files")
\r
326 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/bullet.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/bullet.pc @ONLY)
\r
329 ${CMAKE_CURRENT_BINARY_DIR}/bullet.pc
\r
331 ${PKGCONFIG_INSTALL_PREFIX})
\r
333 ENDIF(INSTALL_LIBS)
\r
335 #INSTALL of other files requires CMake 2.6
\r
336 IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
\r
337 OPTION(INSTALL_EXTRA_LIBS "Set when you want extra libraries installed" OFF)
\r
338 ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
\r
340 OPTION(BUILD_UNIT_TESTS "Build Unit Tests" OFF)
\r
342 IF (BUILD_UNIT_TESTS)
\r