summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdwin Vane <[email protected]>2012-01-30 15:26:35 -0500
committerEdwin Vane <[email protected]>2012-02-28 16:05:15 -0500
commitd51d2aaad01d1c8188193a7913c6ef0fc38ea798 (patch)
tree9cb605175c650384e076728eb98d7dff3e712642
parent7cd012c823e831279d7cf8f1f427846d1aad6af3 (diff)
Changes to make gluegen build with NDK r7
- A bug in cpptasks was getting in the way of a working build with NDK r7. A local patch to cpptasks fixed the bug. - The patch is added as make/lib/cpptasks_gcclinker.patch and applies cleanly to cpptasts @ revision 177. - The result of building cpptasks r177 with this patch is part of the commit as well. - Cleaned up and simplified the android cross-compile script in make/scripts. - Cleaned up arguments passed to gcc for compiling and linking to look more like the command lines used for building NDK samples. - Some differences are necessary as cpptasks won't let us specify any binary other than 'gcc' for building. See gluegen-cpptasks-android-armv7.xml for comments on the matter. - Thinking forward to x86 support, generalized jogamp-androidtasks.xml to install the gluegen shared library in a subdirectory of image/lib named for the targetted ABI for packaging with aapt. This file is no-longer ARM-specific.
-rw-r--r--make/build-test.xml4
-rw-r--r--make/build.xml8
-rw-r--r--make/jogamp-androidtasks.xml5
-rw-r--r--make/lib/cpptasks.jarbin362952 -> 365028 bytes
-rw-r--r--make/lib/cpptasks_gcclinker.patch17
-rw-r--r--make/lib/gluegen-cpptasks-android-armv7.xml62
-rwxr-xr-xmake/scripts/make.gluegen.all.android-armv7-cross.sh75
7 files changed, 70 insertions, 101 deletions
diff --git a/make/build-test.xml b/make/build-test.xml
index 51b4f83..8c45031 100644
--- a/make/build-test.xml
+++ b/make/build-test.xml
@@ -143,7 +143,9 @@
androidmanifest.path="resources/android/AndroidManifest-Test.xml"
androidresources.path="resources/android/res"
version.code="${gluegen_int_version}"
- version.name="${gluegen.version.plus}" />
+ version.name="${gluegen.version.plus}"
+ android.abi="${android.abi}"
+ />
</target>
<target name="c.configure" depends="gluegen.cpptasks.detect.os,gluegen.cpptasks.setup.compiler">
diff --git a/make/build.xml b/make/build.xml
index c0e5c8c..01a989a 100644
--- a/make/build.xml
+++ b/make/build.xml
@@ -751,22 +751,26 @@
jarbasename="gluegen-rt"
nativebuilddir="${gluegen.lib.dir}"
nativebasename="gluegen-rt"
+ android.abi="${android.abi}"
androidmanifest.path="resources/android/AndroidManifest-Runtime.xml"
androidresources.path="resources/android/res"
jarmanifest.path="${build}/Manifest-rt.temp"
version.code="${gluegen_int_version}"
- version.name="${gluegen.version.plus}" />
+ version.name="${gluegen.version.plus}"
+ />
<aapt.signed
jarbuilddir="${build}"
jarbasename="gluegen"
nativebuilddir="${gluegen.lib.dir}"
nativebasename="gluegen-rt"
+ android.abi="${android.abi}"
androidmanifest.path="resources/android/AndroidManifest-CompileTime.xml"
androidresources.path="resources/android/res"
jarmanifest.path="${build}/Manifest.temp"
version.code="${gluegen_int_version}"
- version.name="${gluegen.version.plus}" />
+ version.name="${gluegen.version.plus}"
+ />
</target>
diff --git a/make/jogamp-androidtasks.xml b/make/jogamp-androidtasks.xml
index 3f7b3f0..5e8405b 100644
--- a/make/jogamp-androidtasks.xml
+++ b/make/jogamp-androidtasks.xml
@@ -43,6 +43,7 @@
<!-- attribute name="jarclasspathrefid" default="/non.existing.jarclasspathrefid"/-->
<attribute name="version.code" />
<attribute name="version.name" />
+ <attribute name="android.abi" />
<attribute name="keystore.file" default="/non.existing.user.keystore.file" />
<attribute name="keystore.alias" default="debug" />
<attribute name="keystore.storepass" default="jogamp" />
@@ -72,11 +73,11 @@
<delete file="${m.aapt.release.file.name}" includeEmptyDirs="true" quiet="true" failonerror="false" />
<delete dir="${m.aapt.build.apk}" includeEmptyDirs="true" quiet="true" failonerror="false" />
- <mkdir dir="${m.aapt.build.apk}/image/lib/armeabi" />
+ <mkdir dir="${m.aapt.build.apk}/image/lib/@{android.abi}" />
<mkdir dir="${m.aapt.build.apk}/image/lib/src" />
<mkdir dir="${m.aapt.build.apk}/image/lib/classes" />
<mkdir dir="${m.aapt.build.apk}/image/lib/assets" />
- <copy todir="${m.aapt.build.apk}/image/lib/armeabi">
+ <copy todir="${m.aapt.build.apk}/image/lib/@{android.abi}">
<fileset dir="@{nativebuilddir}">
<include name="*@{nativebasename}*.${native.library.suffix}" />
</fileset>
diff --git a/make/lib/cpptasks.jar b/make/lib/cpptasks.jar
index f91bdc8..45085b5 100644
--- a/make/lib/cpptasks.jar
+++ b/make/lib/cpptasks.jar
Binary files differ
diff --git a/make/lib/cpptasks_gcclinker.patch b/make/lib/cpptasks_gcclinker.patch
new file mode 100644
index 0000000..0eb4c76
--- /dev/null
+++ b/make/lib/cpptasks_gcclinker.patch
@@ -0,0 +1,17 @@
+Index: src/main/java/net/sf/antcontrib/cpptasks/gcc/GccLinker.java
+===================================================================
+--- src/main/java/net/sf/antcontrib/cpptasks/gcc/GccLinker.java (revision 177)
++++ src/main/java/net/sf/antcontrib/cpptasks/gcc/GccLinker.java (working copy)
+@@ -78,6 +78,12 @@
+ */
+ public String decorateLinkerOption(StringBuffer buf, String arg) {
+ String decoratedArg = arg;
++ if (arg.startsWith("--sysroot")) {
++ return arg;
++ }
++ if (arg.startsWith("-nostdlib")) {
++ return arg;
++ }
+ if (arg.length() > 1 && arg.charAt(0) == '-') {
+ switch (arg.charAt(1)) {
+ //
diff --git a/make/lib/gluegen-cpptasks-android-armv7.xml b/make/lib/gluegen-cpptasks-android-armv7.xml
index e96036a..7d80860 100644
--- a/make/lib/gluegen-cpptasks-android-armv7.xml
+++ b/make/lib/gluegen-cpptasks-android-armv7.xml
@@ -11,7 +11,7 @@
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" basedir="." >
@@ -19,32 +19,35 @@
<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="arm-linux-androideabi-gcc"> -->
<compiler id="compiler.cfg.android" name="gcc">
- <compilerarg value="--sysroot=${env.TARGET_OS_PATH}" /> <!-- set root dir for lib and include -->
- <compilerarg value="-B" /> <!--add additional directory for search -->
- <compilerarg value="${env.TARGET_TOOL_PATH}/libexec/gcc/${env.TARGET_ARCH}/${env.GCC_VERSION}" />
- <!--compilerarg value="-march=armv7-a" /-->
- <compilerarg value="-fpic" />
+ <compilerarg value="--sysroot=${env.TARGET_PLATFORM_ROOT}" />
+ <!-- The default search dirs for 'gcc from $NDK_TOOLCHAIN/$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/bin. -->
+ <compilerarg value="-B${env.NDK_TOOLCHAIN_ROOT}/libexec/gcc/${env.TARGET_TRIPLE}/${env.GCC_VERSION}" />
+
<compilerarg value="-ffunction-sections" />
<compilerarg value="-funwind-tables" />
<compilerarg value="-fstack-protector" />
- <compilerarg value="-march=armv5te" />
+
+ <compilerarg value="-march=armv7-a" />
+
<compilerarg value="-mtune=xscale" />
<compilerarg value="-msoft-float" />
<compilerarg value="-mthumb" />
- <compilerarg value="-Os" />
+
+ <compilerarg value="-g" if="c.compiler.use-debug" />
+ <compilerarg value="-O0" if="c.compiler.use-debug" />
+ <compilerarg value="-Os" unless="c.compiler.use-debug" />
+ <!--<compilerarg value="-O2" /> -->
+
<compilerarg value="-fomit-frame-pointer" />
<compilerarg value="-fno-strict-aliasing" />
<compilerarg value="-finline-limit=64" />
<compilerarg value="-Wa,--noexecstack" />
- <compilerarg value="-O2" />
- <compilerarg value="-isystem" />
- <compilerarg value="${env.TARGET_OS_PATH}/include"/>
- <compilerarg value="-isystem" />
- <compilerarg value="${env.TARGET_TOOL_PATH}/lib/gcc/${env.TARGET_ARCH}/${env.GCC_VERSION}/include" /> <!--includes stdarg.h -->
+ <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__" />
@@ -56,25 +59,18 @@
</defineset>
</compiler>
- <!--<linker id="linker.cfg.android" name="arm-linux-androideabi-gcc">-->
<linker id="linker.cfg.android" name="gcc">
- <linkerarg value="-march=armv7-a" />
- <linkerarg value="-fpic" />
- <linkerarg value="-Wl,--demangle" />
- <linkerarg value="--sysroot=${env.TARGET_OS_PATH}" /> <!-- set root dir for lib and include -->
- <linkerarg value="-nostdlib" />
- <linkerarg value="-Bdynamic" />
- <linkerarg value="-Wl,-dynamic-linker,/system/bin/linker" />
- <linkerarg value="-Wl,--gc-sections" />
- <linkerarg value="-Wl,-z,nocopyreloc" />
- <linkerarg value="${env.TARGET_OS_PATH}/lib/libc.so" />
- <linkerarg value="${env.TARGET_OS_PATH}/lib/libdl.so" />
- <linkerarg value="${env.TARGET_OS_PATH}/lib/libm.so" />
-<!-- <linkerarg value="${env.TARGET_OS_PATH}/lib/crtbegin_dynamic.o" /> -->
- <linkerarg value="-Wl,--no-undefined" />
- <linkerarg value="-Wl,-rpath-link=${env.TARGET_OS_PATH}/lib" />
- <linkerarg value="${env.TARGET_TOOL_PATH}/lib/gcc/${env.TARGET_ARCH}/${env.GCC_VERSION}/${env.TARGET_CPU_NAME}/libgcc.a" />
- <!-- <linkerarg value="${env.TARGET_OS_PATH}/lib/crtend_android.o" /> -->
+ <linkerarg value="--sysroot=${env.TARGET_PLATFORM_ROOT}" />
+ <linkerarg value="--demangle" />
+ <linkerarg value="--gc-sections" />
+ <linkerarg value="--no-undefined" />
+ <!-- The gcc from $NDK_TOOLCHAIN/$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}/armv7-a" libs="gcc" />
+ <libset libs="c,m" />
</linker>
</target>
diff --git a/make/scripts/make.gluegen.all.android-armv7-cross.sh b/make/scripts/make.gluegen.all.android-armv7-cross.sh
index 9f54348..31b544d 100755
--- a/make/scripts/make.gluegen.all.android-armv7-cross.sh
+++ b/make/scripts/make.gluegen.all.android-armv7-cross.sh
@@ -15,12 +15,12 @@ echo ANDROID_SDK_HOME $ANDROID_SDK_HOME
echo NDK_ROOT $NDK_ROOT
if [ -z "$NDK_ROOT" ] ; then
- if [ -e /usr/local/android-ndk-r6 ] ; then
- NDK_ROOT=/usr/local/android-ndk-r6
- elif [ -e /opt-linux-x86/android-ndk-r6 ] ; then
- NDK_ROOT=/opt-linux-x86/android-ndk-r6
- elif [ -e /opt/android-ndk-r6 ] ; then
- NDK_ROOT=/opt/android-ndk-r6
+ if [ -e /usr/local/android-ndk-r7 ] ; then
+ NDK_ROOT=/usr/local/android-ndk-r7
+ elif [ -e /opt-linux-x86/android-ndk-r7 ] ; then
+ NDK_ROOT=/opt-linux-x86/android-ndk-r7
+ elif [ -e /opt/android-ndk-r7 ] ; then
+ NDK_ROOT=/opt/android-ndk-r7
else
echo NDK_ROOT is not specified and does not exist in default locations
exit 1
@@ -30,7 +30,6 @@ elif [ ! -e $NDK_ROOT ] ; then
exit 1
fi
export NDK_ROOT
-NDK_TOOLCHAIN=$NDK_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi
if [ -z "$ANDROID_SDK_HOME" ] ; then
if [ -e /usr/local/android-sdk-linux_x86 ] ; then
@@ -49,58 +48,16 @@ elif [ ! -e $ANDROID_SDK_HOME ] ; then
fi
export ANDROID_SDK_HOME
-export PATH="$NDK_TOOLCHAIN/bin:$ANDROID_SDK_HOME/platform-tools:$PATH"
-
export GCC_VERSION=4.4.3
HOST_ARCH=linux-x86
export TARGET_ARCH=arm-linux-androideabi
-# mcpu: cortex-a8', `cortex-a9', `cortex-r4', `cortex-r4f', `cortex-m3', `cortex-m1', `xscale', `iwmmxt', `iwmmxt2', `ep9312'.
-export TARGET_CPU_NAME=armv7-a
-TARGET_CPU_TUNE=armv7-a
-# mfpu: `vfp', `vfpv3', `vfpv3-d16' and `neon'
-TARGET_FPU_NAME=vfpv3
-TARGET_FPU_ABI=softfp
-
-export TARGET_TOOL_PATH=${NDK_ROOT}/toolchains/${TARGET_ARCH}-${GCC_VERSION}/prebuilt/${HOST_ARCH}
-
-export TARGET_OS_PATH=${NDK_ROOT}/platforms/android-${ANDROID_VERSION}/arch-arm/usr
-export HOST_OS_PATH=${NDK_ROOT}/platforms/android-${ANDROID_VERSION}/arch-x86/usr
-
-export NDK_XBIN_PATH=${TARGET_TOOL_PATH}/bin
-export NDK_BIN_PATH=${TARGET_TOOL_PATH}/${TARGET_ARCH}/bin
-
-export NDK_GCC=${NDK_XBIN_PATH}/${TARGET_ARCH}-gcc
-export NDK_AR=${NDK_XBIN_PATH}/${TARGET_ARCH}-ar
-export NDK_STRIP=${NDK_XBIN_PATH}/${TARGET_ARCH}-strip
-export NDK_READELF=${NDK_XBIN_PATH}/${TARGET_ARCH}-readelf
-
-export PATH=${NDK_XBIN_PATH}:$PATH
-
+export TARGET_TRIPLE=arm-linux-androideabi
-export NDK_CFLAGS="\
--march=${TARGET_CPU_NAME} \
--fpic \
--DANDROID \
-"
+export NDK_TOOLCHAIN_ROOT=$NDK_ROOT/toolchains/${TARGET_ARCH}-${GCC_VERSION}/prebuilt/${HOST_ARCH}
+export TARGET_PLATFORM_ROOT=${NDK_ROOT}/platforms/android-${ANDROID_VERSION}/arch-arm
-export NDK_LDFLAGS="\
--Wl,--demangle \
--nostdlib -Bdynamic -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,-z,nocopyreloc \
-${TARGET_OS_PATH}/lib/libc.so \
-${TARGET_OS_PATH}/lib/libstdc++.so \
-${TARGET_OS_PATH}/lib/libm.so \
-${TARGET_OS_PATH}/lib/crtbegin_dynamic.o \
--Wl,--no-undefined -Wl,-rpath-link=${TARGET_OS_PATH}/lib \
-${TARGET_TOOL_PATH}/lib/gcc/${TARGET_ARCH}/${GCC_VERSION}/${TARGET_CPU_NAME}/libgcc.a \
-${TARGET_OS_PATH}/lib/crtend_android.o \
-"
-
-
-# directory for cc1 ${TARGET_TOOL_PATH}/libexec/gcc/${TARGET_ARCH}/${GCC_VERSION} \
-
-#arm-eabi-gcc -o hello hello.c -Wl,-rpath-link=/Users/nirnimesh/NIR/android/mydroid/cupcake/out/target/product/generic/obj/lib
-#-L/Users/nirnimesh/NIR/android/mydroid/cupcake/out/target/product/generic/obj/lib
-#-nostdlib /Users/nirnimesh/NIR/android/mydroid/cupcake/out/target/product/generic/obj/lib/crtbegin_dynamic.o -lc
+# Need to add toolchain bins to the PATH.
+export PATH="$NDK_TOOLCHAIN_ROOT/$TARGET_TRIPLE/bin:$ANDROID_SDK_HOME/platform-tools:$PATH"
which gcc 2>&1 | tee make.gluegen.all.android-armv7-cross.log
@@ -116,13 +73,5 @@ ant \
-DisAndroidARMv7=true \
-DjvmDataModel.arg="-Djnlp.no.jvm.data.model.set=true" \
-DisCrosscompilation=true \
- \
+ -Dandroid.abi=armeabi-v7a \
$* 2>&1 | tee -a make.gluegen.all.android-armv7-cross.log
-
-#$NDK_GCC -march=armv7-a -fpic -DANDROID -I/usr/local/android-ndk-r6/platforms/android-9/arch-arm/usr/include -Wl,--demangle -nostdlib -Bdynamic -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,-z,nocopyreloc /usr/local/android-ndk-r6/platforms/android-9/arch-arm/usr/lib/libc.so /usr/local/android-ndk-r6/platforms/android-9/arch-arm/usr/lib/libstdc++.so /usr/local/android-ndk-r6/platforms/android-9/arch-arm/usr/lib/libm.so /usr/local/android-ndk-r6/platforms/android-9/arch-arm/usr/lib/crtbegin_dynamic.o -Wl,--no-undefined -Wl,-rpath-link=/usr/local/android-ndk-r6/platforms/android-9/arch-arm/usr/lib /usr/local/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/lib/gcc/arm-linux-androideabi/4.4.3/armv7-a/libgcc.a /usr/local/android-ndk-r6/platforms/android-9/arch-arm/usr/lib/crtend_android.o -c -fno-rtti -fPIC -DANDROID -I/home/rsantina/projects/jogamp/gluegen/build-android-arm/gensrc/native -I/home/rsantina/projects/jogamp/gluegen/build-android-arm/gensrc/native/Unix -I/opt/x86_64/jdk1.6.0_25/include -I/opt/x86_64/jdk1.6.0_25/include/linux -I/home/rsantina/projects/jogamp/gluegen/make/stub_includes/platform /home/rsantina/projects/jogamp/gluegen/src/native/unix/UnixDynamicLinkerImpl_JNI.c /home/rsantina/projects/jogamp/gluegen/src/native/common/PointerBuffer.c /home/rsantina/projects/jogamp/gluegen/src/native/common/MachineDescriptionRuntime.c /home/rsantina/projects/jogamp/gluegen/src/native/common/JVM_Tool.c
-
-#which gcc
-#echo $TARGET_TOOL_PATH
-
-#$NDK_GCC $NDK_INCLUDE $NDK_CFLAGS $NDK_LDFLAGS -o /home/rsantina/projects/jogamp/gluegen/src/native/unix/UnixDynamicLinkerImpl_JNI.c /home/rsantina/projects/jogamp/gluegen/src/native/common/PointerBuffer.c /home/rsantina/projects/jogamp/gluegen/src/native/common/MachineDescriptionRuntime.c /home/rsantina/projects/jogamp/gluegen/src/native/common/JVM_Tool.c
-