CMakeLists.txt 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. cmake_minimum_required(VERSION 3.0.0)
  2. project(ode C CXX)
  3. # Options
  4. option(ODE_BUILD_DEMOS "Build ODE demos" OFF)
  5. option(ODE_BUILD_TESTS "Build ODE tests" OFF)
  6. option(ODE_WITH_DIF_EXPORT "Build ODE with DIF export" OFF)
  7. option(ODE_WITH_GIMPACT "Build ODE with GIMPACT instead of OPCODE for trimesh collisions (if enabled)" OFF)
  8. option(ODE_WITH_LIBCCD "Build ODE with libccd for extra collision tests" ON)
  9. option(ODE_WITH_OU "Build ODE with OU for threaded collision tests" ON)
  10. option(ODE_WITH_TRIMESH "Build ODE with trimesh shapes" ON)
  11. option(ODE_BUILD_SHARED "Build a shared library for ODE" OFF)
  12. option(ODE_DOUBLE_PRECISION "Build ODE with double precision math instead of single precision" OFF)
  13. # Generated headers
  14. include(CheckFunctionExists)
  15. include(CheckIncludeFiles)
  16. check_function_exists(alloca C_ALLOCA)
  17. check_function_exists(clock_gettime HAVE_CLOCK_GETTIME)
  18. check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
  19. check_function_exists(isnan HAVE_ISNAN)
  20. check_function_exists(isnanf HAVE_ISNANF)
  21. check_function_exists(_isnan HAVE__ISNAN)
  22. check_function_exists(_isnanf HAVE__ISNANF)
  23. check_function_exists(pthread_attr_setstacklazy HAVE_PTHREAD_ATTR_SETSTACKLAZY)
  24. check_include_files(alloca.h HAVE_ALLOCA_H)
  25. check_include_files(malloc.h HAVE_MALLOC_H)
  26. check_include_files(stdint.h HAVE_STDINT_H)
  27. check_include_files(inttypes.h HAVE_INTTYPES_H)
  28. check_include_files(sys/time.h HAVE_SYS_TIME_H)
  29. check_include_files(unistd.h HAVE_UNISTD_H)
  30. if(ODE_DOUBLE_PRECISION)
  31. set(ODE_PRECISION "dDOUBLE")
  32. set(CCD_PRECISION "CCD_DOUBLE")
  33. else()
  34. set(ODE_PRECISION "dSINGLE")
  35. set(CCD_PRECISION "CCD_SINGLE")
  36. endif()
  37. if(ODE_WITH_TRIMESH)
  38. set(dTRIMESH_ENABLED 1)
  39. if(ODE_WITH_GIMPACT)
  40. set(dTRIMESH_GIMPACT 1)
  41. else()
  42. set(dTRIMESH_OPCODE 1)
  43. endif()
  44. endif()
  45. if(ODE_WITH_OU)
  46. set(dOU_ENABLED 1)
  47. set(dTLS_ENABLED 1)
  48. endif()
  49. configure_file(ode/src/config.h.in "${CMAKE_CURRENT_BINARY_DIR}/ode/src/config.h")
  50. configure_file(include/ode/version.h.in "${CMAKE_CURRENT_BINARY_DIR}/include/ode/version.h")
  51. configure_file(include/ode/precision.h.in "${CMAKE_CURRENT_BINARY_DIR}/include/ode/precision.h")
  52. # Demos
  53. if(ODE_BUILD_DEMOS)
  54. # TODO
  55. endif()
  56. # Tests
  57. if(ODE_BUILD_TESTS)
  58. # TODO
  59. endif()
  60. # OU
  61. if(ODE_WITH_OU)
  62. if(APPLE)
  63. add_definitions(-DMAC_OS_X_VERSION=1030)
  64. endif()
  65. add_definitions(-D_OU_NAMESPACE=odeou)
  66. add_definitions(-D_OU_FEATURE_SET=_OU_FEATURE_SET_TLS)
  67. add_definitions(-DdATOMICS_ENABLED=1)
  68. include_directories(ou/include)
  69. file(GLOB OU_SRC "ou/src/ou/*.cpp")
  70. endif()
  71. # LibCCD
  72. if(ODE_WITH_LIBCCD)
  73. include_directories(libccd/src)
  74. include_directories("libccd/src/custom" "${CMAKE_CURRENT_BINARY_DIR}/libccd/src")
  75. configure_file(libccd/src/ccd/precision.h.in "${CMAKE_CURRENT_BINARY_DIR}/libccd/src/ccd/precision.h")
  76. file(GLOB LIBCCD_SRC "libccd/src/*.c")
  77. add_definitions(
  78. -DdLIBCCD_ENABLED
  79. -DdLIBCCD_INTERNAL
  80. -DdLIBCCD_BOX_CYL
  81. -DdLIBCCD_CYL_CYL
  82. -DdLIBCCD_CAP_CYL
  83. -DdLIBCCD_CONVEX_BOX
  84. -DdLIBCCD_CONVEX_CAP
  85. -DdLIBCCD_CONVEX_CYL
  86. -DdLIBCCD_CONVEX_SPHERE
  87. -DdLIBCCD_CONVEX_CONVEX
  88. )
  89. endif()
  90. include_directories(include ode/src "${CMAKE_CURRENT_BINARY_DIR}/ode/src" "${CMAKE_CURRENT_BINARY_DIR}/include")
  91. # ODE
  92. if(WIN32)
  93. if(ODE_BUILD_SHARED)
  94. add_definitions(-DODE_DLL)
  95. else()
  96. add_definitions(-DODE_LIB)
  97. endif()
  98. endif()
  99. set(ODE_SRC
  100. ode/src/nextafterf.c
  101. ode/src/array.cpp
  102. ode/src/box.cpp
  103. ode/src/capsule.cpp
  104. ode/src/collision_cylinder_box.cpp
  105. ode/src/collision_cylinder_plane.cpp
  106. ode/src/collision_cylinder_sphere.cpp
  107. ode/src/collision_kernel.cpp
  108. ode/src/collision_quadtreespace.cpp
  109. ode/src/collision_sapspace.cpp
  110. ode/src/collision_space.cpp
  111. ode/src/collision_transform.cpp
  112. ode/src/collision_trimesh_disabled.cpp
  113. ode/src/collision_util.cpp
  114. ode/src/convex.cpp
  115. ode/src/cylinder.cpp
  116. ode/src/error.cpp
  117. ode/src/heightfield.cpp
  118. ode/src/lcp.cpp
  119. ode/src/mass.cpp
  120. ode/src/mat.cpp
  121. ode/src/matrix.cpp
  122. ode/src/fastldltfactor.cpp
  123. ode/src/fastlsolve.cpp
  124. ode/src/fastltsolve.cpp
  125. ode/src/fastdot.cpp
  126. ode/src/memory.cpp
  127. ode/src/misc.cpp
  128. ode/src/objects.cpp
  129. ode/src/obstack.cpp
  130. ode/src/ode.cpp
  131. ode/src/odeou.cpp
  132. ode/src/odeinit.cpp
  133. ode/src/odemath.cpp
  134. ode/src/odetls.cpp
  135. ode/src/plane.cpp
  136. ode/src/quickstep.cpp
  137. ode/src/ray.cpp
  138. ode/src/rotation.cpp
  139. ode/src/sphere.cpp
  140. ode/src/step.cpp
  141. ode/src/timer.cpp
  142. ode/src/threading_base.cpp
  143. ode/src/threading_impl.cpp
  144. ode/src/threading_pool_posix.cpp
  145. ode/src/threading_pool_win.cpp
  146. ode/src/default_threading.cpp
  147. ode/src/util.cpp
  148. ode/src/joints/amotor.cpp
  149. ode/src/joints/ball.cpp
  150. ode/src/joints/contact.cpp
  151. ode/src/joints/dball.cpp
  152. ode/src/joints/dhinge.cpp
  153. ode/src/joints/fixed.cpp
  154. ode/src/joints/hinge.cpp
  155. ode/src/joints/hinge2.cpp
  156. ode/src/joints/joint.cpp
  157. ode/src/joints/lmotor.cpp
  158. ode/src/joints/null.cpp
  159. ode/src/joints/piston.cpp
  160. ode/src/joints/plane2d.cpp
  161. ode/src/joints/pr.cpp
  162. ode/src/joints/pu.cpp
  163. ode/src/joints/slider.cpp
  164. ode/src/joints/transmission.cpp
  165. ode/src/joints/universal.cpp
  166. )
  167. if(ODE_WITH_DIF_EXPORT)
  168. set(ODE_SRC ${ODE_SRC} ode/src/export-dif.cpp)
  169. endif()
  170. if(ODE_WITH_LIBCCD)
  171. set(ODE_SRC ${ODE_SRC} ode/src/collision_libccd.cpp)
  172. endif()
  173. if(ODE_WITH_TRIMESH)
  174. set(ODE_TRIMESH_SRC
  175. ode/src/collision_trimesh_internal.cpp
  176. ode/src/collision_trimesh_box.cpp
  177. ode/src/collision_trimesh_ccylinder.cpp
  178. ode/src/collision_cylinder_trimesh.cpp
  179. ode/src/collision_trimesh_ray.cpp
  180. ode/src/collision_trimesh_sphere.cpp
  181. ode/src/collision_trimesh_trimesh.cpp
  182. ode/src/collision_trimesh_plane.cpp
  183. ode/src/collision_convex_trimesh.cpp
  184. )
  185. if(ODE_WITH_GIMPACT)
  186. file(GLOB_RECURSE GIMPACT_SRC "GIMPACT/*.cpp")
  187. include_directories(GIMPACT/include)
  188. set(GIMPACT_SRC ${GIMPACT_SRC} ode/src/gimpact_contact_export_helper.cpp ode/src/collision_trimesh_gimpact.cpp)
  189. else()
  190. file(GLOB_RECURSE OPCODE_SRC "OPCODE/*.cpp")
  191. include_directories(OPCODE)
  192. set(OPCODE_SRC ${OPCODE_SRC} ode/src/collision_trimesh_opcode.cpp)
  193. endif()
  194. endif()
  195. if(ODE_BUILD_SHARED)
  196. add_library(ode SHARED ${ODE_SRC} ${ODE_TRIMESH_SRC} ${OU_SRC} ${GIMPACT_SRC} ${OPCODE_SRC} ${LIBCCD_SRC})
  197. else()
  198. add_library(ode STATIC ${ODE_SRC} ${ODE_TRIMESH_SRC} ${OU_SRC} ${GIMPACT_SRC} ${OPCODE_SRC} ${LIBCCD_SRC})
  199. endif()