• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<project name="%projectName%" basedir="." default="postcompile">
2	<!-- include the environment -->
3	<property environment="env"/>
4	<!-- output directory for temporary object files -->
5	<property name="buildDir" value="%buildDir%" />
6	<!-- output directory for the shared library -->
7	<property name="libsDir" value="%libsDir%" />
8	<!-- the name of the shared library -->
9	<property name="libName" value="%libName%"/>
10	<!-- the jni header jniPlatform to use -->
11	<property name="jniPlatform" value="mac"/>
12	<!-- the compilerPrefix for the C & C++ compilers -->
13	<property name="compilerPrefix" value="%compilerPrefix%"/>
14	<property name="iphoneos-sdk" value="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/"/>
15	<property name="iphonesimulator-sdk" value="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk"/>
16	<property name="tvos-sdk" value="/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS9.2.sdk/"/>
17	<property name="tvossimulator-sdk" value="/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator9.2.sdk"/>
18
19
20	<!-- define gcc compiler, options and files to compile -->
21	<property name="gcc" value="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang"/>
22	<property name="gcc-opts" value="%cFlags%"/>
23	<fileset id="gcc-files" dir="./">
24		<exclude name="target/"/>
25		%cIncludes%
26		%cExcludes%
27	</fileset>
28
29	<!-- define g++ compiler, options and files to compile -->
30	<property name="g++" value="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"/>
31	<property name="g++-opts" value="%cppFlags%"/>
32	<fileset id="g++-files" dir="./">
33		<exclude name="target/"/>
34		%cppIncludes%
35		%cppExcludes%
36	</fileset>
37
38	<!-- define linker and options -->
39	<property name="linker" value="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar"/>
40	<property name="linker-opts" value="%linkerFlags%"/>
41	<property name="libraries" value="%libraries%"/>
42
43	<!-- cleans the build directory, removes all object files and shared libs -->
44	<target name="clean">
45		<delete includeemptydirs="true" quiet="true">
46			<fileset dir="${buildDir}"/>
47			<fileset dir="${libsDir}" includes="**/*" excludes="**/.svn"/>
48		</delete>
49	</target>
50
51	<target name="clean-objfiles">
52		<delete>
53			<fileset dir="${buildDir}">
54				<include name="**/*.o"/>
55			</fileset>
56		</delete>
57	</target>
58
59	<target name="create-build-dir">
60		<!-- FIXME this is pretty nasty :/ -->
61		<copy todir="${buildDir}">
62			<fileset refid="g++-files"/>
63			<fileset refid="gcc-files"/>
64		</copy>
65		<delete>
66			<fileset dir="${buildDir}">
67				<include name="*"/>
68				<exclude name="*.o"/>
69			</fileset>
70		</delete>
71	</target>
72
73	<!-- compiles all C and C++ files to object files in the build directory, for 386 builds-->
74	<target name="compile-386" depends="clean,create-build-dir">
75		<mkdir dir="${buildDir}"/>
76		<apply failonerror="true" executable="${g++}" dest="${buildDir}" verbose="true">
77			<arg line="-isysroot ${iphonesimulator-sdk} -arch i386 -miphoneos-version-min=6.0 ${g++-opts}"/>
78			<arg value="-Ijni-headers"/>
79			<arg value="-Ijni-headers/${jniPlatform}"/>
80			<arg value="-I."/>
81			%headerDirs%
82			<srcfile/>
83			<arg value="-o"/>
84			<targetfile/>
85			<fileset refid="g++-files"/>
86			<compositemapper>
87				<mapper type="glob" from="*.cpp" to="*.o"/>
88				<mapper type="glob" from="*.mm" to="*.o"/>
89			</compositemapper>
90		</apply>
91		<apply failonerror="true" executable="${gcc}" dest="${buildDir}" verbose="true">
92			<arg line="-isysroot ${iphonesimulator-sdk} -arch i386 -miphoneos-version-min=6.0 ${gcc-opts}"/>
93			<arg value="-Ijni-headers"/>
94			<arg value="-Ijni-headers/${jniPlatform}"/>
95			<arg value="-I."/>
96			%headerDirs%
97			<srcfile/>
98			<arg value="-o"/>
99			<targetfile/>
100			<fileset refid="gcc-files"/>
101			<compositemapper>
102				<mapper type="glob" from="*.c" to="*.o"/>
103			</compositemapper>
104		</apply>
105	</target>
106
107	<!-- links the shared library based on the previously compiled object files -->
108	<target name="link-386" depends="compile-386">
109		<fileset dir="${buildDir}" id="objFileSet">
110			<patternset>
111				<include name="**/*.o" />
112			</patternset>
113		</fileset>
114		<pathconvert pathsep=" " property="objFiles" refid="objFileSet" />
115		<mkdir dir="${libsDir}" />
116		<exec executable="${linker}" failonerror="true" dir="${buildDir}">
117			<arg line="${linker-opts}" />
118			<arg path="${libsDir}/${libName}.386" />
119			<arg line="${objFiles}"/>
120			<arg line="${libraries}" />
121		</exec>
122	</target>
123
124	<!-- compiles all C and C++ files to object files in the build directory, for x86_64 builds-->
125	<target name="compile-x86_64" depends="create-build-dir">
126		<mkdir dir="${buildDir}"/>
127		<antcall target="clean-objfiles"/>
128		<apply failonerror="true" executable="${g++}" dest="${buildDir}" verbose="true">
129			<arg line="-isysroot ${iphonesimulator-sdk} -arch x86_64 -miphoneos-version-min=6.0 ${g++-opts}"/>
130			<arg value="-Ijni-headers"/>
131			<arg value="-Ijni-headers/${jniPlatform}"/>
132			<arg value="-I."/>
133			%headerDirs%
134			<srcfile/>
135			<arg value="-o"/>
136			<targetfile/>
137			<fileset refid="g++-files"/>
138			<compositemapper>
139				<mapper type="glob" from="*.cpp" to="*.o"/>
140				<mapper type="glob" from="*.mm" to="*.o"/>
141			</compositemapper>
142		</apply>
143		<apply failonerror="true" executable="${gcc}" dest="${buildDir}" verbose="true">
144			<arg line="-isysroot ${iphonesimulator-sdk} -arch x86_64 -miphoneos-version-min=6.0 ${gcc-opts}"/>
145			<arg value="-Ijni-headers"/>
146			<arg value="-Ijni-headers/${jniPlatform}"/>
147			<arg value="-I."/>
148			%headerDirs%
149			<srcfile/>
150			<arg value="-o"/>
151			<targetfile/>
152			<fileset refid="gcc-files"/>
153			<compositemapper>
154				<mapper type="glob" from="*.c" to="*.o"/>
155			</compositemapper>
156		</apply>
157	</target>
158
159	<!-- links the shared library based on the previously compiled object files -->
160	<target name="link-x86_64" depends="compile-x86_64">
161		<fileset dir="${buildDir}" id="objFileSet">
162			<patternset>
163				<include name="**/*.o" />
164			</patternset>
165		</fileset>
166		<pathconvert pathsep=" " property="objFiles" refid="objFileSet" />
167		<mkdir dir="${libsDir}" />
168		<exec executable="${linker}" failonerror="true" dir="${buildDir}">
169			<arg line="${linker-opts}" />
170			<arg path="${libsDir}/${libName}.x86_64" />
171			<arg line="${objFiles}"/>
172			<arg line="${libraries}" />
173		</exec>
174	</target>
175
176	<!-- compiles all C and C++ files to object files in the build directory, for armv7 builds-->
177	<target name="compile-arm" depends="create-build-dir">
178		<mkdir dir="${buildDir}"/>
179		<antcall target="clean-objfiles"/>
180		<apply failonerror="true" executable="${g++}" dest="${buildDir}" verbose="true">
181			<arg line="-isysroot ${iphoneos-sdk} -arch armv7 -miphoneos-version-min=6.0 -fembed-bitcode ${g++-opts}"/>
182			<arg value="-Ijni-headers"/>
183			<arg value="-Ijni-headers/${jniPlatform}"/>
184			<arg value="-I."/>
185			%headerDirs%
186			<srcfile/>
187			<arg value="-o"/>
188			<targetfile/>
189			<fileset refid="g++-files"/>
190			<compositemapper>
191				<mapper type="glob" from="*.cpp" to="*.o"/>
192				<mapper type="glob" from="*.mm" to="*.o"/>
193			</compositemapper>
194		</apply>
195		<apply failonerror="true" executable="${gcc}" dest="${buildDir}" verbose="true">
196			<arg line="-isysroot ${iphoneos-sdk} -arch armv7 -miphoneos-version-min=6.0 -fembed-bitcode ${gcc-opts}"/>
197			<arg value="-Ijni-headers"/>
198			<arg value="-Ijni-headers/${jniPlatform}"/>
199			<arg value="-I."/>
200			%headerDirs%
201			<srcfile/>
202			<arg value="-o"/>
203			<targetfile/>
204			<fileset refid="gcc-files"/>
205			<compositemapper>
206				<mapper type="glob" from="*.c" to="*.o"/>
207			</compositemapper>
208		</apply>
209	</target>
210
211	<!-- links the shared library based on the previously compiled object files -->
212	<target name="link-arm" depends="compile-arm">
213		<fileset dir="${buildDir}" id="objFileSet">
214			<patternset>
215				<include name="**/*.o" />
216			</patternset>
217		</fileset>
218		<pathconvert pathsep=" " property="objFiles" refid="objFileSet" />
219		<mkdir dir="${libsDir}" />
220		<exec executable="${linker}" failonerror="true" dir="${buildDir}">
221			<arg line="${linker-opts}" />
222			<arg path="${libsDir}/${libName}.armv7" />
223			<arg line="${objFiles}"/>
224			<arg line="${libraries}" />
225		</exec>
226	</target>
227
228	<!-- compiles all C and C++ files to object files in the build directory, for arm64 builds-->
229	<target name="compile-arm64" depends="create-build-dir,clean-objfiles">
230		<mkdir dir="${buildDir}"/>
231		<antcall target="clean-objfiles"/>
232		<apply failonerror="true" executable="${g++}" dest="${buildDir}" verbose="true">
233			<arg line="-isysroot ${iphoneos-sdk} -arch arm64 -miphoneos-version-min=6.0 -fembed-bitcode ${g++-opts}"/>
234			<arg value="-Ijni-headers"/>
235			<arg value="-Ijni-headers/${jniPlatform}"/>
236			<arg value="-I."/>
237			%headerDirs%
238			<srcfile/>
239			<arg value="-o"/>
240			<targetfile/>
241			<fileset refid="g++-files"/>
242			<compositemapper>
243				<mapper type="glob" from="*.cpp" to="*.o"/>
244				<mapper type="glob" from="*.mm" to="*.o"/>
245			</compositemapper>
246		</apply>
247		<apply failonerror="true" executable="${gcc}" dest="${buildDir}" verbose="true">
248			<arg line="-isysroot ${iphoneos-sdk} -arch arm64 -miphoneos-version-min=6.0 -fembed-bitcode ${gcc-opts}"/>
249			<arg value="-Ijni-headers"/>
250			<arg value="-Ijni-headers/${jniPlatform}"/>
251			<arg value="-I."/>
252			%headerDirs%
253			<srcfile/>
254			<arg value="-o"/>
255			<targetfile/>
256			<fileset refid="gcc-files"/>
257			<compositemapper>
258				<mapper type="glob" from="*.c" to="*.o"/>
259			</compositemapper>
260		</apply>
261	</target>
262
263	<!-- links the shared library based on the previously compiled object files -->
264	<target name="link-arm64" depends="compile-arm64">
265		<fileset dir="${buildDir}" id="objFileSet">
266			<patternset>
267				<include name="**/*.o" />
268			</patternset>
269		</fileset>
270		<pathconvert pathsep=" " property="objFiles" refid="objFileSet" />
271		<mkdir dir="${libsDir}" />
272		<exec executable="${linker}" failonerror="true" dir="${buildDir}">
273			<arg line="${linker-opts}" />
274			<arg path="${libsDir}/${libName}.arm64" />
275			<arg line="${objFiles}"/>
276			<arg line="${libraries}" />
277		</exec>
278	</target>
279
280	<!-- compiles all C and C++ files to object files in the build directory, for tvOS x86_64 builds-->
281	<target name="compile-tvos-x86_64" depends="create-build-dir">
282		<mkdir dir="${buildDir}"/>
283		<antcall target="clean-objfiles"/>
284		<apply failonerror="true" executable="${g++}" dest="${buildDir}" verbose="true">
285			<arg line="-isysroot ${tvossimulator-sdk} -arch x86_64 -mtvos-version-min=9.0 ${g++-opts}"/>
286			<arg value="-Ijni-headers"/>
287			<arg value="-Ijni-headers/${jniPlatform}"/>
288			<arg value="-I."/>
289			%headerDirs%
290			<srcfile/>
291			<arg value="-o"/>
292			<targetfile/>
293			<fileset refid="g++-files"/>
294			<compositemapper>
295				<mapper type="glob" from="*.cpp" to="*.o"/>
296				<mapper type="glob" from="*.mm" to="*.o"/>
297			</compositemapper>
298		</apply>
299		<apply failonerror="true" executable="${gcc}" dest="${buildDir}" verbose="true">
300			<arg line="-isysroot ${tvossimulator-sdk} -arch x86_64 -mtvos-version-min=9.0 ${gcc-opts}"/>
301			<arg value="-Ijni-headers"/>
302			<arg value="-Ijni-headers/${jniPlatform}"/>
303			<arg value="-I."/>
304			%headerDirs%
305			<srcfile/>
306			<arg value="-o"/>
307			<targetfile/>
308			<fileset refid="gcc-files"/>
309			<compositemapper>
310				<mapper type="glob" from="*.c" to="*.o"/>
311			</compositemapper>
312		</apply>
313	</target>
314
315	<!-- links the shared library based on the previously compiled object files -->
316	<target name="link-tvos-x86_64" depends="compile-tvos-x86_64">
317		<fileset dir="${buildDir}" id="objFileSet">
318			<patternset>
319				<include name="**/*.o" />
320			</patternset>
321		</fileset>
322		<pathconvert pathsep=" " property="objFiles" refid="objFileSet" />
323		<mkdir dir="${libsDir}" />
324		<exec executable="${linker}" failonerror="true" dir="${buildDir}">
325			<arg line="${linker-opts}" />
326			<arg path="${libsDir}/${libName}.tvos.x86_64" />
327			<arg line="${objFiles}"/>
328			<arg line="${libraries}" />
329		</exec>
330	</target>
331
332	<!-- compiles all C and C++ files to object files in the build directory, for tvOS arm64 builds-->
333	<target name="compile-tvos-arm64" depends="create-build-dir,clean-objfiles">
334		<mkdir dir="${buildDir}"/>
335		<antcall target="clean-objfiles"/>
336		<apply failonerror="true" executable="${g++}" dest="${buildDir}" verbose="true">
337			<arg line="-isysroot ${tvos-sdk} -arch arm64 -mtvos-version-min=9.0 -fembed-bitcode ${g++-opts}"/>
338			<arg value="-Ijni-headers"/>
339			<arg value="-Ijni-headers/${jniPlatform}"/>
340			<arg value="-I."/>
341			%headerDirs%
342			<srcfile/>
343			<arg value="-o"/>
344			<targetfile/>
345			<fileset refid="g++-files"/>
346			<compositemapper>
347				<mapper type="glob" from="*.cpp" to="*.o"/>
348				<mapper type="glob" from="*.mm" to="*.o"/>
349			</compositemapper>
350		</apply>
351		<apply failonerror="true" executable="${gcc}" dest="${buildDir}" verbose="true">
352			<arg line="-isysroot ${tvos-sdk} -arch arm64 -mtvos-version-min=9.0 -fembed-bitcode ${gcc-opts}"/>
353			<arg value="-Ijni-headers"/>
354			<arg value="-Ijni-headers/${jniPlatform}"/>
355			<arg value="-I."/>
356			%headerDirs%
357			<srcfile/>
358			<arg value="-o"/>
359			<targetfile/>
360			<fileset refid="gcc-files"/>
361			<compositemapper>
362				<mapper type="glob" from="*.c" to="*.o"/>
363			</compositemapper>
364		</apply>
365	</target>
366
367	<!-- links the shared library based on the previously compiled object files -->
368	<target name="link-tvos-arm64" depends="compile-tvos-arm64">
369		<fileset dir="${buildDir}" id="objFileSet">
370			<patternset>
371				<include name="**/*.o" />
372			</patternset>
373		</fileset>
374		<pathconvert pathsep=" " property="objFiles" refid="objFileSet" />
375		<mkdir dir="${libsDir}" />
376		<exec executable="${linker}" failonerror="true" dir="${buildDir}">
377			<arg line="${linker-opts}" />
378			<arg path="${libsDir}/${libName}.tvos.arm64" />
379			<arg line="${objFiles}"/>
380			<arg line="${libraries}" />
381		</exec>
382	</target>
383
384	<target name="link-fat">
385		<exec executable="lipo" failonerror="true" dir="${libsDir}">
386			<arg line="-create -output ${libName} ${libName}.386 ${libName}.x86_64 ${libName}.armv7 ${libName}.arm64"/>
387		</exec>
388		<exec executable="lipo" failonerror="true" dir="${libsDir}">
389			<arg line="-create -output ${libName}.tvos ${libName}.tvos.x86_64 ${libName}.tvos.arm64"/>
390		</exec>
391	</target>
392
393	<target name="postcompile" depends="link-386,link-x86_64,link-arm,link-arm64,link-tvos-x86_64,link-tvos-arm64,link-fat">
394		%postcompile%
395	</target>
396</project>
397