ode.lua 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. package.name = "ode"
  2. package.language = "c++"
  3. package.objdir = "obj/ode"
  4. -- Differentiate between Single and Double precision
  5. for k,v in ipairs(project.configs) do
  6. if (string.find(v, "Single") ~= nil) then
  7. package.config[v].target="ode_single"
  8. end
  9. if (string.find(v, "Double") ~= nil) then
  10. package.config[v].target="ode_double"
  11. end
  12. end
  13. -- Append a "d" to the debug version of the libraries
  14. for k,v in ipairs(project.configs) do
  15. if (string.find(v, "Debug") ~= nil) then
  16. package.config[v].target=package.config[v].target.."d"
  17. end
  18. end
  19. -- Define _DEBUG/NDEBUG depending on build kind
  20. for k,v in ipairs(project.configs) do
  21. if (string.find(v, "Debug") ~= nil) then
  22. table.insert(package.config[v].defines, "_DEBUG")
  23. else
  24. -- Allow asserts to be included in release build by default
  25. -- table.insert(package.config[v].defines, "NDEBUG")
  26. end
  27. end
  28. -- Output is placed in a directory named for the target toolset.
  29. package.path = options["target"]
  30. -- Write a custom <config.h> to src/ode, based on the specified flags
  31. io.input("config-default.h")
  32. local text = io.read("*a")
  33. if (options["no-trimesh"]) then
  34. text = string.gsub(text, "#define dTRIMESH_ENABLED 1", "/* #define dTRIMESH_ENABLED 1 */")
  35. text = string.gsub(text, "#define dTRIMESH_OPCODE 1", "/* #define dTRIMESH_OPCODE 1 */")
  36. elseif (options["with-gimpact"]) then
  37. text = string.gsub(text, "#define dTRIMESH_OPCODE 1", "#define dTRIMESH_GIMPACT 1")
  38. end
  39. if (options["no-alloca"]) then
  40. text = string.gsub(text, "/%* #define dUSE_MALLOC_FOR_ALLOCA %*/", "#define dUSE_MALLOC_FOR_ALLOCA")
  41. end
  42. if (options["enable-ou"]) then
  43. text = string.gsub(text, "/%* #define dOU_ENABLED 1 %*/", "#define dOU_ENABLED 1")
  44. text = string.gsub(text, "/%* #define dATOMICS_ENABLED 1 %*/", "#define dATOMICS_ENABLED 1")
  45. text = string.gsub(text, "/%* #define dTLS_ENABLED 1 %*/", "#define dTLS_ENABLED 1")
  46. end
  47. io.output("../ode/src/config.h")
  48. io.write(text)
  49. io.close()
  50. -- Package Build Settings
  51. if (not options["enable-shared-only"]) then
  52. package.config["DebugSingleLib"].kind = "lib"
  53. package.config["ReleaseSingleLib"].kind = "lib"
  54. table.insert(package.config["DebugSingleLib"].defines, "ODE_LIB")
  55. table.insert(package.config["ReleaseSingleLib"].defines, "ODE_LIB")
  56. table.insert(package.config["DebugSingleLib"].defines, "dSINGLE")
  57. table.insert(package.config["ReleaseSingleLib"].defines, "dSINGLE")
  58. package.config["DebugDoubleLib"].kind = "lib"
  59. package.config["ReleaseDoubleLib"].kind = "lib"
  60. table.insert(package.config["DebugDoubleLib"].defines, "ODE_LIB")
  61. table.insert(package.config["ReleaseDoubleLib"].defines, "ODE_LIB")
  62. table.insert(package.config["DebugDoubleLib"].defines, "dDOUBLE")
  63. table.insert(package.config["ReleaseDoubleLib"].defines, "dDOUBLE")
  64. end
  65. if (not options["enable-static-only"]) then
  66. package.config["DebugSingleDLL"].kind = "dll"
  67. package.config["ReleaseSingleDLL"].kind = "dll"
  68. table.insert(package.config["DebugSingleDLL"].defines, "ODE_DLL")
  69. table.insert(package.config["ReleaseSingleDLL"].defines, "ODE_DLL")
  70. table.insert(package.config["DebugSingleDLL"].defines, "dSINGLE")
  71. table.insert(package.config["ReleaseSingleDLL"].defines, "dSINGLE")
  72. package.config["DebugDoubleDLL"].kind = "dll"
  73. package.config["ReleaseDoubleDLL"].kind = "dll"
  74. table.insert(package.config["DebugDoubleDLL"].defines, "ODE_DLL")
  75. table.insert(package.config["ReleaseDoubleDLL"].defines, "ODE_DLL")
  76. table.insert(package.config["DebugDoubleDLL"].defines, "dDOUBLE")
  77. table.insert(package.config["ReleaseDoubleDLL"].defines, "dDOUBLE")
  78. end
  79. package.includepaths =
  80. {
  81. "../../ode/src",
  82. "../../ode/src/joints",
  83. "../../include",
  84. "../../OPCODE",
  85. "../../GIMPACT/include",
  86. "../../ou/include"
  87. }
  88. if (windows) then
  89. table.insert(package.defines, "WIN32")
  90. end
  91. -- disable VS2005 CRT security warnings
  92. if (options["target"] == "vs2005") then
  93. table.insert(package.defines, "_CRT_SECURE_NO_DEPRECATE")
  94. end
  95. -- Build Flags
  96. package.config["DebugSingleLib"].buildflags = { }
  97. package.config["DebugSingleDLL"].buildflags = { }
  98. package.config["ReleaseSingleDLL"].buildflags = { "optimize-speed", "no-symbols", "no-frame-pointer" }
  99. package.config["ReleaseSingleLib"].buildflags = { "optimize-speed", "no-symbols", "no-frame-pointer" }
  100. package.config["DebugDoubleLib"].buildflags = { }
  101. package.config["DebugDoubleDLL"].buildflags = { }
  102. package.config["ReleaseDoubleDLL"].buildflags = { "optimize-speed", "no-symbols", "no-frame-pointer" }
  103. package.config["ReleaseDoubleLib"].buildflags = { "optimize-speed", "no-symbols", "no-frame-pointer" }
  104. if (options.target == "vs6" or options.target == "vs2002" or options.target == "vs2003") then
  105. for k,v in ipairs(project.configs) do
  106. if (string.find(v, "Lib") ~= nil) then
  107. table.insert(package.config[v].buildflags, "static-runtime")
  108. end
  109. end
  110. end
  111. -- Libraries
  112. if (windows) then
  113. table.insert(package.links, "user32")
  114. end
  115. -- Files
  116. core_files =
  117. {
  118. matchfiles("../../include/ode/*.h"),
  119. matchfiles ("../../ode/src/joints/*.h", "../../ode/src/joints/*.cpp"),
  120. matchfiles ("../../ode/src/*.h", "../../ode/src/*.c", "../../ode/src/*.cpp")
  121. }
  122. excluded_files =
  123. {
  124. "../../ode/src/collision_std.cpp",
  125. "../../ode/src/scrapbook.cpp_deprecated",
  126. "../../ode/src/stack.cpp_deprecated",
  127. "../../ode/src/stack.h_deprecated",
  128. }
  129. trimesh_files =
  130. {
  131. "../../ode/src/collision_trimesh_colliders.h",
  132. "../../ode/src/collision_trimesh_internal.h",
  133. "../../ode/src/collision_trimesh_opcode.cpp",
  134. "../../ode/src/collision_trimesh_gimpact.cpp",
  135. "../../ode/src/collision_trimesh_box.cpp",
  136. "../../ode/src/collision_trimesh_ccylinder.cpp",
  137. "../../ode/src/collision_cylinder_trimesh.cpp",
  138. "../../ode/src/collision_trimesh_distance.cpp",
  139. "../../ode/src/collision_trimesh_ray.cpp",
  140. "../../ode/src/collision_trimesh_sphere.cpp",
  141. "../../ode/src/collision_trimesh_trimesh.cpp",
  142. "../../ode/src/collision_trimesh_plane.cpp"
  143. }
  144. opcode_files =
  145. {
  146. matchrecursive("../../OPCODE/*.h", "../../OPCODE/*.cpp")
  147. }
  148. gimpact_files =
  149. {
  150. matchrecursive("../../GIMPACT/*.h", "../../GIMPACT/*.cpp")
  151. }
  152. ou_files =
  153. {
  154. matchrecursive("../../ou/*.h", "../../ou/*.cpp")
  155. }
  156. dif_files =
  157. {
  158. "../../ode/src/export-dif.cpp"
  159. }
  160. package.files = { core_files }
  161. package.excludes = { excluded_files }
  162. if (options["no-dif"]) then
  163. table.insert(package.excludes, dif_files)
  164. end
  165. if (options["no-trimesh"]) then
  166. table.insert(package.excludes, trimesh_files)
  167. else
  168. table.insert(package.files, gimpact_files)
  169. table.insert(package.files, opcode_files)
  170. end
  171. if (options["enable-ou"]) then
  172. table.insert(package.files, ou_files)
  173. -- Insert namespace redefinition in project options instead of config.h
  174. -- because OU library does not include that file itself.
  175. table.insert(package.defines, "_OU_NAMESPACE=odeou")
  176. end