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