CMakeLists.txt 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  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" OFF)
  9. option(ODE_WITH_OU "Build ODE with OU for threaded collision tests" ON)
  10. option(ODE_WITH_TRIMESH "Build ODE with trimesh shapes" OFF)
  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. else()
  33. set(ODE_PRECISION "dSINGLE")
  34. endif()
  35. if(ODE_WITH_TRIMESH)
  36. set(dTRIMESH_ENABLED 1)
  37. if(ODE_WITH_GIMPACT)
  38. set(dTRIMESH_GIMPACT 1)
  39. else()
  40. set(dTRIMESH_OPCODE 1)
  41. endif()
  42. endif()
  43. if(ODE_WITH_OU)
  44. set(dOU_ENABLED 1)
  45. set(dTLS_ENABLED 1)
  46. endif()
  47. configure_file(ode/src/config.h.in "${CMAKE_CURRENT_BINARY_DIR}/ode/src/config.h")
  48. configure_file(include/ode/version.h.in "${CMAKE_CURRENT_BINARY_DIR}/include/ode/version.h")
  49. configure_file(include/ode/precision.h.in "${CMAKE_CURRENT_BINARY_DIR}/include/ode/precision.h")
  50. # Demos
  51. if(ODE_BUILD_DEMOS)
  52. # TODO
  53. endif()
  54. # Tests
  55. if(ODE_BUILD_TESTS)
  56. # TODO
  57. endif()
  58. # OU
  59. if(ODE_WITH_OU)
  60. if(APPLE)
  61. add_definitions(-DMAC_OS_X_VERSION=1030)
  62. endif()
  63. add_definitions(-D_OU_NAMESPACE=odeou)
  64. add_definitions(-D_OU_FEATURE_SET=_OU_FEATURE_SET_TLS)
  65. add_definitions(-DdATOMICS_ENABLED=1)
  66. include_directories(ou/include)
  67. file(GLOB OU_SRC "ou/src/ou/*.cpp")
  68. endif()
  69. # LibCCD
  70. if(ODE_WITH_LIBCCD)
  71. configure_file(libccd/src/ccd/precision.h.in "${CMAKE_CURRENT_BINARY_DIR}/libccd/src/ccd/precision.h")
  72. include_directories(libccd/src "${CMAKE_CURRENT_BINARY_DIR}/libccd/src")
  73. if(ODE_DOUBLE_PRECISION)
  74. add_definitions(-DCCD_IDEDOUBLE)
  75. else()
  76. add_definitions(-DCCD_IDESINGLE)
  77. endif()
  78. file(GLOB LIBCCD_SRC "libccd/src/*.c")
  79. add_definitions(
  80. -DdLIBCCD_ENABLED
  81. -DdLIBCCD_INTERNAL
  82. -DdLIBCCD_BOX_CYL
  83. -DdLIBCCD_CYL_CYL
  84. -DdLIBCCD_CAP_CYL
  85. -DdLIBCCD_CONVEX_BOX
  86. -DdLIBCCD_CONVEX_CAP
  87. -DdLIBCCD_CONVEX_CYL
  88. -DdLIBCCD_CONVEX_SPHERE
  89. -DdLIBCCD_CONVEX_CONVEX
  90. )
  91. endif()
  92. include_directories(include ode/src "${CMAKE_CURRENT_BINARY_DIR}/ode/src" "${CMAKE_CURRENT_BINARY_DIR}/include")
  93. # ODE
  94. if(WIN32)
  95. if(ODE_BUILD_SHARED)
  96. add_definitions(-DODE_DLL)
  97. else()
  98. add_definitions(-DODE_LIB)
  99. endif()
  100. endif()
  101. set(ODE_SRC
  102. ode/src/nextafterf.c
  103. ode/src/array.cpp
  104. ode/src/box.cpp
  105. ode/src/capsule.cpp
  106. ode/src/collision_cylinder_box.cpp
  107. ode/src/collision_cylinder_plane.cpp
  108. ode/src/collision_cylinder_sphere.cpp
  109. ode/src/collision_kernel.cpp
  110. ode/src/collision_quadtreespace.cpp
  111. ode/src/collision_sapspace.cpp
  112. ode/src/collision_space.cpp
  113. ode/src/collision_transform.cpp
  114. ode/src/collision_trimesh_disabled.cpp
  115. ode/src/collision_util.cpp
  116. ode/src/convex.cpp
  117. ode/src/cylinder.cpp
  118. ode/src/error.cpp
  119. ode/src/heightfield.cpp
  120. ode/src/lcp.cpp
  121. ode/src/mass.cpp
  122. ode/src/mat.cpp
  123. ode/src/matrix.cpp
  124. ode/src/fastldlt.cpp
  125. ode/src/fastlsolve.cpp
  126. ode/src/fastltsolve.cpp
  127. ode/src/fastdot.cpp
  128. ode/src/memory.cpp
  129. ode/src/misc.cpp
  130. ode/src/objects.cpp
  131. ode/src/obstack.cpp
  132. ode/src/ode.cpp
  133. ode/src/odeou.cpp
  134. ode/src/odeinit.cpp
  135. ode/src/odemath.cpp
  136. ode/src/odetls.cpp
  137. ode/src/plane.cpp
  138. ode/src/quickstep.cpp
  139. ode/src/ray.cpp
  140. ode/src/rotation.cpp
  141. ode/src/sphere.cpp
  142. ode/src/step.cpp
  143. ode/src/timer.cpp
  144. ode/src/threading_base.cpp
  145. ode/src/threading_impl.cpp
  146. ode/src/threading_pool_posix.cpp
  147. ode/src/threading_pool_win.cpp
  148. ode/src/util.cpp
  149. ode/src/joints/amotor.cpp
  150. ode/src/joints/ball.cpp
  151. ode/src/joints/contact.cpp
  152. ode/src/joints/dball.cpp
  153. ode/src/joints/dhinge.cpp
  154. ode/src/joints/fixed.cpp
  155. ode/src/joints/hinge.cpp
  156. ode/src/joints/hinge2.cpp
  157. ode/src/joints/joint.cpp
  158. ode/src/joints/lmotor.cpp
  159. ode/src/joints/null.cpp
  160. ode/src/joints/piston.cpp
  161. ode/src/joints/plane2d.cpp
  162. ode/src/joints/pr.cpp
  163. ode/src/joints/pu.cpp
  164. ode/src/joints/slider.cpp
  165. ode/src/joints/transmission.cpp
  166. ode/src/joints/universal.cpp
  167. )
  168. if(ODE_WITH_DIF_EXPORT)
  169. set(ODE_SRC ${ODE_SRC} ode/src/export-dif.cpp)
  170. endif()
  171. if(ODE_WITH_TRIMESH)
  172. set(ODE_TRIMESH_SRC
  173. ode/src/collision_trimesh_internal.cpp
  174. ode/src/collision_trimesh_box.cpp
  175. ode/src/collision_trimesh_ccylinder.cpp
  176. ode/src/collision_cylinder_trimesh.cpp
  177. ode/src/collision_trimesh_ray.cpp
  178. ode/src/collision_trimesh_sphere.cpp
  179. ode/src/collision_trimesh_trimesh.cpp
  180. ode/src/collision_trimesh_plane.cpp
  181. ode/src/collision_convex_trimesh.cpp
  182. )
  183. if(ODE_WITH_GIMPACT)
  184. file(GLOB_RECURSE GIMPACT_SRC "GIMPACT/*.cpp")
  185. include_directories(GIMPACT/include)
  186. set(GIMPACT_SRC ${GIMPACT_SRC} ode/src/gimpact_contact_export_helper.cpp ode/src/collision_trimesh_gimpact.cpp)
  187. else()
  188. file(GLOB_RECURSE OPCODE_SRC "OPCODE/*.cpp")
  189. include_directories(OPCODE)
  190. set(OPCODE_SRC ${OPCODE_SRC} ode/src/collision_trimesh_opcode.cpp)
  191. endif()
  192. endif()
  193. if(ODE_BUILD_SHARED)
  194. add_library(ode SHARED ${ODE_SRC} ${ODE_TRIMESH_SRC} ${OU_SRC} ${GIMPACT_SRC} ${OPCODE_SRC} ${LIBCCD_SRC})
  195. else()
  196. add_library(ode STATIC ${ODE_SRC} ${ODE_TRIMESH_SRC} ${OU_SRC} ${GIMPACT_SRC} ${OPCODE_SRC} ${LIBCCD_SRC})
  197. endif()