aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXerxes Rånby <[email protected]>2016-12-12 08:32:08 +0100
committerXerxes Rånby <[email protected]>2016-12-12 08:32:08 +0100
commite7db4d356f264b45d178839798b7d3d552019fc1 (patch)
tree4dd62740aca7c8b1ff903d365cc35c8eb92db326
parent00ea29eb954a29aaf2fd2adffd6677e580ab2850 (diff)
Bug 1295: Add linux-aarch64 GNU/Linux AArch64 crosscompile support
make/lib/gluegen-cpptasks-linux-aarch64.xml: Add missing -DisLinux=true required when crosscompiling Remove -marm -mfloat-abi=hard flags unrecognisable by aarch64 crosscompile toolchain make/lib/toolchain/aarch64-linux-gnueabi/bin/*: Symlink to /usr/local/x-tools/aarch64-unknown-linux-gnueabi/bin/aarch64-unknown-linux-gnueabi-* make/scripts/make.gluegen.all.linux-aarch64-cross.sh: New crosscompile script make/stub_includes/platform/glibc-compat-symbols.h: glibc 2.17 is the first glibc version that support aarch64 however memcpy is not versioned for aarch64 Disable versioning for linux glibc/aarch64 Signed-off-by: Xerxes Rånby <[email protected]>
-rw-r--r--make/lib/gluegen-cpptasks-linux-aarch64.xml5
l---------make/lib/toolchain/aarch64-linux-gnueabi/bin/c++1
l---------make/lib/toolchain/aarch64-linux-gnueabi/bin/cc1
l---------make/lib/toolchain/aarch64-linux-gnueabi/bin/g++1
l---------make/lib/toolchain/aarch64-linux-gnueabi/bin/gcc1
l---------make/lib/toolchain/aarch64-linux-gnueabi/bin/ld1
l---------make/lib/toolchain/aarch64-linux-gnueabi/bin/objdump1
l---------make/lib/toolchain/aarch64-linux-gnueabi/bin/strip1
-rwxr-xr-xmake/scripts/make.gluegen.all.linux-aarch64-cross.sh38
-rw-r--r--make/stub_includes/platform/glibc-compat-symbols.h8
10 files changed, 52 insertions, 6 deletions
diff --git a/make/lib/gluegen-cpptasks-linux-aarch64.xml b/make/lib/gluegen-cpptasks-linux-aarch64.xml
index 45a7fdb..8606fae 100644
--- a/make/lib/gluegen-cpptasks-linux-aarch64.xml
+++ b/make/lib/gluegen-cpptasks-linux-aarch64.xml
@@ -19,6 +19,7 @@
<target name="gluegen.cpptasks.detect.os.custom">
<property name="gluegen.cpptasks.detected.os" value="true" />
<property name="isUnix" value="true" />
+ <property name="isLinux" value="true" />
<property name="isLinuxARM64" value="true" />
<property name="isX11" value="true" />
<property name="jvmDataModel.arg" value="-Djnlp.no.jvm.data.model.set=true" />
@@ -40,8 +41,6 @@
<define name="NDEBUG" unless="c.compiler.use-debug"/>
</defineset>
<compilerarg value="-fpic" />
- <compilerarg value="-marm" />
- <compilerarg value="-mfloat-abi=hard" />
<compilerarg value="-include"/>
<compilerarg value="${gluegen.root.abs-path}/make/stub_includes/platform/glibc-compat-symbols.h" />
</compiler>
@@ -49,8 +48,6 @@
<linker id="linker.cfg.linux.aarch64" name="gcc">
<linkerarg value="-fpic" />
<linkerarg value="-march=armv8-a" />
- <linkerarg value="-marm" />
- <linkerarg value="-mfloat-abi=hard" />
<linkerarg value="-nostdlib" />
<linkerarg value="-Bdynamic" />
<linkerarg value="-static-libgcc" if="isGCC"/>
diff --git a/make/lib/toolchain/aarch64-linux-gnueabi/bin/c++ b/make/lib/toolchain/aarch64-linux-gnueabi/bin/c++
new file mode 120000
index 0000000..15c86f4
--- /dev/null
+++ b/make/lib/toolchain/aarch64-linux-gnueabi/bin/c++
@@ -0,0 +1 @@
+/usr/local/x-tools/aarch64-unknown-linux-gnueabi/bin/aarch64-unknown-linux-gnueabi-c++ \ No newline at end of file
diff --git a/make/lib/toolchain/aarch64-linux-gnueabi/bin/cc b/make/lib/toolchain/aarch64-linux-gnueabi/bin/cc
new file mode 120000
index 0000000..925bc00
--- /dev/null
+++ b/make/lib/toolchain/aarch64-linux-gnueabi/bin/cc
@@ -0,0 +1 @@
+/usr/local/x-tools/aarch64-unknown-linux-gnueabi/bin/aarch64-unknown-linux-gnueabi-cc \ No newline at end of file
diff --git a/make/lib/toolchain/aarch64-linux-gnueabi/bin/g++ b/make/lib/toolchain/aarch64-linux-gnueabi/bin/g++
new file mode 120000
index 0000000..eabecfb
--- /dev/null
+++ b/make/lib/toolchain/aarch64-linux-gnueabi/bin/g++
@@ -0,0 +1 @@
+/usr/local/x-tools/aarch64-unknown-linux-gnueabi/bin/aarch64-unknown-linux-gnueabi-g++ \ No newline at end of file
diff --git a/make/lib/toolchain/aarch64-linux-gnueabi/bin/gcc b/make/lib/toolchain/aarch64-linux-gnueabi/bin/gcc
new file mode 120000
index 0000000..9b6db98
--- /dev/null
+++ b/make/lib/toolchain/aarch64-linux-gnueabi/bin/gcc
@@ -0,0 +1 @@
+/usr/local/x-tools/aarch64-unknown-linux-gnueabi/bin/aarch64-unknown-linux-gnueabi-gcc \ No newline at end of file
diff --git a/make/lib/toolchain/aarch64-linux-gnueabi/bin/ld b/make/lib/toolchain/aarch64-linux-gnueabi/bin/ld
new file mode 120000
index 0000000..38af46a
--- /dev/null
+++ b/make/lib/toolchain/aarch64-linux-gnueabi/bin/ld
@@ -0,0 +1 @@
+/usr/local/x-tools/aarch64-unknown-linux-gnueabi/bin/aarch64-unknown-linux-gnueabi-ld \ No newline at end of file
diff --git a/make/lib/toolchain/aarch64-linux-gnueabi/bin/objdump b/make/lib/toolchain/aarch64-linux-gnueabi/bin/objdump
new file mode 120000
index 0000000..3fafc10
--- /dev/null
+++ b/make/lib/toolchain/aarch64-linux-gnueabi/bin/objdump
@@ -0,0 +1 @@
+/usr/local/x-tools/aarch64-unknown-linux-gnueabi/bin/aarch64-unknown-linux-gnueabi-objdump \ No newline at end of file
diff --git a/make/lib/toolchain/aarch64-linux-gnueabi/bin/strip b/make/lib/toolchain/aarch64-linux-gnueabi/bin/strip
new file mode 120000
index 0000000..de7e179
--- /dev/null
+++ b/make/lib/toolchain/aarch64-linux-gnueabi/bin/strip
@@ -0,0 +1 @@
+/usr/local/x-tools/aarch64-unknown-linux-gnueabi/bin/aarch64-unknown-linux-gnueabi-strip \ No newline at end of file
diff --git a/make/scripts/make.gluegen.all.linux-aarch64-cross.sh b/make/scripts/make.gluegen.all.linux-aarch64-cross.sh
new file mode 100755
index 0000000..5d050cd
--- /dev/null
+++ b/make/scripts/make.gluegen.all.linux-aarch64-cross.sh
@@ -0,0 +1,38 @@
+#! /bin/sh
+
+SDIR=`dirname $0`
+
+if [ -e $SDIR/setenv-build-jogl-x86_64.sh ] ; then
+ . $SDIR/setenv-build-jogl-x86_64.sh
+fi
+
+# aarch64-linux-gnueabi == aarch64 triplet
+PATH=`pwd`/lib/toolchain/aarch64-linux-gnueabi/bin:$PATH
+export PATH
+
+# -Dc.compiler.debug=true
+# -Dgluegen.cpptasks.detected.os=true \
+# -DisUnix=true \
+# -DisLinux=true \
+# -DisLinuxARM64=true \
+# -DisX11=true \
+
+export TARGET_PLATFORM_ROOT=/opt-linux-arm64
+export TARGET_PLATFORM_LIBS=$TARGET_PLATFORM_ROOT/usr/lib
+export TARGET_JAVA_LIBS=$TARGET_PLATFORM_ROOT/jre/lib/aarch64
+
+export GLUEGEN_CPPTASKS_FILE="lib/gluegen-cpptasks-linux-aarch64.xml"
+
+#export JUNIT_DISABLED="true"
+export JUNIT_RUN_ARG0="-Dnewt.test.Screen.disableScreenMode"
+
+export SOURCE_LEVEL=1.6
+export TARGET_LEVEL=1.6
+export TARGET_RT_JAR=/opt-share/jre1.6.0_30/lib/rt.jar
+
+#export JOGAMP_JAR_CODEBASE="Codebase: *.jogamp.org"
+export JOGAMP_JAR_CODEBASE="Codebase: *.goethel.localnet"
+
+ant \
+ -Drootrel.build=build-linux-aarch64 \
+ $* 2>&1 | tee make.gluegen.all.linux-aarch64-cross.log
diff --git a/make/stub_includes/platform/glibc-compat-symbols.h b/make/stub_includes/platform/glibc-compat-symbols.h
index 1163c78..e390bcb 100644
--- a/make/stub_includes/platform/glibc-compat-symbols.h
+++ b/make/stub_includes/platform/glibc-compat-symbols.h
@@ -18,7 +18,9 @@
#if defined(__linux__) /* Actually we like to test whether we link against GLIBC .. */
#if defined(__GNUC__)
#if defined(__aarch64__)
- #define GLIBC_COMPAT_SYMBOL(FFF) __asm__(".symver " #FFF "," #FFF "@GLIBC_2.4");
+ /* glibc 2.17 is the first glibc version that support aarch64
+ however memcpy is not versioned for aarch64 */
+ #define GLIBC_COMPAT_SYMBOL(FFF)
#elif defined(__arm__)
#define GLIBC_COMPAT_SYMBOL(FFF) __asm__(".symver " #FFF "," #FFF "@GLIBC_2.4");
#elif defined(__amd64__)
@@ -28,7 +30,9 @@
#endif /*__amd64__*/
#elif defined(__clang__)
#if defined(__aarch64__)
- #define GLIBC_COMPAT_SYMBOL(FFF) asm(".symver " #FFF "," #FFF "@GLIBC_2.4");
+ /* glibc 2.17 is the first glibc version that support aarch64
+ however memcpy is not versioned for aarch64 */
+ #define GLIBC_COMPAT_SYMBOL(FFF)
#elif defined(__arm__)
#define GLIBC_COMPAT_SYMBOL(FFF) asm(".symver " #FFF "," #FFF "@GLIBC_2.4");
#elif defined(__amd64__)