Kaydet (Commit) 5c004922 authored tarafından Tor Lillqvist's avatar Tor Lillqvist

Start of support for Android on AArch64

The build does not get far before it runs into trouble in the GNU libstdc++
headers, though:

android-ndk-r10/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include/bits/opt_random.h:33:23:
fatal error: x86intrin.h: No such file or directory

Change-Id: I9d459c64980091ba8bf5b3d631d47342625f6be9
üst 0da23c09
...@@ -35,7 +35,7 @@ $(call gb_LinkTarget_get_target,$(call gb_Library_get_linktarget,gcc3_uno)) : \ ...@@ -35,7 +35,7 @@ $(call gb_LinkTarget_get_target,$(call gb_Library_get_linktarget,gcc3_uno)) : \
EXTRAOBJECTLISTS += $(call gb_CustomTarget_get_workdir,bridges/source/cpp_uno/gcc3_linux_arm)/armhelper.objectlist EXTRAOBJECTLISTS += $(call gb_CustomTarget_get_workdir,bridges/source/cpp_uno/gcc3_linux_arm)/armhelper.objectlist
endif endif
else ifeq ($(OS)-$(CPUNAME),LINUX-AARCH64) else ifneq (,$(filter ANDROID-AARCH64 LINUX-AARCH64,$(OS)-$(CPUNAME)))
bridges_SELECTED_BRIDGE := gcc3_linux_aarch64 bridges_SELECTED_BRIDGE := gcc3_linux_aarch64
bridge_exception_objects := abi callvirtualfunction cpp2uno uno2cpp bridge_exception_objects := abi callvirtualfunction cpp2uno uno2cpp
......
...@@ -317,6 +317,9 @@ if test -n "$with_android_ndk"; then ...@@ -317,6 +317,9 @@ if test -n "$with_android_ndk"; then
if test $host_cpu = arm; then if test $host_cpu = arm; then
android_cpu=arm android_cpu=arm
android_platform_prefix=$android_cpu-linux-androideabi android_platform_prefix=$android_cpu-linux-androideabi
elif test $host_cpu = aarch64; then
android_cpu=aarch64
android_platform_prefix=$android_cpu-linux-android
elif test $host_cpu = mips; then elif test $host_cpu = mips; then
android_cpu=mips android_cpu=mips
android_platform_prefix=$android_cpu-linux-androideabi android_platform_prefix=$android_cpu-linux-androideabi
...@@ -328,7 +331,7 @@ if test -n "$with_android_ndk"; then ...@@ -328,7 +331,7 @@ if test -n "$with_android_ndk"; then
fi fi
case "$with_android_ndk_toolchain_version" in case "$with_android_ndk_toolchain_version" in
4.6|4.7|4.8) 4.6|4.7|4.8|4.9)
ANDROID_BINUTILS_DIR=$ANDROID_NDK_HOME/toolchains/$android_platform_prefix-$with_android_ndk_toolchain_version ANDROID_BINUTILS_DIR=$ANDROID_NDK_HOME/toolchains/$android_platform_prefix-$with_android_ndk_toolchain_version
ANDROID_COMPILER_DIR=$ANDROID_BINUTILS_DIR ANDROID_COMPILER_DIR=$ANDROID_BINUTILS_DIR
;; ;;
...@@ -383,8 +386,13 @@ if test -n "$with_android_ndk"; then ...@@ -383,8 +386,13 @@ if test -n "$with_android_ndk"; then
;; ;;
esac esac
ANDROID_API_LEVEL=15
if test $host_cpu = arm; then if test $host_cpu = arm; then
android_gnu_prefix=arm-linux-androideabi android_gnu_prefix=arm-linux-androideabi
elif test $host_cpu = aarch64; then
android_gnu_prefix=aarch64-linux-android
ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR="${with_android_ndk_toolchain_version}/"
ANDROID_API_LEVEL=L
elif test $host_cpu = mips; then elif test $host_cpu = mips; then
android_gnu_prefix=mipsel-linux-android android_gnu_prefix=mipsel-linux-android
elif test $ANDROID_NDK_VERSION = r8; then elif test $ANDROID_NDK_VERSION = r8; then
...@@ -394,13 +402,7 @@ if test -n "$with_android_ndk"; then ...@@ -394,13 +402,7 @@ if test -n "$with_android_ndk"; then
android_gnu_prefix=i686-linux-android android_gnu_prefix=i686-linux-android
fi fi
test -z "$SYSBASE" && export SYSBASE=$ANDROID_NDK_HOME/platforms/android-15/arch-$android_cpu ANDROID_ARCH=$android_cpu
test -z "$AR" && AR=$ANDROID_BINUTILS_BIN/$android_gnu_prefix-ar
test -z "$NM" && NM=$ANDROID_BINUTILS_BIN/$android_gnu_prefix-nm
test -z "$OBJDUMP" && OBJDUMP=$ANDROID_BINUTILS_BIN/$android_gnu_prefix-objdump
test -z "$RANLIB" && RANLIB=$ANDROID_BINUTILS_BIN/$android_gnu_prefix-ranlib
test -z "$STRIP" && STRIP=$ANDROID_BINUTILS_BIN/$android_gnu_prefix-strip
if test $host_cpu = arm; then if test $host_cpu = arm; then
ANDROID_APP_ABI=armeabi-v7a ANDROID_APP_ABI=armeabi-v7a
if test -n "$ANDROID_USING_CLANG"; then if test -n "$ANDROID_USING_CLANG"; then
...@@ -412,6 +414,10 @@ if test -n "$with_android_ndk"; then ...@@ -412,6 +414,10 @@ if test -n "$with_android_ndk"; then
fi fi
ANDROIDCFLAGS="$ANDROIDCFLAGS -mthumb" ANDROIDCFLAGS="$ANDROIDCFLAGS -mthumb"
ANDROIDCFLAGS="$ANDROIDCFLAGS -march=armv7-a -mfloat-abi=softfp -mfpu=neon" ANDROIDCFLAGS="$ANDROIDCFLAGS -march=armv7-a -mfloat-abi=softfp -mfpu=neon"
ANDROIDCFLAGS="$ANDROIDCFLAGS -Wl,--fix-cortex-a8"
elif test $host_cpu = aarch64; then
ANDROID_APP_ABI=arm64-v8a
ANDROID_ARCH=arm64
elif test $host_cpu = mips; then elif test $host_cpu = mips; then
ANDROID_APP_ABI=mips ANDROID_APP_ABI=mips
ANDROIDCFLAGS="" ANDROIDCFLAGS=""
...@@ -421,8 +427,7 @@ if test -n "$with_android_ndk"; then ...@@ -421,8 +427,7 @@ if test -n "$with_android_ndk"; then
fi fi
ANDROIDCFLAGS="$ANDROIDCFLAGS -ffunction-sections -fdata-sections" ANDROIDCFLAGS="$ANDROIDCFLAGS -ffunction-sections -fdata-sections"
ANDROIDCFLAGS="$ANDROIDCFLAGS -L$ANDROID_NDK_HOME/sources/cxx-stl/gnu-libstdc++/${ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR}libs/$ANDROID_APP_ABI" ANDROIDCFLAGS="$ANDROIDCFLAGS -L$ANDROID_NDK_HOME/sources/cxx-stl/gnu-libstdc++/${ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR}libs/$ANDROID_APP_ABI"
ANDROIDCFLAGS="$ANDROIDCFLAGS --sysroot $ANDROID_NDK_HOME/platforms/android-15/arch-$android_cpu" ANDROIDCFLAGS="$ANDROIDCFLAGS --sysroot $ANDROID_NDK_HOME/platforms/android-${ANDROID_API_LEVEL}/arch-${ANDROID_ARCH}"
ANDROIDCFLAGS="$ANDROIDCFLAGS -Wl,--fix-cortex-a8"
if test -n "$ANDROID_USING_CLANG"; then if test -n "$ANDROID_USING_CLANG"; then
ANDROIDCFLAGS="$ANDROIDCFLAGS -Qunused-arguments" ANDROIDCFLAGS="$ANDROIDCFLAGS -Qunused-arguments"
...@@ -430,11 +435,17 @@ if test -n "$with_android_ndk"; then ...@@ -430,11 +435,17 @@ if test -n "$with_android_ndk"; then
ANDROIDCFLAGS="$ANDROIDCFLAGS -Wno-psabi" ANDROIDCFLAGS="$ANDROIDCFLAGS -Wno-psabi"
fi fi
test -z "$SYSBASE" && export SYSBASE=$ANDROID_NDK_HOME/platforms/android-${ANDROID_API_LEVEL}/arch-${ANDROID_ARCH}
test -z "$AR" && AR=$ANDROID_BINUTILS_BIN/$android_gnu_prefix-ar
test -z "$NM" && NM=$ANDROID_BINUTILS_BIN/$android_gnu_prefix-nm
test -z "$OBJDUMP" && OBJDUMP=$ANDROID_BINUTILS_BIN/$android_gnu_prefix-objdump
test -z "$RANLIB" && RANLIB=$ANDROID_BINUTILS_BIN/$android_gnu_prefix-ranlib
test -z "$STRIP" && STRIP=$ANDROID_BINUTILS_BIN/$android_gnu_prefix-strip
# When using the 4.6 or newer toolchain, use the gold linker # When using the 4.6 or newer toolchain, use the gold linker
case "$with_android_ndk_toolchain_version" in case "$with_android_ndk_toolchain_version" in
4.[[6789]]*|[[56789]].*|clang*) 4.[[6789]]*|[[56789]].*|clang*)
# The NDK doesn't have ld.gold for MIPS for some reason if test "$host_cpu" = arm -a "$ENABLE_LTO" != TRUE; then
if test "$host_cpu" != mips -a "$ENABLE_LTO" != TRUE; then
ANDROIDCFLAGS="$ANDROIDCFLAGS -fuse-ld=gold" ANDROIDCFLAGS="$ANDROIDCFLAGS -fuse-ld=gold"
fi fi
;; ;;
...@@ -451,6 +462,8 @@ if test -n "$with_android_ndk"; then ...@@ -451,6 +462,8 @@ if test -n "$with_android_ndk"; then
ANDROID_NDK_GDBSERVER=$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.4.3/prebuilt/gdbserver ANDROID_NDK_GDBSERVER=$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.4.3/prebuilt/gdbserver
elif test -f $ANDROID_NDK_HOME/prebuilt/android-$android_cpu/gdbserver/gdbserver; then elif test -f $ANDROID_NDK_HOME/prebuilt/android-$android_cpu/gdbserver/gdbserver; then
ANDROID_NDK_GDBSERVER=$ANDROID_NDK_HOME/prebuilt/android-$android_cpu/gdbserver/gdbserver ANDROID_NDK_GDBSERVER=$ANDROID_NDK_HOME/prebuilt/android-$android_cpu/gdbserver/gdbserver
elif test $android_cpu = aarch64; then
ANDROID_NDK_GDBSERVER=$ANDROID_NDK_HOME/prebuilt/android-arm64/gdbserver/gdbserver
else else
AC_MSG_ERROR([Can't find gdbserver for your Android target]) AC_MSG_ERROR([Can't find gdbserver for your Android target])
fi fi
...@@ -751,7 +764,7 @@ linux-android*) ...@@ -751,7 +764,7 @@ linux-android*)
fi fi
# Verify that the NDK and SDK options are proper # Verify that the NDK and SDK options are proper
if test ! -f "$ANDROID_NDK_HOME/platforms/android-15/arch-arm/usr/lib/libc.a"; then if test ! -f "$ANDROID_NDK_HOME/platforms/android-${ANDROID_API_LEVEL}/arch-${ANDROID_ARCH}/usr/lib/libc.a"; then
AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK]) AC_MSG_ERROR([the --with-android-ndk option does not point to an Android NDK])
fi fi
...@@ -4433,6 +4446,12 @@ linux-android*) ...@@ -4433,6 +4446,12 @@ linux-android*)
PLATFORMID=android_arm_eabi PLATFORMID=android_arm_eabi
OUTPATH=unxandr OUTPATH=unxandr
;; ;;
aarch64)
CPUNAME=AARCH64
RTL_ARCH=AARCH64
PLATFORMID=android_aarch64
OUTPATH=unxandaarch64
;;
mips|mipsel) mips|mipsel)
CPUNAME=GODSON # Weird, but maybe that's the LO convention? CPUNAME=GODSON # Weird, but maybe that's the LO convention?
RTL_ARCH=MIPS_EL RTL_ARCH=MIPS_EL
......
--host=aarch64-linux-android
--disable-cairo-canvas
--disable-cups
--disable-gconf
--disable-gnome-vfs
--disable-gstreamer-0-10
--disable-gstreamer
--disable-liblangtag
--disable-lockdown
--disable-odk
--disable-opengl
--disable-postgresql-sdbc
--disable-python
--disable-randr
--disable-randr-link
--disable-systray
--without-junit
--without-ppds
--without-helppack-integration
...@@ -395,14 +395,16 @@ Java_org_libreoffice_android_Bootstrap_putenv(JNIEnv* env, ...@@ -395,14 +395,16 @@ Java_org_libreoffice_android_Bootstrap_putenv(JNIEnv* env,
jstring string) jstring string)
{ {
const char *s; const char *s;
char *s_copy;
(void) clazz; (void) clazz;
s = (*env)->GetStringUTFChars(env, string, NULL); s = (*env)->GetStringUTFChars(env, string, NULL);
s_copy = strdup(s);
LOGI("putenv(%s)", s); LOGI("putenv(%s)", s_copy);
putenv(s); putenv(s_copy);
#if 0 #if 0
{ {
...@@ -777,7 +779,7 @@ extract_files(const char *root, ...@@ -777,7 +779,7 @@ extract_files(const char *root,
strcat(newfilename, dent->d_name); strcat(newfilename, dent->d_name);
if (stat(newfilename, &st) == 0 && if (stat(newfilename, &st) == 0 &&
(gzipped || st.st_size == size)) { (gzipped || st.st_size == (long long) size)) {
free(filename); free(filename);
free(newfilename); free(newfilename);
continue; continue;
...@@ -793,13 +795,13 @@ extract_files(const char *root, ...@@ -793,13 +795,13 @@ extract_files(const char *root,
if (!gzipped) { if (!gzipped) {
if (fwrite(apkentry, size, 1, f) != 1) { if (fwrite(apkentry, size, 1, f) != 1) {
LOGE("extract_files: Could not write %d bytes to %s: %s", size, newfilename, strerror(errno)); LOGE("extract_files: Could not write %lld bytes to %s: %s", (long long) size, newfilename, strerror(errno));
} else { } else {
LOGI("extract_files: Copied %s to %s: %d bytes", filename, newfilename, size); LOGI("extract_files: Copied %s to %s: %lld bytes", filename, newfilename, (long long) size);
} }
} else { } else {
size = extract_gzipped(filename, apkentry, size, f); size = extract_gzipped(filename, apkentry, size, f);
LOGI("extract_files: Decompressed %s to %s: %d bytes", filename, newfilename, size); LOGI("extract_files: Decompressed %s to %s: %lld bytes", filename, newfilename, (long long) size);
} }
fclose(f); fclose(f);
......
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# please make generic modifications to unxgcc.mk or android.mk
gb_CPUDEFS += -DARM32
gb_COMPILERDEFAULTOPTFLAGS := -Os
gb_CXXFLAGS += -fno-omit-frame-pointer
gb_CFLAGS += -fno-omit-frame-pointer
include $(GBUILDDIR)/platform/unxgcc.mk
include $(GBUILDDIR)/platform/android.mk
# vim: set noet sw=4:
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment