build-bullet-natives.xml 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project name="build bullet natives" default="all" basedir="../">
  3. <!-- load cpp compiler ant task -->
  4. <taskdef resource="cpptasks.tasks" classpath="lib/antlibs/cpptasks.jar"/>
  5. <!-- load properties -->
  6. <property file="nbproject/bullet-native.properties"/>
  7. <!-- condition for mac platform check -->
  8. <condition property="isSolaris">
  9. <os name="SunOS"/>
  10. </condition>
  11. <condition property="isMac">
  12. <and>
  13. <os family="mac" />
  14. <os family="unix" />
  15. </and>
  16. </condition>
  17. <condition property="isWindows">
  18. <os family="windows" />
  19. </condition>
  20. <condition property="isLinux">
  21. <and>
  22. <os family="unix"/>
  23. <not>
  24. <os family="mac"/>
  25. </not>
  26. <not>
  27. <os name="SunOS"/>
  28. </not>
  29. </and>
  30. </condition>
  31. <condition property="is64bit">
  32. <or>
  33. <os arch="x86_64" />
  34. <os arch="amd64" />
  35. </or>
  36. </condition>
  37. <condition property="ndk-build-name" value="ndk-build.cmd" else="ndk-build">
  38. <os family="windows" />
  39. </condition>
  40. <fileset id="lib.jars" dir="${bullet.lib.dir}">
  41. <include name="**/*.jar"/>
  42. </fileset>
  43. <fileset id="lib.jme.jars" dir="${bullet.jme.dir}">
  44. <include name="**/*.jar"/>
  45. </fileset>
  46. <pathconvert property="lib.importpath">
  47. <fileset refid="lib.jars"/>
  48. <fileset refid="lib.jme.jars"/>
  49. </pathconvert>
  50. <target name="-check-conditions-pre">
  51. <available file="${bullet.folder}" property="haveBulletSource"/>
  52. <available file="build/bullet-base/libLinearMath.a" property="haveBulletLibrary"/>
  53. <available file="build/bullet-base-64/libLinearMath.a" property="haveBulletLibrary64"/>
  54. <available file="build/bullet-base-mingw/libLinearMath.a" property="haveBulletLibraryMingw"/>
  55. <available file="build/bullet-base-mingw-64/libLinearMath.a" property="haveBulletLibraryMingw64"/>
  56. <condition property="doDownloadBulletSource">
  57. <isfalse value="${haveBulletSource}"/>
  58. </condition>
  59. <condition property="doBuildMacBase">
  60. <and>
  61. <istrue value="${isMac}"/>
  62. <isfalse value="${haveBulletLibrary}"/>
  63. </and>
  64. </condition>
  65. <condition property="doBuildLinuxBase">
  66. <and>
  67. <istrue value="${isLinux}"/>
  68. <or>
  69. <isfalse value="${is64bit}"/>
  70. <istrue value="${cross.compile}"/>
  71. </or>
  72. <isfalse value="${haveBulletLibrary}"/>
  73. </and>
  74. </condition>
  75. <condition property="doBuildLinuxBase64">
  76. <and>
  77. <istrue value="${isLinux}"/>
  78. <or>
  79. <istrue value="${is64bit}"/>
  80. <istrue value="${cross.compile}"/>
  81. </or>
  82. <isfalse value="${haveBulletLibrary64}"/>
  83. </and>
  84. </condition>
  85. <condition property="doBuildLinuxBaseMingw">
  86. <and>
  87. <istrue value="${isLinux}"/>
  88. <istrue value="${cross.compile}"/>
  89. <isfalse value="${haveBulletLibraryMingw}"/>
  90. </and>
  91. </condition>
  92. <condition property="doBuildLinuxBaseMingw64">
  93. <and>
  94. <istrue value="${isLinux}"/>
  95. <istrue value="${cross.compile}"/>
  96. <isfalse value="${haveBulletLibraryMingw64}"/>
  97. </and>
  98. </condition>
  99. <condition property="doBuildWindowsBase">
  100. <and>
  101. <istrue value="${isWindows}"/>
  102. <isfalse value="${haveBulletLibrary}"/>
  103. </and>
  104. </condition>
  105. <condition property="doBuildWindowsBase64">
  106. <and>
  107. <istrue value="${isWindows}"/>
  108. <isfalse value="${haveBulletLibrary64}"/>
  109. </and>
  110. </condition>
  111. <condition property="doBuildSolarisBase">
  112. <and>
  113. <istrue value="${isSolaris}"/>
  114. <isfalse value="${haveBulletLibrary}"/>
  115. </and>
  116. </condition>
  117. </target>
  118. <target name="-check-conditions-post">
  119. <available file="build/bullet-base/libLinearMath.a" property="haveBuiltBulletLibrary"/>
  120. <available file="build/bullet-base-64/libLinearMath.a" property="haveBuiltBulletLibrary64"/>
  121. <available file="build/bullet-base-mingw/libLinearMath.a" property="haveBuiltBulletLibraryMingw"/>
  122. <available file="build/bullet-base-mingw-64/libLinearMath.a" property="haveBuiltBulletLibraryMingw64"/>
  123. <condition property="doBuildMacBinary">
  124. <and>
  125. <istrue value="${isMac}"/>
  126. <istrue value="${haveBuiltBulletLibrary}"/>
  127. </and>
  128. </condition>
  129. <condition property="doBuildLinuxBinary">
  130. <and>
  131. <istrue value="${isLinux}"/>
  132. <or>
  133. <isfalse value="${is64bit}"/>
  134. <istrue value="${cross.compile}"/>
  135. </or>
  136. <istrue value="${haveBuiltBulletLibrary}"/>
  137. </and>
  138. </condition>
  139. <condition property="doBuildLinuxBinary64">
  140. <and>
  141. <istrue value="${isLinux}"/>
  142. <or>
  143. <istrue value="${is64bit}"/>
  144. <istrue value="${cross.compile}"/>
  145. </or>
  146. <istrue value="${haveBuiltBulletLibrary64}"/>
  147. </and>
  148. </condition>
  149. <condition property="doBuildLinuxBinaryMingw">
  150. <and>
  151. <istrue value="${isLinux}"/>
  152. <istrue value="${cross.compile}"/>
  153. <istrue value="${haveBuiltBulletLibraryMingw}"/>
  154. </and>
  155. </condition>
  156. <condition property="doBuildLinuxBinaryMingw64">
  157. <and>
  158. <istrue value="${isLinux}"/>
  159. <istrue value="${cross.compile}"/>
  160. <istrue value="${haveBuiltBulletLibraryMingw64}"/>
  161. </and>
  162. </condition>
  163. <condition property="doBuildWindowsBinary">
  164. <and>
  165. <istrue value="${isWindows}"/>
  166. <istrue value="${haveBuiltBulletLibrary}"/>
  167. <isfalse value="${is64bit}"/>
  168. </and>
  169. </condition>
  170. <condition property="doBuildWindowsBinary64">
  171. <and>
  172. <istrue value="${isWindows}"/>
  173. <istrue value="${haveBuiltBulletLibrary64}"/>
  174. <istrue value="${is64bit}"/>
  175. </and>
  176. </condition>
  177. <condition property="doBuildSolarisBinary">
  178. <and>
  179. <istrue value="${isSolaris}"/>
  180. <istrue value="${haveBuiltBulletLibrary}"/>
  181. <isfalse value="${is64bit}"/>
  182. </and>
  183. </condition>
  184. </target>
  185. <target name="build-bullet-natives" description="builds the native bullet library for the platform being run on and for android if NDK available" depends="create-native-headers, compile-bullet-sources, compile-native-library, compile-android">
  186. <echo message="Updating native jME3-bullet-natives.jar"/>
  187. <zip basedir="${bullet.output.base}/jarcontent" file="${bullet.output.base}/jME3-bullet-natives.jar" compress="true"/>
  188. <zip basedir="${bullet.output.base}/android" file="${bullet.output.base}/jME3-bullet-natives-android.jar" compress="true"/>
  189. <copy file="${bullet.output.base}/jME3-bullet-natives.jar" todir="dist/opt/native-bullet/lib/"/>
  190. <copy file="${bullet.output.base}/jME3-bullet-natives-android.jar" todir="dist/opt/native-bullet/lib/"/>
  191. </target>
  192. <target name="create-native-headers" description="creates the native C++ headers for the java native methods">
  193. <javah destdir="${bullet.source.dir}" classpath="${bullet.build.dir}${path.separator}${lib.importpath}">
  194. <class name="com.jme3.bullet.PhysicsSpace"/>
  195. <class name="com.jme3.bullet.collision.PhysicsCollisionEvent"/>
  196. <class name="com.jme3.bullet.collision.PhysicsCollisionObject"/>
  197. <class name="com.jme3.bullet.objects.PhysicsCharacter"/>
  198. <class name="com.jme3.bullet.objects.PhysicsGhostObject"/>
  199. <class name="com.jme3.bullet.objects.PhysicsRigidBody"/>
  200. <class name="com.jme3.bullet.objects.PhysicsVehicle"/>
  201. <class name="com.jme3.bullet.objects.VehicleWheel"/>
  202. <class name="com.jme3.bullet.objects.infos.RigidBodyMotionState"/>
  203. <class name="com.jme3.bullet.collision.shapes.CollisionShape"/>
  204. <class name="com.jme3.bullet.collision.shapes.BoxCollisionShape"/>
  205. <class name="com.jme3.bullet.collision.shapes.CapsuleCollisionShape"/>
  206. <class name="com.jme3.bullet.collision.shapes.CompoundCollisionShape"/>
  207. <class name="com.jme3.bullet.collision.shapes.ConeCollisionShape"/>
  208. <class name="com.jme3.bullet.collision.shapes.CylinderCollisionShape"/>
  209. <class name="com.jme3.bullet.collision.shapes.GImpactCollisionShape"/>
  210. <class name="com.jme3.bullet.collision.shapes.HeightfieldCollisionShape"/>
  211. <class name="com.jme3.bullet.collision.shapes.HullCollisionShape"/>
  212. <class name="com.jme3.bullet.collision.shapes.MeshCollisionShape"/>
  213. <class name="com.jme3.bullet.collision.shapes.PlaneCollisionShape"/>
  214. <class name="com.jme3.bullet.collision.shapes.SimplexCollisionShape"/>
  215. <class name="com.jme3.bullet.collision.shapes.SphereCollisionShape"/>
  216. <class name="com.jme3.bullet.joints.PhysicsJoint"/>
  217. <class name="com.jme3.bullet.joints.ConeJoint"/>
  218. <class name="com.jme3.bullet.joints.HingeJoint"/>
  219. <class name="com.jme3.bullet.joints.Point2PointJoint"/>
  220. <class name="com.jme3.bullet.joints.SixDofJoint"/>
  221. <class name="com.jme3.bullet.joints.SixDofSpringJoint"/>
  222. <class name="com.jme3.bullet.joints.SliderJoint"/>
  223. <class name="com.jme3.bullet.joints.motors.RotationalLimitMotor"/>
  224. <class name="com.jme3.bullet.joints.motors.TranslationalLimitMotor"/>
  225. <class name="com.jme3.bullet.util.NativeMeshUtil"/>
  226. <class name="com.jme3.bullet.util.DebugShapeFactory"/>
  227. </javah>
  228. </target>
  229. <!-- compares the API of native bullet and java version-->
  230. <target name="bullet-api-diff" description="creates a html file showing the differences between the native and jbullet based jme3-bullet api">
  231. <echo message="Comparing bullet and jbullet API"/>
  232. <property name="dependencyfinder.home" value="lib/antlibs/depfinder"/>
  233. <path id="dependencyfinder">
  234. <pathelement location="${dependencyfinder.home}/classes"/>
  235. <pathelement location="${dependencyfinder.home}/lib/DependencyFinder.jar"/>
  236. <pathelement location="${dependencyfinder.home}/lib/jakarta-oro.jar"/>
  237. <pathelement location="${dependencyfinder.home}/lib/log4j.jar"/>
  238. <pathelement location="${dependencyfinder.home}/lib/guava.jar"/>
  239. </path>
  240. <taskdef resource="dependencyfindertasks.properties">
  241. <classpath refid="dependencyfinder"/>
  242. </taskdef>
  243. <jarjardiff destfile="bullet-api-diff.xml"
  244. name="jMonkeyEngine3 Bullet Physics API Comparison"
  245. oldlabel="Java Version"
  246. newlabel="Native Version"
  247. level="incompatible">
  248. <old>
  249. <pathelement location="build/jME3-jbullet.jar"/>
  250. </old>
  251. <new>
  252. <pathelement location="build/jME3-bullet.jar"/>
  253. </new>
  254. </jarjardiff>
  255. <xslt style="${dependencyfinder.home}/etc/DiffToHTML.xsl"
  256. in="bullet-api-diff.xml"
  257. out="bullet-api-diff.html" force="true"/>
  258. <delete file="bullet-api-diff.xml"/>
  259. </target>
  260. <target name="compile-native-library" description="compiles the native libbulletjme binary for the current platform" depends="-check-conditions-post, -create-folders, -nativelib-osx, -nativelib-windows, -nativelib-windows-64, -nativelib-linux, -nativelib-linux-64, -nativelib-linux-mingw, -nativelib-linux-mingw-64, -nativelib-solaris"/>
  261. <target name="-create-folders" description="creates the needed folders">
  262. <mkdir dir="${bullet.source.dir}"/>
  263. <mkdir dir="${bullet.build.dir}"/>
  264. <mkdir dir="${bullet.output.dir}"/>
  265. <mkdir dir="build/bullet-native"/>
  266. <mkdir dir="build/bullet-native-64"/>
  267. </target>
  268. <target name="-nativelib-osx" if="doBuildMacBinary">
  269. <echo message="Building MacOSX version of native bullet"/>
  270. <mkdir dir="${bullet.output.dir}/macosx"/>
  271. <cc name="${bullet.osx.compiler}" warnings="none" debug="${bullet.compile.debug}" link="shared" outfile="${bullet.output.dir}/macosx/${bullet.library.name}" objdir="build/bullet-native">
  272. <fileset dir="${bullet.source.dir}">
  273. <include name="*.cpp">
  274. </include>
  275. </fileset>
  276. <includepath path="${bullet.osx.java.include}"/>
  277. <includepath path="${bullet.bullet.include}"/>
  278. <compilerarg value="-syslibroot ${bullet.osx.syslibroot}"/>
  279. <!--compilerarg value="-arch"/>
  280. <compilerarg value="ppc"/-->
  281. <compilerarg value="-arch"/>
  282. <compilerarg value="i386"/>
  283. <compilerarg value="-arch"/>
  284. <compilerarg value="x86_64"/>
  285. <linker name="${bullet.osx.compiler}">
  286. <libset dir="build/bullet-base" libs="BulletMultiThreaded,BulletDynamics,BulletCollision,LinearMath"/>
  287. <!--linkerarg value="-arch"/>
  288. <linkerarg value="ppc"/-->
  289. <linkerarg value="-arch"/>
  290. <linkerarg value="i386"/>
  291. <linkerarg value="-arch"/>
  292. <linkerarg value="x86_64"/>
  293. </linker>
  294. </cc>
  295. <move file="${bullet.output.dir}/macosx/lib${bullet.library.name}.dylib" tofile="${bullet.output.dir}/macosx/lib${bullet.library.name}.jnilib" failonerror="true" verbose="true"/>
  296. <delete file="${bullet.output.dir}/macosx/history.xml"/>
  297. </target>
  298. <target name="-nativelib-linux" if="doBuildLinuxBinary">
  299. <echo message="Building 32 bit Linux version of native bullet"/>
  300. <mkdir dir="${bullet.output.dir}/linux"/>
  301. <cc name="${bullet.linux.compiler}" warnings="severe" debug="${bullet.compile.debug}" link="shared" outfile="${bullet.output.dir}/linux/${bullet.library.name}" objdir="build/bullet-native">
  302. <fileset dir="${bullet.source.dir}">
  303. <include name="*.cpp">
  304. </include>
  305. </fileset>
  306. <includepath path="${bullet.java.include}"/>
  307. <includepath path="${bullet.java.include}/linux"/>
  308. <includepath path="${bullet.bullet.include}"/>
  309. <compilerarg value="-m32"/>
  310. <linker name="${bullet.linux.compiler}">
  311. <linkerarg value="-m32"/>
  312. <libset dir="build/bullet-base" libs="BulletMultiThreaded,BulletDynamics,BulletCollision,LinearMath"/>
  313. </linker>
  314. </cc>
  315. <delete file="${bullet.output.dir}/linux/history.xml"/>
  316. </target>
  317. <target name="-nativelib-linux-64" if="doBuildLinuxBinary64">
  318. <echo message="Building 64 bit Linux version of native bullet"/>
  319. <mkdir dir="${bullet.output.dir}/linux"/>
  320. <cc name="${bullet.linux.compiler}" warnings="severe" debug="${bullet.compile.debug}" link="shared" outfile="${bullet.output.dir}/linux/${bullet.library.name}64" objdir="build/bullet-native-64">
  321. <fileset dir="${bullet.source.dir}">
  322. <include name="*.cpp">
  323. </include>
  324. </fileset>
  325. <includepath path="${bullet.java.include}"/>
  326. <includepath path="${bullet.java.include}/linux"/>
  327. <includepath path="${bullet.bullet.include}"/>
  328. <linker name="${bullet.linux.compiler}">
  329. <libset dir="build/bullet-base-64" libs="BulletMultiThreaded,BulletDynamics,BulletCollision,LinearMath"/>
  330. </linker>
  331. </cc>
  332. <delete file="${bullet.output.dir}/linux/history.xml"/>
  333. </target>
  334. <target name="-nativelib-linux-mingw" if="doBuildLinuxBinaryMingw">
  335. <echo message="Building 32 bit Windows version of native bullet"/>
  336. <mkdir dir="build/bullet-native-mingw"/>
  337. <mkdir dir="${bullet.output.dir}/windows"/>
  338. <cc compilertarget="${cross.compile.target}" name="${bullet.linux.crosscompiler}" warnings="severe" debug="${bullet.compile.debug}"
  339. outfile="${bullet.output.dir}/windows/${bullet.library.name}" objdir="build/bullet-native-mingw" outtype="shared">
  340. <fileset dir="${bullet.source.dir}">
  341. <include name="*.cpp">
  342. </include>
  343. </fileset>
  344. <sysincludepath path="/usr/${cross.compile.target}/include"/>
  345. <includepath path="${bullet.java.include}"/>
  346. <includepath path="${bullet.java.include}/win32"/>
  347. <includepath path="${bullet.bullet.include}"/>
  348. <compilerarg value="-m32"/>
  349. <compilerarg value="-static-libgcc"/>
  350. <linker name="${bullet.linux.crosscompiler}">
  351. <linkerarg value="-static"/>
  352. <libset dir="build/bullet-base-mingw" libs="BulletMultiThreaded,BulletDynamics,BulletCollision,LinearMath"/>
  353. </linker>
  354. </cc>
  355. <move file="${bullet.output.dir}/windows/lib${bullet.library.name}.so" tofile="${bullet.output.dir}/windows/${bullet.library.name}.dll" failonerror="false"/>
  356. <delete file="${bullet.output.dir}/windows/history.xml"/>
  357. </target>
  358. <target name="-nativelib-linux-mingw-64" if="doBuildLinuxBinaryMingw64">
  359. <echo message="Building 64 bit Windows version of native bullet"/>
  360. <mkdir dir="build/bullet-native-mingw-64"/>
  361. <mkdir dir="${bullet.output.dir}/windows"/>
  362. <cc compilertarget="${cross.compile.target64}" name="${bullet.linux.crosscompiler}" warnings="severe" debug="${bullet.compile.debug}"
  363. outfile="${bullet.output.dir}/windows/${bullet.library.name}64" objdir="build/bullet-native-mingw-64" outtype="shared">
  364. <fileset dir="${bullet.source.dir}">
  365. <include name="*.cpp">
  366. </include>
  367. </fileset>
  368. <sysincludepath path="/usr/${cross.compile.target64}/include"/>
  369. <includepath path="${bullet.java.include}"/>
  370. <includepath path="${bullet.java.include}/win32"/>
  371. <includepath path="${bullet.bullet.include}"/>
  372. <compilerarg value="-static-libgcc"/>
  373. <compilerarg value="-fpermissive"/>
  374. <linker name="${bullet.linux.crosscompiler}">
  375. <linkerarg value="-static"/>
  376. <libset dir="build/bullet-base-mingw-64" libs="BulletMultiThreaded,BulletDynamics,BulletCollision,LinearMath"/>
  377. </linker>
  378. </cc>
  379. <move file="${bullet.output.dir}/windows/lib${bullet.library.name}64.so" tofile="${bullet.output.dir}/windows/${bullet.library.name}64.dll" failonerror="false"/>
  380. <delete file="${bullet.output.dir}/windows/history.xml"/>
  381. </target>
  382. <target name="-nativelib-solaris" if="doBuildSolarisBinary">
  383. <echo message="Building Solaris version of native bullet"/>
  384. <mkdir dir="${bullet.output.dir}/linux"/>
  385. <cc name="${bullet.solaris.compiler}" warnings="severe" debug="${bullet.compile.debug}" link="shared" outfile="${bullet.output.dir}/solaris/${bullet.library.name}" objdir="build/bullet-native">
  386. <fileset dir="${bullet.source.dir}">
  387. <include name="*.cpp">
  388. </include>
  389. </fileset>
  390. <includepath path="${bullet.java.include}"/>
  391. <includepath path="${bullet.java.include}/solaris"/>
  392. <includepath path="${bullet.bullet.include}"/>
  393. <!--compilerarg value="-m32"/-->
  394. <compilerarg value="-m32"/>
  395. <compilerarg value="-fno-strict-aliasing"/>
  396. <compilerarg value="-pthread"/>
  397. <compilerarg value="-fPIC"/>
  398. <compilerarg value="-D_REENTRANT"/>
  399. <compilerarg value="-static-libstdc++"/>
  400. <compilerarg value="-static-libgcc"/>
  401. <compilerarg value="-D_REENTRANT"/>
  402. <linker name="${bullet.solaris.compiler}">
  403. <linkerarg value="-R/usr/sfw/lib"/>
  404. <libset dir="${bullet.folder}/src/BulletMultiThreaded" libs="BulletMultiThreaded"/>
  405. <libset dir="${bullet.folder}/src/BulletDynamics" libs="BulletDynamics"/>
  406. <libset dir="${bullet.folder}/src/BulletCollision" libs="BulletCollision"/>
  407. <libset dir="${bullet.folder}/src/LinearMath" libs="LinearMath"/>
  408. </linker>
  409. </cc>
  410. <delete file="${bullet.output.dir}/solaris/history.xml"/>
  411. </target>
  412. <target name="-nativelib-windows" if="doBuildWindowsBinary">
  413. <echo message="Building Windows 32bit version of native bullet"/>
  414. <mkdir dir="${bullet.output.dir}/windows"/>
  415. <cc multithreaded="" name="${bullet.windows.compiler}" warnings="none" debug="${bullet.compile.debug}" outtype="shared" outfile="${bullet.output.dir}/windows/${bullet.library.name}" objdir="build/bullet-native">
  416. <fileset dir="${bullet.source.dir}">
  417. <include name="*.cpp">
  418. </include>
  419. </fileset>
  420. <includepath path="${bullet.java.include}"/>
  421. <includepath path="${bullet.java.include}/win32"/>
  422. <includepath path="${bullet.bullet.include}"/>
  423. <!--compilerarg value="-m32"/-->
  424. <linker name="${bullet.windows.compiler}" debug="${bullet.compile.debug}" >
  425. <linkerarg value="-o${bullet.library.name}.dll" />
  426. <linkerarg value="--kill-at" />
  427. <linkerarg value="-static"/>
  428. <libset dir="build/bullet-base" libs="BulletMultiThreaded,BulletDynamics,BulletCollision,LinearMath"/>
  429. </linker>
  430. </cc>
  431. <delete file="${bullet.output.dir}/windows/history.xml"/>
  432. </target>
  433. <target name="-nativelib-windows-64" if="doBuildWindowsBinary64">
  434. <echo message="Building Windows 64bit version of native bullet"/>
  435. <mkdir dir="${bullet.output.dir}/windows"/>
  436. <cc multithreaded="" name="${bullet.windows.compiler}" warnings="none" debug="${bullet.compile.debug}" outtype="shared" outfile="${bullet.output.dir}/windows/${bullet.library.name}64" objdir="build/bullet-native">
  437. <compilerarg value="-fpermissive"/>
  438. <fileset dir="${bullet.source.dir}">
  439. <include name="*.cpp">
  440. </include>
  441. </fileset>
  442. <includepath path="${bullet.java.include}"/>
  443. <includepath path="${bullet.java.include}/win32"/>
  444. <includepath path="${bullet.bullet.include}"/>
  445. <!--compilerarg value="-m32"/-->
  446. <linker name="${bullet.windows.compiler}" debug="${bullet.compile.debug}" >
  447. <linkerarg value="-o${bullet.library.name}64.dll" />
  448. <linkerarg value="--kill-at" />
  449. <linkerarg value="-static"/>
  450. <libset dir="build/bullet-base" libs="BulletMultiThreaded,BulletDynamics,BulletCollision,LinearMath"/>
  451. </linker>
  452. </cc>
  453. <delete file="${bullet.output.dir}/windows/history.xml"/>
  454. </target>
  455. <target name="compile-android" description="compiles libbulletjme using the Android NDK" depends="-check-android-ndk" if="haveAndoidNdk">
  456. <!-- create the android subdirectory in jarcontent for the libbulletjme.so shared library -->
  457. <mkdir dir="${bullet.output.base}/android"/>
  458. <!-- create the jni subdirectory -->
  459. <mkdir dir="build/bullet-android/jni" />
  460. <!-- copy Android.mk and Application.mk files into jni directory -->
  461. <copy file="${bullet.source.dir}/android/Android.mk" todir="build/bullet-android/jni" verbose="true"/>
  462. <copy file="${bullet.source.dir}/android/Application.mk" todir="build/bullet-android/jni" verbose="true"/>
  463. <!-- copy jME3 Native Bullet files into jni directory -->
  464. <copy todir="build/bullet-android/jni" verbose="true" flatten="false">
  465. <fileset dir="${bullet.source.dir}">
  466. <include name="*.cpp" />
  467. <include name="*.h" />
  468. </fileset>
  469. </copy>
  470. <!-- copy Bullet-2.79 files into jni directory -->
  471. <copy todir="build/bullet-android/jni" verbose="true" flatten="false" overwrite="false">
  472. <fileset dir="${bullet.bullet.include}">
  473. <include name="**/*.cpp"/>
  474. <include name="**/*.h"/>
  475. <include name="**/*.cl"/>
  476. </fileset>
  477. </copy>
  478. <exec executable="${ndk.dir}/${ndk-build-name}" failonerror="true" >
  479. <arg line="-C build/bullet-android/"/>
  480. </exec>
  481. <!-- copy resulting library directories to jarcontent directory -->
  482. <copy todir="${bullet.output.base}/android" verbose="true" flatten="false">
  483. <fileset dir="build/bullet-android/libs">
  484. <include name="**/*.*"/>
  485. <include name="**/*.*"/>
  486. <!--exclude name="**/x86/*.*"/-->
  487. </fileset>
  488. </copy>
  489. </target>
  490. <target name="-check-android-ndk">
  491. <available file="${ndk.dir}/${ndk-build-name}" property="haveAndoidNdk"/>
  492. </target>
  493. <target name="compile-bullet-sources" description="downloads and compiles the bullet native library to static binaries to be included in the final libbulletjme" depends="-check-conditions-pre, -get-bullet-sources, -compile-bullet-sources-windows, -compile-bullet-sources-macosx, -compile-bullet-sources-linux, -compile-bullet-sources-linux-64, -compile-bullet-sources-linux-mingw, -compile-bullet-sources-linux-mingw-64"/>
  494. <target name="-get-bullet-sources" unless="haveBulletSource">
  495. <echo>Downloading bullet source..</echo>
  496. <get src="${bullet.download}" dest="../bullet.zip"/>
  497. <unzip src="../bullet.zip" dest="../"/>
  498. <delete file="../bullet.zip"/>
  499. </target>
  500. <target name="-compile-bullet-sources-windows" if="doBuildWindowsBase">
  501. <mkdir dir="build/bullet-base"/>
  502. <property location="build/bullet-base" name="build.folder.resolved"/>
  503. <replace file="${bullet.folder}/CMakeLists.txt" token="#TODO add better GLUT detection for MinGW" value=" INCLUDE_DIRECTORIES($${BULLET_PHYSICS_SOURCE_DIR}/Glut)${line.separator}SET(GLUT_glut_LIBRARY $${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut32.lib)"/>
  504. <exec executable="${cmake.windows}" dir="${bullet.folder}" failonerror="true">
  505. <arg value="."/>
  506. <arg value="-DLIBRARY_OUTPUT_PATH='${build.folder.resolved}'"/>
  507. <arg value="-DBUILD_SHARED_LIBS=OFF"/>
  508. <arg value="-DBUILD_EXTRAS:BOOL=OFF"/>
  509. <arg value="-DBUILD_DEMOS:BOOL=OFF"/>
  510. <arg value="-DCMAKE_BUILD_TYPE=Release"/>
  511. <arg value="-DCMAKE_CXX_FLAGS=-fpermissive"/>
  512. <arg value="."/>
  513. <arg value="-G"/>
  514. <arg value="MinGW Makefiles"/>
  515. </exec>
  516. <exec executable="${make.windows}" dir="${bullet.folder}"/>
  517. </target>
  518. <target name="-compile-bullet-sources-macosx" if="doBuildMacBase">
  519. <mkdir dir="build/bullet-base"/>
  520. <property location="build/bullet-base" name="build.folder.resolved"/>
  521. <exec executable="${cmake.osx}" dir="${bullet.folder}" failonerror="true">
  522. <arg value="-DLIBRARY_OUTPUT_PATH='${build.folder.resolved}'"/>
  523. <arg value="-DBUILD_SHARED_LIBS=OFF"/>
  524. <arg value="-DCMAKE_OSX_ARCHITECTURES='i386;x86_64'"/>
  525. <arg value="-DBUILD_EXTRAS=off"/>
  526. <arg value="-DBUILD_DEMOS=off"/>
  527. <arg value="-DCMAKE_BUILD_TYPE=Release"/>
  528. </exec>
  529. <exec executable="${make.osx}" dir="${bullet.folder}"/>
  530. </target>
  531. <target name="-compile-bullet-sources-linux" if="doBuildLinuxBase">
  532. <mkdir dir="build/bullet-base"/>
  533. <property location="build/bullet-base" name="build.folder.resolved"/>
  534. <exec executable="${cmake.linux}" dir="${bullet.folder}" failonerror="true">
  535. <arg value="-DCMAKE_SYSTEM_NAME=Linux"/>
  536. <arg value="-DCMAKE_C_COMPILER=gcc"/>
  537. <arg value="-DCMAKE_CXX_COMPILER=g++"/>
  538. <arg value="-DCMAKE_RC_COMPILER=windres"/>
  539. <arg value="-DCMAKE_FIND_ROOT_PATH=/usr"/>
  540. </exec>
  541. <exec executable="${cmake.linux}" dir="${bullet.folder}" failonerror="true">
  542. <arg value="-DLIBRARY_OUTPUT_PATH='${build.folder.resolved}'"/>
  543. <arg value="-DBUILD_SHARED_LIBS=OFF"/>
  544. <arg value="-DBUILD_STATIC_LIBS=ON"/>
  545. <!--arg value="-DCMAKE_C_FLAGS=-fPIC"/>
  546. <arg value="-DCMAKE_CXX_FLAGS=-fPIC"/-->
  547. <arg value="-DCMAKE_C_FLAGS=-m32"/>
  548. <arg value="-DCMAKE_CXX_FLAGS=-m32"/>
  549. <arg value="-DCMAKE_LD_FLAGS=-m32"/>
  550. <arg value="-DBUILD_EXTRAS=off"/>
  551. <arg value="-DBUILD_DEMOS=off"/>
  552. <arg value="-DCMAKE_BUILD_TYPE=Release"/>
  553. </exec>
  554. <exec executable="${make.linux}" dir="${bullet.folder}"/>
  555. <exec executable="ranlib">
  556. <arg value="${basedir}/build/bullet-base/libBulletMultiThreaded.a"/>
  557. </exec>
  558. <exec executable="ranlib">
  559. <arg value="${basedir}/build/bullet-base/libBulletDynamics.a"/>
  560. </exec>
  561. <exec executable="ranlib">
  562. <arg value="${basedir}/build/bullet-base/libBulletCollision.a"/>
  563. </exec>
  564. <exec executable="ranlib">
  565. <arg value="${basedir}/build/bullet-base/libLinearMath.a"/>
  566. </exec>
  567. </target>
  568. <target name="-compile-bullet-sources-linux-64" if="doBuildLinuxBase64">
  569. <mkdir dir="build/bullet-base-64"/>
  570. <property location="build/bullet-base-64" name="build64.folder.resolved"/>
  571. <exec executable="${cmake.linux}" dir="${bullet.folder}" failonerror="true">
  572. <arg value="-DCMAKE_SYSTEM_NAME=Linux"/>
  573. <arg value="-DCMAKE_C_COMPILER=gcc"/>
  574. <arg value="-DCMAKE_CXX_COMPILER=g++"/>
  575. <arg value="-DCMAKE_RC_COMPILER=windres"/>
  576. <arg value="-DCMAKE_FIND_ROOT_PATH=/usr"/>
  577. </exec>
  578. <exec executable="${cmake.linux}" dir="${bullet.folder}" failonerror="true">
  579. <arg value="-DLIBRARY_OUTPUT_PATH='${build64.folder.resolved}'"/>
  580. <arg value="-DBUILD_SHARED_LIBS=OFF"/>
  581. <arg value="-DBUILD_STATIC_LIBS=ON"/>
  582. <arg value="-DCMAKE_C_FLAGS=-fPIC"/>
  583. <arg value="-DCMAKE_CXX_FLAGS=-fPIC"/>
  584. <arg value="-DBUILD_EXTRAS=off"/>
  585. <arg value="-DBUILD_DEMOS=off"/>
  586. <arg value="-DCMAKE_BUILD_TYPE=Release"/>
  587. </exec>
  588. <exec executable="${make.linux}" dir="${bullet.folder}"/>
  589. </target>
  590. <target name="-compile-bullet-sources-linux-mingw" depends="-fix-bullet-sources" if="doBuildLinuxBaseMingw">
  591. <exec executable="${cmake.linux}" dir="${bullet.folder}" failonerror="true">
  592. <arg value="-DCMAKE_SYSTEM_NAME=Windows"/>
  593. <arg value="-DCMAKE_C_COMPILER=${cross.compile.target}-gcc"/>
  594. <arg value="-DCMAKE_CXX_COMPILER=${cross.compile.target}-g++"/>
  595. <arg value="-DCMAKE_RC_COMPILER=${cross.compile.target}-windres"/>
  596. <arg value="-DCMAKE_FIND_ROOT_PATH=/usr/${cross.compile.target}"/>
  597. <arg value="-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER"/>
  598. <arg value="-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY"/>
  599. <arg value="-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY"/>
  600. </exec>
  601. <mkdir dir="build/bullet-base-mingw"/>
  602. <property location="build/bullet-base-mingw" name="build-mingw.folder.resolved"/>
  603. <exec executable="${cmake.linux}" dir="${bullet.folder}" failonerror="true">
  604. <arg value="-DCMAKE_BUILD_TYPE=Release"/>
  605. <arg value="-DBUILD_SHARED_LIBS=OFF"/>
  606. <arg value="-DBUILD_EXTRAS=OFF"/>
  607. <arg value="-DBUILD_DEMOS=OFF"/>
  608. <arg value="-DLIBRARY_OUTPUT_PATH='${build-mingw.folder.resolved}'"/>
  609. </exec>
  610. <exec executable="${make.linux}" dir="${bullet.folder}"/>
  611. <exec executable="${cross.compile.target}-ranlib">
  612. <arg value="${basedir}/build/bullet-base-mingw/libBulletMultiThreaded.a"/>
  613. </exec>
  614. <exec executable="${cross.compile.target}-ranlib">
  615. <arg value="${basedir}/build/bullet-base-mingw/libBulletDynamics.a"/>
  616. </exec>
  617. <exec executable="${cross.compile.target}-ranlib">
  618. <arg value="${basedir}/build/bullet-base-mingw/libBulletCollision.a"/>
  619. </exec>
  620. <exec executable="${cross.compile.target}-ranlib">
  621. <arg value="${basedir}/build/bullet-base-mingw/libLinearMath.a"/>
  622. </exec>
  623. </target>
  624. <target name="-compile-bullet-sources-linux-mingw-64" depends="-fix-bullet-sources" if="doBuildLinuxBaseMingw64">
  625. <exec executable="${cmake.linux}" dir="${bullet.folder}" failonerror="true">
  626. <arg value="-DCMAKE_SYSTEM_NAME=Windows"/>
  627. <arg value="-DCMAKE_C_COMPILER=${cross.compile.target64}-gcc"/>
  628. <arg value="-DCMAKE_CXX_COMPILER=${cross.compile.target64}-g++"/>
  629. <arg value="-DCMAKE_RC_COMPILER=${cross.compile.target64}-windres"/>
  630. <arg value="-DCMAKE_FIND_ROOT_PATH=/usr/${cross.compile.target64}"/>
  631. <arg value="-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER"/>
  632. <arg value="-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY"/>
  633. <arg value="-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY"/>
  634. </exec>
  635. <mkdir dir="build/bullet-base-mingw-64"/>
  636. <property location="build/bullet-base-mingw-64" name="build-mingw64.folder.resolved"/>
  637. <exec executable="${cmake.linux}" dir="${bullet.folder}" failonerror="true">
  638. <arg value="-DCMAKE_BUILD_TYPE=Release"/>
  639. <arg value="-DBUILD_SHARED_LIBS=OFF"/>
  640. <arg value="-DBUILD_EXTRAS=OFF"/>
  641. <arg value="-DBUILD_DEMOS=OFF"/>
  642. <arg value="-DCMAKE_CXX_FLAGS=-fpermissive"/>
  643. <arg value="-DLIBRARY_OUTPUT_PATH='${build-mingw64.folder.resolved}'"/>
  644. </exec>
  645. <exec executable="${make.linux}" dir="${bullet.folder}"/>
  646. <exec executable="${cross.compile.target64}-ranlib">
  647. <arg value="${basedir}/build/bullet-base-mingw-64/libBulletMultiThreaded.a"/>
  648. </exec>
  649. <exec executable="${cross.compile.target64}-ranlib">
  650. <arg value="${basedir}/build/bullet-base-mingw-64/libBulletDynamics.a"/>
  651. </exec>
  652. <exec executable="${cross.compile.target64}-ranlib">
  653. <arg value="${basedir}/build/bullet-base-mingw-64/libBulletCollision.a"/>
  654. </exec>
  655. <exec executable="${cross.compile.target64}-ranlib">
  656. <arg value="${basedir}/build/bullet-base-mingw-64/libLinearMath.a"/>
  657. </exec>
  658. </target>
  659. <target name="-fix-bullet-sources">
  660. <replace file="${bullet.folder}/CMakeLists.txt" token="#TODO add better GLUT detection for MinGW"
  661. value="INCLUDE_DIRECTORIES($${BULLET_PHYSICS_SOURCE_DIR}/Glut)${line.separator}
  662. SET(GLUT_INCLUDE_DIR ${BULLET_PHYSICS_SOURCE_DIR}/Glut)${line.separator}
  663. IF (WIN32)${line.separator}
  664. message('Win32 using Glut/glut32.lib')${line.separator}
  665. SET(GLUT_glut_LIBRARY $${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut32.lib)${line.separator}
  666. ELSE(WIN32)${line.separator}
  667. message('Win64 using Glut/glut64.lib')${line.separator}
  668. SET(GLUT_glut_LIBRARY $${BULLET_PHYSICS_SOURCE_DIR}/Glut/glut64.lib)${line.separator}
  669. ENDIF (WIN32)${line.separator}"/>
  670. </target>
  671. </project>