1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
<?xml version="1.0" encoding="UTF-8"?>
<!--
This is an example of how to add custom compiler/linker
arguments for a crosscompiler.
You can use such files with setting the property 'gluegen-cpptasks.file', ie:
-Dgluegen-cpptasks.file=`pwd`/lib/gluegen-cpptasks-linux-32bit.xml
In case you want to compile for 32bit on a 64bit machine,
you might also need to set the 'os.arch' to 'x86'.
Example: gluegen/make/make.gluegen.all.linux-x86.sh
-->
<project name="GlueGen-cpptasks-android-aarch64" basedir="." >
<!-- Set OS and ARCH for crosscompilation compiler configuration -->
<target name="gluegen.cpptasks.detect.os.custom">
<property name="gluegen.cpptasks.detected.os" value="true" />
<property name="isUnix" value="true" />
<property name="isAndroid" value="true" />
<property name="isAndroidARM64" value="true" />
<property name="jvmDataModel.arg" value="-Djnlp.no.jvm.data.model.set=true" />
<property name="isCrosscompilation" value="true" />
<property name="android.abi" value="arm64-v8a" />
<property name="isAbiEabiGnuArmel" value="true" />
<echo message="gluegen.cpptasks.detect.os.custom: GLUEGEN_CPPTASKS_FILE 'gluegen-cpptasks-android-aarch64' done"/>
</target>
<import file="${gluegen.root.abs-path}/make/gluegen-cpptasks-base.xml" optional="false" />
<target name="gluegen.cpptasks.configure.compiler" depends="setup.java.home.dir,declare.linux.android">
<echo message="Custom forced compiler Android NDK, linker.cfg.android" />
<compiler id="compiler.cfg.android" name="gcc">
<compilerarg value="--sysroot=${TARGET_PLATFORM_SYSROOT}" />
<!-- The default search dirs for 'gcc from $NDK_TOOLCHAIN_ROOT/$TARGET_TRIPLE/bin will not find
subprograms properly (see gcc -print-search-dirs). Not sure if this is a bug in the NDK
or not. Need to explicitly indicate where subprograms are with -B.
NOTE: This is not necessary if using '$TARGET_TRIPLE-gcc' from $NDK_TOOLCHAIN_ROOT/bin. -->
<compilerarg value="-B${env.NDK_TOOLCHAIN_ROOT}/libexec/gcc/${env.TARGET_TRIPLE}/${env.GCC_VERSION}" />
<compilerarg value="-fpic" />
<!-- compilerarg value="-fPIE" / --> <!-- not for shared libs, won't produce symbols -->
<!-- compilerarg value="-pie" / --> <!-- not for shared libs, won't produce symbols -->
<compilerarg value="-ffunction-sections" />
<compilerarg value="-funwind-tables" />
<compilerarg value="-fstack-protector" />
<!-- compilerarg value="-no-canonical-prefixes" / --> <!-- will disallow creating shared library -->
<compilerarg value="-Wa,--noexecstack" />
<!-- compilerarg value="-mabi=lp64" />
<compilerarg value="-mlittle-endian" />
<compilerarg value="-march=armv8-a" / -->
<!-- compilerarg value="-mfloat-abi=softfp" / -->
<!-- Generic ARM Flags -->
<compilerarg value="-O2" unless="c.compiler.use-debug" />
<!-- compilerarg value="-g" unless="c.compiler.use-debug" / -->
<compilerarg value="-fomit-frame-pointer" unless="c.compiler.use-debug"/>
<compilerarg value="-fstrict-aliasing" unless="c.compiler.use-debug"/>
<compilerarg value="-funswitch-loops" unless="c.compiler.use-debug"/>
<compilerarg value="-finline-limit=300" unless="c.compiler.use-debug"/>
<compilerarg value="-O0" if="c.compiler.use-debug" />
<compilerarg value="-g" if="c.compiler.use-debug" />
<compilerarg value="-fno-omit-frame-pointer" if="c.compiler.use-debug" />
<compilerarg value="-fno-strict-aliasing" if="c.compiler.use-debug" />
<includepath path="${env.NDK_TOOLCHAIN_ROOT}/lib/gcc/${env.TARGET_TRIPLE}/${env.GCC_VERSION}/include" /> <!-- for stdarg.h -->
<defineset>
<define name="__unix__" />
<!-- define name="__ARM_ARCH_5__" />
<define name="__ARM_ARCH_5T__" />
<define name="__ARM_ARCH_5E__" />
<define name="__ARM_ARCH_5TE__" / -->
<define name="__LP64__" /> <!-- default pre-defined macro for 64bit unix -->
<define name="__aarch64__" /> <!-- default pre-defined macro for armv8-a, 64bit -->
<define name="ANDROID" />
<define name="_DEBUG" if="c.compiler.use-debug"/>
<define name="DEBUG" if="c.compiler.use-debug"/>
<define name="NDEBUG" unless="c.compiler.use-debug"/>
</defineset>
</compiler>
<linker id="linker.cfg.android" name="gcc">
<linkerarg value="--sysroot=${TARGET_PLATFORM_SYSROOT}" />
<linkerarg value="-fpic" />
<!-- linkerarg value="-fPIE" / --> <!-- not for shared libs, won't produce symbols -->
<!-- linkerarg value="-pie" / --> <!-- not for shared libs, won't produce symbols -->
<!-- linkerarg value="-no-canonical-prefixes" / --> <!-- will disallow creating shared library -->
<linkerarg value="-fno-use-linker-plugin" />
<!-- linkerarg value="-mabi=lp64" />
<linkerarg value="-mlittle-endian" />
<linkerarg value="-march=armv8-a" / -->
<!-- linkerarg value="-mfloat-abi=softfp" / -->
<linkerarg value="-nostdlib" />
<linkerarg value="-Bdynamic" />
<linkerarg value="-Wl,-dynamic-linker,/system/bin/linker" />
<linkerarg value="-Wl,-z,nocopyreloc" />
<linkerarg value="--demangle" />
<linkerarg value="--gc-sections" />
<linkerarg value="--no-undefined" />
<linkerarg value="-static-libgcc" if="isGCC"/>
<linkerarg value="-static-libstdc++" if="isGCC"/>
<!-- The gcc from $NDK_TOOLCHAIN_ROOT/$TARGET_TRIPLE/bin needs to be told
where to find libgcc as the default location (gcc -print-search-dirs)
is not correct. Not sure if this is a bug in the NDK or not. We also
enforce that libgcc is linked after source files but before other shared
libraries. -->
<libset dir="${env.NDK_TOOLCHAIN_ROOT}/lib/gcc/${env.TARGET_TRIPLE}/${env.GCC_VERSION}" libs="gcc" />
<!-- libset libs="c,m,dl,log" / -->
<libset libs="c,m,dl" />
</linker>
</target>
<target name="gluegen.cpptasks.declare.compiler" depends="setup.java.home.dir">
<echo message="Custom forced Linux.x86 cross compile android" />
<property name="compiler.cfg.id.base" value="compiler.cfg.android" />
<property name="linker.cfg.id.base" value="linker.cfg.android" />
<property name="java.lib.dir.platform" value="${java.home.dir}/jre/lib/i386" />
<property name="java.includes.dir.platform" value="${java.includes.dir}/x11" />
</target>
<target name="declare.linux.android">
<echo message="android.arm" />
<property name="compiler.cfg.id" value="compiler.cfg.android" />
<property name="linker.cfg.id" value="linker.cfg.android" />
</target>
</project>
|