summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Lillqvist <tml@iki.fi>2012-08-16 21:04:10 +0300
committerTor Lillqvist <tml@iki.fi>2012-08-16 21:05:14 +0300
commit8b5cf7fb57c0f68ee312d7f7b404533807349318 (patch)
tree225332a33d0ae93aaf57dc0c2fcaa273012a49ab
parentHaving a pkg-config on the Mac *will* break the build, so error out (diff)
downloadcore-8b5cf7fb57c0f68ee312d7f7b404533807349318.tar.gz
core-8b5cf7fb57c0f68ee312d7f7b404533807349318.zip
For kicks, enable cross-building for Android on MIPS
Change-Id: I6fa2b9a50c525fb2d8666a144409eb9a3ad2698a
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx19
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_mips/makefile.mk2
-rw-r--r--configure.in27
-rw-r--r--cppunit/makefile.mk2
-rw-r--r--fontconfig/fontconfig-2.8.0.patch4
-rw-r--r--icu/icu4c-android.patch2
-rw-r--r--icu/makefile.mk2
-rw-r--r--sal/android/lo-bootstrap.c6
-rw-r--r--solenv/gbuild/platform/ANDROID_GODSON_GCC.mk102
-rw-r--r--solenv/inc/unx.mk10
-rw-r--r--solenv/inc/unxand.mk (renamed from solenv/inc/unxandr.mk)2
11 files changed, 155 insertions, 23 deletions
diff --git a/bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx
index e62c779bbb4b..0e94144c0ef3 100644
--- a/bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx
+++ b/bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx
@@ -51,7 +51,14 @@ using namespace ::std;
using namespace ::osl;
using namespace ::rtl;
#endif
+
+#ifndef ANDROID
#include <sys/sysmips.h>
+#endif
+
+#ifdef ANDROID
+#include <unistd.h>
+#endif
#ifdef OSL_BIGENDIAN
#define IS_BIG_ENDIAN 1
@@ -619,7 +626,9 @@ namespace
case typelib_TypeClass_DOUBLE:
{ register double dret asm("$f0");
- dret = (*((double*)nRegReturn)); }
+ dret = (*((double*)nRegReturn));
+ (void) dret;
+ }
break;
case typelib_TypeClass_HYPER:
@@ -710,9 +719,15 @@ namespace
}
-void bridges::cpp_uno::shared::VtableFactory::flushCode(unsigned char const * /*bptr*/, unsigned char const * /*eptr*/)
+void bridges::cpp_uno::shared::VtableFactory::flushCode(unsigned char const *bptr, unsigned char const *eptr)
{
+#ifndef ANDROID
+ (void) bptr;
+ (void) eptr;
sysmips(FLUSH_CACHE,0,0,0);
+#else
+ cacheflush((long) bptr, (long) eptr, 0);
+#endif
}
struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
diff --git a/bridges/source/cpp_uno/gcc3_linux_mips/makefile.mk b/bridges/source/cpp_uno/gcc3_linux_mips/makefile.mk
index ddb481781437..3c6ab816ee09 100644
--- a/bridges/source/cpp_uno/gcc3_linux_mips/makefile.mk
+++ b/bridges/source/cpp_uno/gcc3_linux_mips/makefile.mk
@@ -37,7 +37,7 @@ ENABLE_EXCEPTIONS=TRUE
# --- Files --------------------------------------------------------
-.IF "$(COM)$(OS)$(CPU)" == "GCCLINUXM"
+.IF "$(COM)$(OS)$(CPU)" == "GCCLINUXM" || "$(COM)$(OS)$(CPU)" == "GCCANDROIDM"
# In case someone enabled the non-standard -fomit-frame-pointer which does not
# work with the .cxx sources in this directory:
diff --git a/configure.in b/configure.in
index 9e7760ebdf5e..a27035062bd3 100644
--- a/configure.in
+++ b/configure.in
@@ -126,13 +126,15 @@ if test -n "$with_android_ndk"; then
if test $host_cpu = arm; then
android_cpu=arm
+ elif test $host_cpu = mips; then
+ android_cpu=mips
else
# host_cpu is something like "i386" or "i686" I guess, NDK uses
# "x86" in some contexts
android_cpu=x86
fi
- ANDROID_ABI_PREBUILT_BIN=`echo $ANDROID_NDK_HOME/toolchains/$android_cpu-*$with_android_ndk_toolchain_version/prebuilt/*/bin`
+ ANDROID_ABI_PREBUILT_BIN=`echo $ANDROID_NDK_HOME/toolchains/$android_cpu*-*$with_android_ndk_toolchain_version/prebuilt/*/bin`
# Check if there are several toolchain versions
case "$ANDROID_ABI_PREBUILT_BIN" in
*/bin\ */bin*)
@@ -141,7 +143,7 @@ if test -n "$with_android_ndk"; then
# This stays empty if there is just one version of the toolchain in the NDK
ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR=
- case "`echo $ANDROID_NDK_HOME/toolchains/$android_cpu-*/prebuilt/*/bin`" in
+ case "`echo $ANDROID_NDK_HOME/toolchains/$android_cpu*-*/prebuilt/*/bin`" in
*/bin\ */bin*)
# Trailing slash intentional and necessary, compare to how this is used
ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR="${with_android_ndk_toolchain_version}/"
@@ -150,6 +152,8 @@ if test -n "$with_android_ndk"; then
if test $host_cpu = arm; then
android_gcc_prefix=arm-linux-androideabi
+ elif test $host_cpu = mips; then
+ android_gcc_prefix=mipsel-linux-android
elif test -f $ANDROID_ABI_PREBUILT_BIN/i686-android-linux-gcc; then
android_gcc_prefix=i686-android-linux
elif test -f $ANDROID_ABI_PREBUILT_BIN/i686-linux-android-gcc; then
@@ -167,6 +171,8 @@ if test -n "$with_android_ndk"; then
if test $host_cpu = arm; then
ANDROIDCFLAGS="-Wno-psabi -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8 --sysroot $ANDROID_NDK_HOME/platforms/android-9/arch-arm -L$ANDROID_NDK_HOME/sources/cxx-stl/gnu-libstdc++/${ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR}libs/armeabi-v7a"
+ elif test $host_cpu = mips; then
+ ANDROIDCFLAGS="-Wno-psabi --sysroot $ANDROID_NDK_HOME/platforms/android-9/arch-mips -L$ANDROID_NDK_HOME/sources/cxx-stl/gnu-libstdc++/${ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR}libs/mips"
else # x86
ANDROIDCFLAGS="-Wno-psabi -march=atom --sysroot $ANDROID_NDK_HOME/platforms/android-9/arch-x86 -L$ANDROID_NDK_HOME/sources/cxx-stl/gnu-libstdc++/${ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR}libs/x86"
fi
@@ -174,7 +180,10 @@ if test -n "$with_android_ndk"; then
# When using the 4.6 or newer toolchain, use the gold linker
case "$with_android_ndk_toolchain_version" in
4.[[6789]]*|[[56789]].*)
- ANDROIDCFLAGS="$ANDROIDCFLAGS -fuse-ld=gold"
+ # The NDK doesn't have ld.gold for MIPS for some reason
+ if test "$host_cpu" != mips; then
+ ANDROIDCFLAGS="$ANDROIDCFLAGS -fuse-ld=gold"
+ fi
;;
esac
@@ -189,6 +198,8 @@ if test -n "$with_android_ndk"; then
if test $host_cpu = arm; then
ANDROIDCXXFLAGS="$ANDROIDCFLAGS -I $ANDROID_NDK_HOME/sources/cxx-stl/gnu-libstdc++/${ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR}include -I$ANDROID_NDK_HOME/sources/cxx-stl/gnu-libstdc++/${ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR}libs/armeabi-v7a/include"
+ elif test $host_cpu = mips; then
+ ANDROIDCXXFLAGS="$ANDROIDCFLAGS -I $ANDROID_NDK_HOME/sources/cxx-stl/gnu-libstdc++/${ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR}include -I$ANDROID_NDK_HOME/sources/cxx-stl/gnu-libstdc++/${ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR}libs/mips/include"
else # x86
ANDROIDCXXFLAGS="$ANDROIDCFLAGS -I $ANDROID_NDK_HOME/sources/cxx-stl/gnu-libstdc++/${ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR}include -I$ANDROID_NDK_HOME/sources/cxx-stl/gnu-libstdc++/${ANDROID_NDK_TOOLCHAIN_VERSION_SUBDIR}libs/x86/include"
fi
@@ -425,7 +436,7 @@ dragonfly*)
_os=DragonFly
;;
-linux-androideabi*)
+linux-android*)
build_gstreamer=no
build_gstreamer_0_10=no
test_cups=no
@@ -3461,7 +3472,7 @@ linux-gnu*)
SOLARLIB="$SOLARLIB -L$SRC_ROOT/solenv/$OUTPATH/lib"
;;
-linux-androideabi*)
+linux-android*)
COM=GCC
GUI=UNX
GUIBASE=android
@@ -3477,6 +3488,12 @@ linux-androideabi*)
RTL_ARCH=ARM_EABI
OUTPATH=unxandr
;;
+ mips|mipsel)
+ CPU=M
+ CPUNAME=GODSON # Weird, but maybe that's the LO convention?
+ RTL_ARCH=MIPS_EL
+ OUTPATH=unxandm
+ ;;
i*86)
CPU=I
CPUNAME=INTEL
diff --git a/cppunit/makefile.mk b/cppunit/makefile.mk
index 2880d32c41c3..446067db5686 100644
--- a/cppunit/makefile.mk
+++ b/cppunit/makefile.mk
@@ -116,7 +116,7 @@ MY_LIBS = -lm
.END
.IF "$(OS)" == "ANDROID"
-MY_LIBS= -lgnustl_shared
+MY_LIBS= -lgnustl_shared -lm
.ENDIF
CONFIGURE_ACTION = ./configure
diff --git a/fontconfig/fontconfig-2.8.0.patch b/fontconfig/fontconfig-2.8.0.patch
index 79d7c3e7926f..a75648a49ba2 100644
--- a/fontconfig/fontconfig-2.8.0.patch
+++ b/fontconfig/fontconfig-2.8.0.patch
@@ -5,7 +5,7 @@
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
-+ nto-qnx* | linux-androideabi* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
++ nto-qnx* | linux-android* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
@@ -14,7 +14,7 @@
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-+ | -udi* | -androideabi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
++ | -udi* | -android* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
diff --git a/icu/icu4c-android.patch b/icu/icu4c-android.patch
index 1eb910a7daac..ad513a2afdf4 100644
--- a/icu/icu4c-android.patch
+++ b/icu/icu4c-android.patch
@@ -34,7 +34,7 @@
# wchar_t can be used
CHECK_UTF16_STRING_RESULT="available"
;;
-+*-*-*-androideabi*)
++*-*-*-androideabi|mips-unknown-linux-android)
+ # no UTF-16 strings thanks, I think, this is to avoid the -std=c++0x which causes trouble with uint64_t
+ CHECK_UTF16_STRING_RESULT="nope"
+ ;;
diff --git a/icu/makefile.mk b/icu/makefile.mk
index a6da650912ba..e7fa92587651 100644
--- a/icu/makefile.mk
+++ b/icu/makefile.mk
@@ -153,7 +153,7 @@ BUILD_AND_HOST=--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM) --with-cross-bu
.IF "$(OS)"=="ANDROID"
LIBRARY_SUFFIX= --with-library-suffix=lo
-icu_LDFLAGS+=-lgnustl_shared
+icu_LDFLAGS+=-lgnustl_shared -lm
.ENDIF
CONFIGURE_ACTION+=sh -c 'CPPFLAGS="$(EXTRA_CDEFS)" CFLAGS="$(icu_CFLAGS)" CXXFLAGS="$(icu_CXXFLAGS)" LDFLAGS="$(icu_LDFLAGS) $(LDFLAGSADD)" \
diff --git a/sal/android/lo-bootstrap.c b/sal/android/lo-bootstrap.c
index 8301af6d1a19..eace9b7f32a7 100644
--- a/sal/android/lo-bootstrap.c
+++ b/sal/android/lo-bootstrap.c
@@ -1235,7 +1235,7 @@ lo_dlcall_argc_argv(void *function,
return result;
}
-#ifndef X86
+#ifdef ARM
/* There is a bug in std::type_info::operator== and
* std::type_info::before() in libgnustl_shared.so in NDK r7 at
@@ -1408,7 +1408,7 @@ patch_libgnustl_shared(void)
sizeof(expected_method_before_r7_code),
&replacement_method_before_arm);
}
-#endif // not X86
+#endif // ARM
// static native void patch_libgnustl_shared();
__attribute__ ((visibility("default")))
@@ -1419,7 +1419,7 @@ Java_org_libreoffice_android_Bootstrap_patch_1libgnustl_1shared(JNIEnv* env,
(void) env;
(void) clazz;
-#ifndef X86
+#ifdef ARM
patch_libgnustl_shared();
#endif
}
diff --git a/solenv/gbuild/platform/ANDROID_GODSON_GCC.mk b/solenv/gbuild/platform/ANDROID_GODSON_GCC.mk
new file mode 100644
index 000000000000..bb2a90ba526d
--- /dev/null
+++ b/solenv/gbuild/platform/ANDROID_GODSON_GCC.mk
@@ -0,0 +1,102 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+# Version: MPL 1.1 / GPLv3+ / LGPLv3+
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License or as specified alternatively below. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# Major Contributor(s):
+# Copyright (C) 2010 Red Hat, Inc., Caolán McNamara <caolanm@redhat.com>
+# (initial developer)
+#
+# All Rights Reserved.
+#
+# For minor contributions see the git repository.
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+# instead of those above.
+
+#please make generic modifications to unxgcc.mk or linux.mk
+gb_CPUDEFS += -DMIPS
+gb_COMPILERDEFAULTOPTFLAGS := -Os
+
+include $(GBUILDDIR)/platform/unxgcc.mk
+
+# Link almost everything with -lgnustl_shared
+gb_STDLIBS := \
+ gnustl_shared \
+
+gb_Library_PLAINLIBS_NONE := \
+ android \
+ gnustl_shared \
+
+# No unit testing can be run
+gb_CppunitTest_CPPTESTPRECOMMAND := :
+
+# Re-define this from unxgcc.mk with some small but important
+# changes. Just temporarily done this way, shm_get promised to
+# eventually enable this to be done this in some more elegant and less
+# redundant fashion.
+
+gb_LinkTarget_LDFLAGS += \
+ -Wl,-z,defs \
+ -Wl,--as-needed \
+ -Wl,--no-add-needed
+
+define gb_LinkTarget__command_dynamiclink
+$(call gb_Helper_abbreviate_dirs,\
+ mkdir -p $(dir $(1)) && \
+ $(gb_CXX) \
+ -shared \
+ $(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \
+ $(if $(filter Library,$(TARGETTYPE)),$(gb_Library_LTOFLAGS)) \
+ $(subst \d,$$,$(RPATH)) \
+ $(T_LDFLAGS) \
+ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
+ $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
+ $(foreach object,$(ASMOBJECTS),$(call gb_AsmObject_get_target,$(object))) \
+ $(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \
+ $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \
+ $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),`cat $(extraobjectlist)`) \
+ -Wl$(COMMA)--start-group $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) -Wl$(COMMA)--end-group \
+ $(LIBS) \
+ $(patsubst lib%.a,-l%,$(patsubst lib%.so,-l%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib))))) \
+ -o $(1))
+endef
+
+# Prefix UNO library filenames with "lib"
+gb_Library_FILENAMES := \
+ $(foreach lib,$(gb_Library_OOOLIBS),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_OOOEXT)) \
+ $(foreach lib,$(gb_Library_PLAINLIBS_NONE),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_PLAINEXT)) \
+ $(foreach lib,$(gb_Library_PLAINLIBS_URE),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_PLAINEXT)) \
+ $(foreach lib,$(gb_Library_PLAINLIBS_OOO),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_PLAINEXT)) \
+ $(foreach lib,$(gb_Library_RTLIBS),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_RTEXT)) \
+ $(foreach lib,$(gb_Library_RTVERLIBS),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_RTEXT)) \
+ $(foreach lib,$(gb_Library_UNOLIBS_URE),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_UNOEXT)) \
+ $(foreach lib,$(gb_Library_UNOLIBS_OOO),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_UNOEXT)) \
+ $(foreach lib,$(gb_Library_UNOVERLIBS),$(lib):$(gb_Library_UNOVERPRE)$(lib)$(gb_Library_PLAINEXT)) \
+
+
+# No DT_RPATH or DT_RUNPATH support in the Bionic dynamic linker so
+# don't bother generating such.
+
+define gb_Library_get_rpath
+endef
+
+define gb_Executable_get_rpath
+endef
+
+gb_LinkTarget_LDFLAGS := $(subst -Wl$(COMMA)-rpath-link$(COMMA)$(SYSBASE)/lib:$(SYSBASE)/usr/lib,,$(gb_LinkTarget_LDFLAGS))
+
+gb_Library__set_soversion_script_platform =
+
+# vim: set noet sw=4:
diff --git a/solenv/inc/unx.mk b/solenv/inc/unx.mk
index 619c2e828736..dc62a50b13f3 100644
--- a/solenv/inc/unx.mk
+++ b/solenv/inc/unx.mk
@@ -91,12 +91,8 @@
.INCLUDE : unxlngr.mk
.ENDIF
-.IF "$(COM)$(OS)$(CPU)" == "GCCANDROIDR"
-.INCLUDE : unxandr.mk
-.ENDIF
-
-.IF "$(COM)$(OS)$(CPU)" == "GCCANDROIDI"
-.INCLUDE : unxandr.mk
+.IF "$(COM)$(OS)" == "GCCANDROID"
+.INCLUDE : unxand.mk
.ENDIF
.IF "$(COM)$(OS)$(CPU)" == "GCCLINUXA"
@@ -199,4 +195,4 @@ SOLARLIB+=-L$(KDE_ROOT)/lib64
OOO_LIBRARY_PATH_VAR *= DYLD_LIBRARY_PATH
.ELSE
OOO_LIBRARY_PATH_VAR *= LD_LIBRARY_PATH
-.ENDIF \ No newline at end of file
+.ENDIF
diff --git a/solenv/inc/unxandr.mk b/solenv/inc/unxand.mk
index 5065aa1491f7..8025388a9f64 100644
--- a/solenv/inc/unxandr.mk
+++ b/solenv/inc/unxand.mk
@@ -31,6 +31,8 @@ CDEFAULTOPT=-Os
.INCLUDE : unxgcc.mk
.IF "$(CPU)" == "I"
CDEFS+=-DX86
+.ELIF "$(CPU)" == "M"
+CDEFS+=-DMIPS
.ELSE
CDEFS+=-DARM32
.ENDIF