spacepaste

  1.  
  2. <!--
  3. ~ Copyright LWJGL. All rights reserved.
  4. ~ License terms: https://www.lwjgl.org/license
  5. -->
  6. <project name="native-linux" basedir="../.." xmlns:if="ant:if" xmlns:unless="ant:unless">
  7. <import file="../build-definitions.xml"/>
  8. <condition property="LIB_POSTFIX" value="" else="32">
  9. <equals arg1="${build.arch}" arg2="x64"/>
  10. </condition>
  11. <condition property="build.arch.x64" value="true" else="false">
  12. <equals arg1="${build.arch}" arg2="x64"/>
  13. </condition>
  14. <condition property="gcc.suffix" value="-${gcc.version}" else="">
  15. <isset property="gcc.version"/>
  16. </condition>
  17. <property name="module.lwjgl.rel" value="../../../../${module.lwjgl}"/>
  18. <macrodef name="compile">
  19. <attribute name="dest" default="${dest}"/>
  20. <attribute name="lang" default="c"/>
  21. <attribute name="gcc.exec" default="gcc${gcc.suffix}"/>
  22. <attribute name="gpp.exec" default="g++${gcc.suffix}"/>
  23. <attribute name="lto" default="-flto"/>
  24. <attribute name="flags" default=""/>
  25. <attribute name="simple" default="false"/>
  26. <attribute name="relative" default="true"/>
  27. <element name="source" implicit="true" optional="true"/>
  28. <sequential>
  29. <local name="cpp"/>
  30. <condition property="cpp"><not><equals arg1="@{lang}" arg2="c"/></not></condition>
  31. <local name="gcc"/>
  32. <condition property="gcc" value="@{gcc.exec}" else="@{gpp.exec}"><equals arg1="@{lang}" arg2="c"/></condition>
  33. <mkdir dir="@{dest}"/>
  34. <apply dir="@{dest}" executable="/usr/local/bin/gcc8" dest="@{dest}" skipemptyfilesets="true" failonerror="true" parallel="true" taskname="Compiler">
  35. <arg line="-c -std=c11" unless:set="cpp"/>
  36. <arg line="-c -std=c++11" if:set="cpp"/>
  37. <arg line="-m64" if:true="${build.arch.x64}"/>
  38. <arg line="-m32 -mfpmath=sse -msse -msse2" unless:true="${build.arch.x64}"/>
  39. <arg line="-O3 @{lto} -fPIC @{flags} -pthread -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -D_GNU_SOURCE -DNDEBUG -DLWJGL_LINUX -DLWJGL_${build.arch}"/>
  40. <arg value="-I${jni.headers}"/>
  41. <arg value="-I${jni.headers}/linux"/>
  42. <arg value="-I${module.lwjgl.rel}/core/src/main/c"/>
  43. <arg value="-I${module.lwjgl.rel}/core/src/main/c/${platform}"/>
  44. <arg value="-I${src.main.rel}" if:true="@{simple}"/>
  45. <source/>
  46. <fileset dir="." includes="${src.generated}/*.c" if:true="@{simple}"/>
  47. <regexpmapper from="(\w+)\.c(?:c|pp)?$" to="\1.o"/>
  48. </apply>
  49. </sequential>
  50. </macrodef>
  51. <macrodef name="build">
  52. <attribute name="module"/>
  53. <attribute name="linker" default="gcc"/>
  54. <attribute name="lang" default="c"/>
  55. <attribute name="gcc.exec" default="gcc${gcc.suffix}"/>
  56. <attribute name="gpp.exec" default="g++${gcc.suffix}"/>
  57. <attribute name="flags" default="-Werror -Wfatal-errors"/>
  58. <attribute name="simple" default="false"/>
  59. <element name="beforeCompile" optional="true"/>
  60. <element name="source" optional="true"/>
  61. <element name="beforeLink" optional="true"/>
  62. <element name="link" optional="true"/>
  63. <sequential>
  64. <local name="src.main"/>
  65. <local name="src.main.rel"/>
  66. <local name="src.generated"/>
  67. <property name="src.main" location="${module.lwjgl}/@{module}/src/main/c" relative="true"/>
  68. <property name="src.main.rel" location="${module.lwjgl.rel}/@{module}/src/main/c" relative="true"/>
  69. <property name="src.generated" location="${module.lwjgl}/@{module}/src/generated/c" relative="true"/>
  70. <local name="name"/>
  71. <condition property="name" value="lwjgl" else="lwjgl_@{module}">
  72. <equals arg1="@{module}" arg2="core"/>
  73. </condition>
  74. <local name="dest"/>
  75. <property name="dest" value="${bin.native}/@{module}"/>
  76. <beforeCompile/>
  77. <compile lang="@{lang}" gcc.exec="@{gcc.exec}" gpp.exec="@{gpp.exec}" flags="@{flags}" simple="@{simple}">
  78. <source/>
  79. </compile>
  80. <local name="lib-uptodate"/>
  81. <uptodate property="lib-uptodate" targetfile="${lib}/lib${name}${LIB_POSTFIX}.so">
  82. <srcfiles file="config/${platform}/build.xml"/>
  83. <srcfiles file="${bin.native}/wrap_memcpy.o" if:true="${build.arch.x64}"/>
  84. <srcfiles dir="${dest}" includes="**"/>
  85. </uptodate>
  86. <local name="version.script"/>
  87. <property name="version.script" location="config/${platform}/version.script"/>
  88. <local name="gcc"/>
  89. <condition property="gcc" value="@{gcc.exec}" else="@{gpp.exec}">
  90. <and>
  91. <equals arg1="@{lang}" arg2="c"/>
  92. <equals arg1="@{linker}" arg2="gcc"/>
  93. </and>
  94. </condition>
  95. <echo message="Linking ${name}" taskname="/usr/local/bin/gcc8" unless:set="lib-uptodate"/>
  96. <beforeLink/>
  97. <apply executable="/usr/local/bin/gcc8" failonerror="true" parallel="true" taskname="Linker" unless:set="lib-uptodate">
  98. <srcfile/>
  99. <arg value="-shared"/>
  100. <arg value="-m64" if:true="${build.arch.x64}"/>
  101. <arg value="-m32" unless:true="${build.arch.x64}"/>
  102. <arg line="-z noexecstack"/>
  103. <arg line="-O3 -flto -fPIC -pthread -o ${lib}/lib${name}${LIB_POSTFIX}.so"/>
  104. <arg line="-Wl,--version-script,${version.script}"/>
  105. <arg line="-Wl,--wrap,memcpy" if:true="${build.arch.x64}"/>
  106. <fileset dir="${bin.native}" includes="wrap_memcpy.o" if:true="${build.arch.x64}"/>
  107. <fileset dir="${dest}" includes="*.o"/>
  108. <link/>
  109. </apply>
  110. <apply executable="strip" failonerror="true" taskname="Symbol strip" unless:set="lib-uptodate">
  111. <filelist dir="${lib}" files="lib${name}${LIB_POSTFIX}.so"/>
  112. </apply>
  113. <delete file="${lib}/touch_${platform}.txt" quiet="true" unless:set="lib-uptodate"/>
  114. </sequential>
  115. </macrodef>
  116. <macrodef name="build_simple">
  117. <attribute name="module"/>
  118. <attribute name="gcc.exec" default="gcc${gcc.suffix}"/>
  119. <attribute name="gpp.exec" default="g++${gcc.suffix}"/>
  120. <sequential>
  121. <build module="@{module}" gcc.exec="@{gcc.exec}" gpp.exec="@{gpp.exec}" simple="true" if:true="${binding.@{module}}"/>
  122. </sequential>
  123. </macrodef>
  124. <target name="compile-native-platform">
  125. <compile dest="${bin.native}" lto="">
  126. <fileset dir="." includes="${module.lwjgl}/core/src/main/c/${platform}/wrap_memcpy.c"/>
  127. </compile>
  128. <parallel threadsPerProcessor="2">
  129. <!-- CORE -->
  130. <build module="core" flags="-Werror -Wfatal-errors -Wall -Wextra -pedantic">
  131. <source>
  132. <arg value="-I${src.main.rel}/dyncall"/>
  133. <fileset dir=".">
  134. <include name="${src.main}/*.c"/>
  135. <include name="${src.generated}/*.c"/>
  136. <include name="${src.generated}/${platform}/*.c"/>
  137. <include name="${module.lwjgl}/jawt/src/generated/c/*.c" if:true="${binding.jawt}"/>
  138. </fileset>
  139. </source>
  140. <beforeLink>
  141. <mkdir dir="${lib}/${platform}/x64"/>
  142. <parallel threadsPerProcessor="2" failonany="true" unless:set="lib-uptodate">
  143. <update-dependency name="dyncall" artifact="x64/libdyncall_s.a"/>
  144. <update-dependency name="dyncallback" artifact="x64/libdyncallback_s.a"/>
  145. <update-dependency name="dynload" artifact="x64/libdynload_s.a"/>
  146. </parallel>
  147. </beforeLink>
  148. <link>
  149. <fileset dir="${lib}/${platform}/${build.arch}/">
  150. <include name="libdyn*.a"/>
  151. </fileset>
  152. </link>
  153. </build>
  154. <!-- LMDB -->
  155. <build module="lmdb" simple="true" if:true="${binding.lmdb}">
  156. <beforeCompile>
  157. <compile>
  158. <arg value="-I${src.main.rel}"/>
  159. <arg value="-DMDB_USE_ROBUST=0"/>
  160. <fileset dir="." includes="${src.main}/*.c"/>
  161. </compile>
  162. </beforeCompile>
  163. </build>
  164. <!-- LZ4 -->
  165. <build module="lz4" simple="true" if:true="${binding.lz4}">
  166. <beforeCompile>
  167. <compile>
  168. <arg value="-I${src.main.rel}"/>
  169. <arg value="-I${module.lwjgl.rel}/xxhash/src/main/c"/>
  170. <fileset dir="." includes="${src.main}/*.c"/>
  171. <fileset dir="." includes="${module.lwjgl}/xxhash/src/main/c/*.c"/>
  172. </compile>
  173. </beforeCompile>
  174. </build>
  175. <!-- NanoVG -->
  176. <build module="nanovg" simple="true" if:true="${binding.nanovg}">
  177. <source>
  178. <arg value="-isystem${module.lwjgl.rel}/stb/src/main/c"/>
  179. </source>
  180. </build>
  181. <!-- NativeFileDialog -->
  182. <build module="nfd" simple="true" if:true="${binding.nfd}">
  183. <beforeCompile>
  184. <local name="gtk3"/>
  185. <local name="stderr"/>
  186. <exec outputproperty="gtk3" errorproperty="stderr" executable="pkg-config" failonerror="true" taskname="gtk-3.0">
  187. <arg line="--cflags gtk+-3.0"/>
  188. </exec>
  189. <compile>
  190. <arg line="${gtk3}"/>
  191. <arg value="-I${src.main.rel}"/>
  192. <arg value="-I${src.main.rel}/include"/>
  193. <fileset dir="." includes="${src.main}/nfd_common.c"/>
  194. <fileset dir="." includes="${src.main}/nfd_gtk.c"/>
  195. </compile>
  196. </beforeCompile>
  197. <source>
  198. <arg value="-I${src.main.rel}/include"/>
  199. </source>
  200. <link>
  201. <arg value="-lgtk-3"/>
  202. </link>
  203. </build>
  204. <!-- Nuklear -->
  205. <build_simple module="nuklear"/>
  206. <!-- OpenGL -->
  207. <build_simple module="opengl"/>
  208. <!-- OpenGL ES -->
  209. <build_simple module="opengles"/>
  210. <!-- OpenVR -->
  211. <build_simple module="openvr"/>
  212. <!-- ParShapes -->
  213. <build_simple module="par"/>
  214. <!-- Remotery -->
  215. <build module="remotery" if:true="${binding.remotery}">
  216. <source>
  217. <arg value="-I${src.main.rel}"/>
  218. <fileset dir="." includes="${src.generated}/*.c" excludes="**/*Metal.c"/>
  219. </source>
  220. </build>
  221. <!-- rpmalloc -->
  222. <build_simple module="rpmalloc"/>
  223. <!-- SSE -->
  224. <build module="sse" simple="true" if:true="${binding.sse}">
  225. <source>
  226. <arg value="-msse3"/>
  227. </source>
  228. </build>
  229. <!-- stb -->
  230. <build module="stb" if:true="${binding.stb}">
  231. <source>
  232. <arg value="-isystem${src.main.rel}"/>
  233. <fileset dir="." includes="${src.generated}/*.c"/>
  234. </source>
  235. </build>
  236. <!-- tinyexr -->
  237. <build module="tinyexr" simple="true" linker="g++" if:true="${binding.tinyexr}">
  238. <beforeCompile>
  239. <compile lang="c++">
  240. <arg value="-I${src.main.rel}"/>
  241. <fileset dir="." includes="${src.main}/*.cc"/>
  242. </compile>
  243. </beforeCompile>
  244. </build>
  245. <!-- tiny file dialogs -->
  246. <build module="tinyfd" simple="true" if:true="${binding.tinyfd}">
  247. <beforeCompile>
  248. <compile>
  249. <arg value="-I${src.main.rel}"/>
  250. <fileset dir="." includes="${src.main}/*.c"/>
  251. </compile>
  252. </beforeCompile>
  253. </build>
  254. <!-- AMD Tootle -->
  255. <build module="tootle" lang="c++" if:true="${binding.tootle}">
  256. <beforeCompile>
  257. <compile flags="-D_SOFTWARE_ONLY_VERSION -D_LINUX">
  258. <arg value="-I${src.main.rel}"/>
  259. <fileset dir="." includes="${src.main}/*.c"/>
  260. </compile>
  261. <compile lang="c++" flags="-D_SOFTWARE_ONLY_VERSION -D_LINUX">
  262. <arg value="-I${src.main.rel}"/>
  263. <arg value="-I${src.main.rel}/include"/>
  264. <arg value="-I${src.main.rel}/RayTracer"/>
  265. <arg value="-I${src.main.rel}/RayTracer/JRT"/>
  266. <arg value="-I${src.main.rel}/RayTracer/Math"/>
  267. <fileset dir=".">
  268. <include name="${src.main}/*.cpp"/>
  269. <exclude name="${src.main}/d3d*.cpp"/>
  270. <exclude name="${src.main}/gdi*.cpp"/>
  271. </fileset>
  272. <fileset dir="." includes="${src.main}/RayTracer/*.cpp"/>
  273. <fileset dir="." includes="${src.main}/RayTracer/JRT/*.cpp"/>
  274. <fileset dir="." includes="${src.main}/RayTracer/Math/*.cpp"/>
  275. </compile>
  276. </beforeCompile>
  277. <source>
  278. <arg value="-D_LINUX"/>
  279. <arg value="-I${src.main.rel}/include"/>
  280. <fileset dir="." includes="${src.generated}/*.cpp"/>
  281. </source>
  282. </build>
  283. <!-- Vulkan Memory Allocator -->
  284. <build module="vma" lang="c++" if:true="${binding.vma}">
  285. <source>
  286. <arg value="-I${src.main.rel}"/>
  287. <arg value="-I${module.lwjgl.rel}/vulkan/src/main/c"/>
  288. <fileset dir="." includes="${src.generated}/*.cpp"/>
  289. </source>
  290. </build>
  291. <!-- xxHash -->
  292. <build_simple module="xxhash"/>
  293. <!-- yoga -->
  294. <build module="yoga" simple="true" linker="g++" if:true="${binding.yoga}">
  295. <beforeCompile>
  296. <compile lang="c++">
  297. <arg value="-I${src.main.rel}"/>
  298. <fileset dir="." includes="${src.main}/*.cpp"/>
  299. </compile>
  300. </beforeCompile>
  301. </build>
  302. <!-- zstd -->
  303. <build module="zstd" simple="true" if:true="${binding.zstd}">
  304. <beforeCompile>
  305. <compile flags="-DZSTD_MULTITHREAD">
  306. <arg value="-I${src.main.rel}"/>
  307. <arg value="-I${src.main.rel}/common"/>
  308. <arg value="-I${src.main.rel}/compress"/>
  309. <arg value="-I${src.main.rel}/decompress"/>
  310. <arg value="-I${src.main.rel}/dictBuilder"/>
  311. <arg value="-I${module.lwjgl.rel}/xxhash/src/main/c"/>
  312. <fileset dir="." includes="${src.main}/common/*.c"/>
  313. <fileset dir="." includes="${src.main}/compress/*.c"/>
  314. <fileset dir="." includes="${src.main}/decompress/*.c"/>
  315. <fileset dir="." includes="${src.main}/dictBuilder/*.c"/>
  316. <fileset dir="." includes="${module.lwjgl}/xxhash/src/main/c/*.c"/>
  317. </compile>
  318. </beforeCompile>
  319. <source>
  320. <arg value="-I${src.main.rel}/common"/>
  321. <arg value="-I${src.main.rel}/dictBuilder"/>
  322. </source>
  323. </build>
  324. </parallel>
  325. <local name="native-dependencies-uptodate"/>
  326. <condition property="native-dependencies-uptodate" value="true">
  327. <or>
  328. <istrue value="${build.offline}"/>
  329. <resourceexists>
  330. <file file="${lib}/touch_${platform}.txt"/>
  331. </resourceexists>
  332. </or>
  333. </condition>
  334. <sequential unless:set="native-dependencies-uptodate">
  335. <mkdir dir="${lib}/${platform}/x64"/>
  336. <parallel threadsPerProcessor="4" failonany="true">
  337. <update-dependency name="Assimp" artifact="x64/libassimp.so" dest="${lib}" if:true="${binding.assimp}"/>
  338. <update-dependency name="bgfx" artifact="x64/libbgfx.so" dest="${lib}" if:true="${binding.bgfx}"/>
  339. <update-dependency name="jemalloc" artifact="x64/libjemalloc.so" dest="${lib}" if:true="${binding.jemalloc}"/>
  340. <update-dependency name="GLFW" artifact="x64/libglfw.so" dest="${lib}" if:true="${binding.glfw}"/>
  341. <update-dependency name="GLFW" artifact="x64/libglfw_wayland.so" dest="${lib}" if:true="${binding.glfw}"/>
  342. <update-dependency name="OpenAL32" artifact="x64/libopenal.so" dest="${lib}" if:true="${binding.openal}"/>
  343. <update-dependency name="OpenVR" artifact="x64/libopenvr_api.so" dest="${lib}" if:true="${binding.openvr}"/>
  344. </parallel>
  345. <touch file="${lib}/touch_${platform}.txt" verbose="false"/>
  346. </sequential>
  347. </target>
  348. </project>
  349.