Tizen 2.1 base
[platform/upstream/libbullet.git] / Extras / PhysicsEffects / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.4.3)\r
2 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)\r
3 \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
6 \r
7 PROJECT(PHYSICS_EFFECTS)\r
8 SET(PHYSICS_EFFECTS_VERSION 2.0)\r
9 \r
10 SET(BULLET_VERSION 2.80)\r
11 \r
12 SET(BULLET_PHYSICS_SOURCE_DIR "../..")\r
13 \r
14 IF(COMMAND cmake_policy)\r
15    cmake_policy(SET CMP0003 NEW)\r
16 ENDIF(COMMAND cmake_policy)\r
17 \r
18 INCLUDE_DIRECTORIES( ${PHYSICS_EFFECTS_SOURCE_DIR}/include  )\r
19 \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
24 \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
27 \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
31 \r
32 ADD_DEFINITIONS(-DPFX_USE_FREE_VECTORMATH)\r
33 \r
34 IF (USE_MULTITHREADED_BENCHMARK)\r
35         ADD_DEFINITIONS(-DUSE_PARALLEL_SOLVER_BENCHMARK -DUSE_PARALLEL_DISPATCHER_BENCHMARK)\r
36 ENDIF()\r
37 \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
40 \r
41 OPTION(USE_CUSTOM_VECTOR_MATH "Use custom vectormath library" OFF)\r
42 \r
43 IF (USE_CUSTOM_VECTOR_MATH)\r
44         ADD_DEFINITIONS(-DUSE_SYSTEM_VECTORMATH)\r
45         IF(WIN32)\r
46         SET (VECTOR_MATH_INCLUDE ${BULLET_PHYSICS_SOURCE_DIR}/src/vectormath/sse CACHE PATH "Vector Math library include path.")\r
47         ELSE(WIN32)\r
48         SET (VECTOR_MATH_INCLUDE ${BULLET_PHYSICS_SOURCE_DIR}/src/vectormath/scalar CACHE PATH "Vector Math library include path.")\r
49         ENDIF(WIN32)\r
50 ENDIF(USE_CUSTOM_VECTOR_MATH)\r
51 \r
52 IF (MSVC)\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
56         ELSE()\r
57                 OPTION(USE_DX11 "Use DirectX 11"        OFF)\r
58         ENDIF()\r
59 ENDIF(MSVC)\r
60 \r
61 \r
62 #SET(CMAKE_EXE_LINKER_FLAGS_INIT    "/STACK:10000000 /INCREMENTAL:NO")  \r
63 #SET(CMAKE_EXE_LINKER_FLAGS    "/STACK:10000000 /INCREMENTAL:NO")       \r
64 \r
65 #MESSAGE("MSVC_INCREMENTAL_YES_FLAG"+${MSVC_INCREMENTAL_YES_FLAG})\r
66 \r
67 \r
68 IF(MSVC)\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
72                  \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
76         \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
81                 \r
82                 \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
86         \r
87         ENDIF (NOT USE_MSVC_INCREMENTAL_LINKING)\r
88 \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
100 \r
101         OPTION(USE_MSVC_SSE "Use MSVC /arch:sse option" ON)\r
102         IF (USE_MSVC_SSE)\r
103                 ADD_DEFINITIONS(/arch:SSE)\r
104         ENDIF()\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
108   ENDIF()\r
109 ENDIF(MSVC)\r
110 \r
111 \r
112 \r
113 IF (WIN32)\r
114 OPTION(INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES "Create MSVC projectfiles that can be distributed" OFF)\r
115 \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
123 ELSE()\r
124         SET (LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE PATH "Single output directory for building all libraries.")\r
125 ENDIF()\r
126 \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
129 \r
130 IF(MSVC)\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
136                 IF (CMAKE_CL_64)\r
137                         SET(CMAKE_ATISTREAMSDK_LIBPATH          ${AMD_OPENCL_BASE_DIR}/lib/x86_64 )\r
138                 ELSE(CMAKE_CL_64)\r
139                         SET(CMAKE_ATISTREAMSDK_LIBPATH          ${AMD_OPENCL_BASE_DIR}/lib/x86          )\r
140                 ENDIF(CMAKE_CL_64)\r
141                 OPTION(BUILD_AMD_OPENCL_DEMOS "Build OpenCL demos for AMD (GPU or CPU)" ON)\r
142         ELSE()\r
143                 OPTION(BUILD_AMD_OPENCL_DEMOS "Build OpenCL demos for AMD (GPU or CPU)" OFF)\r
144         ENDIF()\r
145         \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
150                 IF (CMAKE_CL_64)\r
151                         SET(CMAKE_NVSDKCOMPUTE_LIBPATH          ${NVIDIA_OPENCL_BASE_DIR}/OpenCL/common/lib/x64 )\r
152                 ELSE(CMAKE_CL_64)\r
153                         SET(CMAKE_NVSDKCOMPUTE_LIBPATH          ${NVIDIA_OPENCL_BASE_DIR}/OpenCL/common/lib/Win32       )\r
154                 ENDIF(CMAKE_CL_64)\r
155         SET(NVIDIA_OPENCL_LIBRARIES             ${CMAKE_NVSDKCOMPUTE_LIBPATH}/OpenCL.lib)\r
156         \r
157                 OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)"  ON)\r
158         ELSE()\r
159                 OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)"  OFF)\r
160         ENDIF()\r
161 ENDIF()\r
162 \r
163 \r
164 \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
169 \r
170 ENDIF (WIN32)\r
171 \r
172 IF (MSVC OR APPLE)\r
173         OPTION(BUILD_MINICL_OPENCL_DEMOS "Build OpenCL demos for MiniCL (Generic CPU)"  ON)\r
174 ELSE()\r
175         OPTION(BUILD_MINICL_OPENCL_DEMOS "Build OpenCL demos for MiniCL (Generic CPU)" OFF)\r
176         \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
183         ELSE ()\r
184                 MESSAGE("OPENCL NOT FOUND")\r
185                 OPTION(BUILD_NVIDIA_OPENCL_DEMOS "Build OpenCL demos for NVidia (GPU)"  OFF)\r
186         ENDIF ()\r
187 ENDIF()\r
188 \r
189 OPTION(BUILD_CPU_DEMOS "Build original Bullet CPU demos"        ON)\r
190 \r
191 \r
192 \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
197 \r
198 IF (USE_DOUBLE_PRECISION)\r
199 ADD_DEFINITIONS( -DBT_USE_DOUBLE_PRECISION)\r
200 ENDIF (USE_DOUBLE_PRECISION)\r
201 \r
202 IF(USE_GRAPHICAL_BENCHMARK)\r
203 ADD_DEFINITIONS( -DUSE_GRAPHICAL_BENCHMARK)\r
204 ENDIF (USE_GRAPHICAL_BENCHMARK)\r
205 \r
206 IF (WIN32)\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
212 \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
216 ENDIF()\r
217 \r
218 \r
219 \r
220 ELSE(WIN32)\r
221 OPTION(USE_GLUT "Use Glut"      ON)\r
222 ENDIF(WIN32)\r
223 \r
224    \r
225 IF(COMMAND cmake_policy)\r
226    cmake_policy(SET CMP0003 NEW)\r
227 ENDIF(COMMAND cmake_policy)\r
228    \r
229 \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
232 \r
233 FIND_PACKAGE(OpenGL)\r
234 IF (OPENGL_FOUND)\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
242 \r
243 # ADD_DEFINITIONS(-DBT_USE_FREEGLUT)\r
244 \r
245 FIND_PACKAGE(GLU)\r
246 \r
247 IF (USE_GLUT)\r
248         FIND_PACKAGE(GLUT)\r
249         IF (GLUT_FOUND)\r
250                 MESSAGE("GLUT FOUND")\r
251                 MESSAGE(${GLUT_glut_LIBRARY})\r
252         ELSE (GLUT_FOUND)\r
253                 IF (MINGW)\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
258                 ENDIF (MINGW)\r
259                 IF (MSVC)\r
260                         SET(GLUT_FOUND TRUE)\r
261                         IF (CMAKE_CL_64)\r
262                                 message("Win64 using Glut/glut64.lib")\r
263                                 SET(GLUT_glut_LIBRARY ${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut64.lib)\r
264                         ELSE(CMAKE_CL_64)\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
269                 ELSE()\r
270                         MESSAGE("GLUT NOT FOUND")       \r
271                 ENDIF (MSVC)\r
272         ENDIF (GLUT_FOUND)\r
273 \r
274         IF(NOT WIN32)   \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
277         ENDIF()\r
278 ENDIF(USE_GLUT)\r
279 \r
280 \r
281 OPTION(BUILD_DEMOS "Set when you want to build the demos" ON)\r
282 IF(BUILD_DEMOS)\r
283         IF(EXISTS ${PHYSICS_EFFECTS_SOURCE_DIR}/sample AND IS_DIRECTORY ${PHYSICS_EFFECTS_SOURCE_DIR}/sample)\r
284                 SUBDIRS(sample)\r
285         ENDIF()\r
286 ENDIF(BUILD_DEMOS)\r
287 \r
288 #  "Demos_ps3")\r
289 IF (MSVC)\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
293                         SUBDIRS(Demos_ps3)\r
294                 ENDIF()\r
295         ENDIF()\r
296 ENDIF(MSVC)\r
297 \r
298 \r
299 #OPTION(BUILD_EXTRAS "Set when you want to build the extras" OFF)\r
300 #IF(BUILD_EXTRAS)\r
301 #  SUBDIRS(Extras)\r
302 #ENDIF(BUILD_EXTRAS)\r
303 \r
304 #Maya Dynamica plugin is moved to http://dynamica.googlecode.com\r
305 \r
306 SUBDIRS(src)\r
307 \r
308 IF("${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")\r
309         OPTION(INSTALL_LIBS "Set when you want to install libraries" OFF)\r
310 ELSE()\r
311         IF(APPLE AND FRAMEWORK)\r
312                 OPTION(INSTALL_LIBS "Set when you want to install libraries" ON)\r
313         ELSE()\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
316         ENDIF()\r
317 ENDIF()\r
318 \r
319 IF(INSTALL_LIBS)\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
325         IF(NOT WIN32)\r
326           CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/bullet.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/bullet.pc @ONLY)\r
327         INSTALL(\r
328             FILES\r
329         ${CMAKE_CURRENT_BINARY_DIR}/bullet.pc\r
330         DESTINATION\r
331         ${PKGCONFIG_INSTALL_PREFIX})\r
332         ENDIF(NOT WIN32)\r
333 ENDIF(INSTALL_LIBS)\r
334 \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
339 \r
340 OPTION(BUILD_UNIT_TESTS "Build Unit Tests"      OFF)\r
341 \r
342 IF (BUILD_UNIT_TESTS)\r
343         SUBDIRS(UnitTests)\r
344 ENDIF()\r