diff options
-rw-r--r-- | bridges/source/cpp_uno/gcc3_linux_mips/cpp2uno.cxx | 19 | ||||
-rw-r--r-- | bridges/source/cpp_uno/gcc3_linux_mips/makefile.mk | 2 | ||||
-rw-r--r-- | configure.in | 27 | ||||
-rw-r--r-- | cppunit/makefile.mk | 2 | ||||
-rw-r--r-- | fontconfig/fontconfig-2.8.0.patch | 4 | ||||
-rw-r--r-- | icu/icu4c-android.patch | 2 | ||||
-rw-r--r-- | icu/makefile.mk | 2 | ||||
-rw-r--r-- | sal/android/lo-bootstrap.c | 6 | ||||
-rw-r--r-- | solenv/gbuild/platform/ANDROID_GODSON_GCC.mk | 102 | ||||
-rw-r--r-- | solenv/inc/unx.mk | 10 | ||||
-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 |