Kaydet (Commit) 9a920bf9 authored tarafından Christian Lohmaier's avatar Christian Lohmaier

fix nss build for android x86 and remove duplicated configure call

remove hardcoded arm flags for android, and instead of patching the
sources, rather specify the desired values on commandline to override
nss' makefile defaults where possible.
Also since the build stage runs nspr configure by itself in a dedicated
outdir, the separate configure step was removed (for all systems).

Change-Id: I586c605615cc2d45b757497395a98c53dd1beb1d
Reviewed-on: https://gerrit.libreoffice.org/42070Reviewed-by: 's avatarChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>
Tested-by: 's avatarChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>
üst 01b0d6da
......@@ -9,25 +9,14 @@
$(eval $(call gb_ExternalProject_ExternalProject,nss))
# nss build calls configure for nspr itself - if for some reason the configure step should be split out,
# make sure to create config.status (aka run configure) in dir specified with OBJDIR_NAME (nspr/out)
$(eval $(call gb_ExternalProject_register_targets,nss,\
configure \
build \
))
$(call gb_ExternalProject_get_state_target,nss,configure):
$(call gb_ExternalProject_run,configure,\
$(if $(filter MSC,$(COM)),INCLUDE="$(COMPATH)/include" LIB="$(ILIB)") \
$(if $(CROSS_COMPILING),\
NSINSTALL="$(call gb_ExternalExecutable_get_command,python) $(SRCDIR)/external/nss/nsinstall.py") \
nspr/configure --includedir=$(call gb_UnpackedTarball_get_dir,nss)/mozilla/dist/out/include \
$(if $(CROSS_COMPILING),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)) \
$(if $(filter ANDROID,$(OS)),--build=$(BUILD_PLATFORM) --host="arm-linux-androidebi" --with-android-ndk=$(ANDROID_NDK_HOME) --with-android-toolchain=$(ANDROID_CLANG_TOOLCHAIN) --with-android-platform=$(ANDROID_PLATFORM_DIRECTORY)) \
$(if $(filter MSC-X86_64,$(COM)-$(CPUNAME)),--enable-64bit) \
$(if $(filter MSC-INTEL,$(COM)-$(CPUNAME)),--host=i686-pc-cygwin) \
,,nss_configure.log)
ifeq ($(OS),WNT)
$(call gb_ExternalProject_get_state_target,nss,build): $(call gb_ExternalProject_get_state_target,nss,configure) $(call gb_ExternalExecutable_get_dependencies,python)
$(call gb_ExternalProject_get_state_target,nss,build): $(call gb_ExternalExecutable_get_dependencies,python)
$(call gb_ExternalProject_run,build,\
$(if $(MSVC_USE_DEBUG_RUNTIME),USE_DEBUG_RTL=1,BUILD_OPT=1) \
MOZ_MSVCVERSION=9 OS_TARGET=WIN95 \
......@@ -39,7 +28,9 @@ $(call gb_ExternalProject_get_state_target,nss,build): $(call gb_ExternalProject
,nss)
else # OS!=WNT
$(call gb_ExternalProject_get_state_target,nss,build): $(call gb_ExternalProject_get_state_target,nss,configure) $(call gb_ExternalExecutable_get_dependencies,python)
# make sure to specify NSPR_CONFIGURE_OPTS as env (before make command), so nss can append it's own defaults
# OTOH specify e.g. CC and NSINSTALL as arguments (after make command), so they will overrule nss makefile values
$(call gb_ExternalProject_get_state_target,nss,build): $(call gb_ExternalExecutable_get_dependencies,python)
$(call gb_ExternalProject_run,build,\
$(if $(filter FREEBSD LINUX MACOSX,$(OS)),$(if $(filter X86_64,$(CPUNAME)),USE_64=1)) \
$(if $(filter IOS,$(OS)),\
......@@ -52,14 +43,14 @@ $(call gb_ExternalProject_get_state_target,nss,build): $(call gb_ExternalProject
$(if $(CROSS_COMPILING),\
$(if $(filter MACOSXPOWERPC,$(OS)$(CPUNAME)),CPU_ARCH=ppc) \
$(if $(filter IOS-ARM,$(OS)-$(CPUNAME)),CPU_ARCH=arm) \
NSINSTALL="$(call gb_ExternalExecutable_get_command,python) $(SRCDIR)/external/nss/nsinstall.py") \
NSPR_CONFIGURE_OPTS="--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)") \
NSDISTMODE=copy \
$(MAKE) -j1 AR="$(AR)" \
RANLIB="$(RANLIB)" \
NMEDIT="$(NM)edit" \
CCC="$(CXX)" \
$(if $(CROSS_COMPILING),NSPR_CONFIGURE_OPTS="--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)") \
$(if $(filter ANDROID,$(OS)),OS_TARGET=Android ANDROID_NDK=$(ANDROID_NDK_HOME) ANDROID_TOOLCHAIN_VERSION=$(ANDROID_GCC_TOOLCHAIN_VERSION) NSPR_CONFIGURE_OPTS="--build=$(BUILD_PLATFORM) --host=arm-linux-androidebi --with-android-ndk=$(ANDROID_NDK_HOME) --with-android-toolchain=$(ANDROID_CLANG_TOOLCHAIN) --with-android-platform=$(ANDROID_PLATFORM_DIRECTORY)") \
CC="$(CC)" CCC="$(CXX)" \
$(if $(CROSS_COMPILING),NSINSTALL="$(call gb_ExternalExecutable_get_command,python) $(SRCDIR)/external/nss/nsinstall.py") \
$(if $(filter ANDROID,$(OS)),OS_TARGET=Android OS_TARGET_RELEASE=14 ARCHFLAG="" DEFAULT_COMPILER=clang ANDROID_NDK=$(ANDROID_NDK_HOME) ANDROID_TOOLCHAIN_VERSION=$(ANDROID_GCC_TOOLCHAIN_VERSION)) \
nss_build_all \
&& rm -f $(call gb_UnpackedTarball_get_dir,nss)/dist/out/lib/*.a \
$(if $(filter MACOSX,$(OS)),\
......
......@@ -33,7 +33,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,nss,\
$(if $(filter WNT,$(OS)), \
external/nss/nss.utf8bom.patch.1) \
$(if $(filter ANDROID,$(OS)), \
external/nss/nss-android.patch) \
external/nss/nss-android.patch.1) \
))
ifeq ($(COM_IS_CLANG),TRUE)
......
--- a/nss.org/nspr/config/config.mk 2017-08-14 18:58:33.560407294 +0530
+++ b/nss/nspr/config/config.mk 2017-08-14 18:59:34.319025410 +0530
@@ -42,6 +42,13 @@
LDFLAGS = $(OS_LDFLAGS)
+# When targeting Android, add HOST_CFLAGS to CC flags
+# It is mandatory when using Clang toolchain in NDK
+# See autoconf.mk in nspr/out/config/ for the values.
+ifeq ($(OS_TARGET),Android)
+CC += $(OS_CFLAGS)
+endif
+
# Enable profile-guided optimization
ifndef NO_PROFILE_GUIDED_OPTIMIZE
ifdef MOZ_PROFILE_GENERATE
--- a/nss.org/nspr/config/Makefile.in 2017-08-14 18:58:33.560407294 +0530
+++ b/nss/nspr/config/Makefile.in 2017-08-14 18:59:34.319025410 +0530
@@ -76,6 +76,7 @@
include $(topsrcdir)/config/rules.mk
+ifneq ($(OS_TARGET),Android)
PROGS = $(OBJDIR)/now$(PROG_SUFFIX)
ifeq (,$(CROSS_COMPILE)$(filter-out OS2 WINNT,$(OS_ARCH)))
@@ -88,6 +89,7 @@
TARGETS = $(PROGS) $(PLSRCS:.pl=)
endif
endif
+endif
OUTOPTION = -o # end of the line
ifeq (,$(filter-out WINNT WIN95 WINCE,$(OS_TARGET)))
--- a/nss.org/nspr/configure 2017-08-14 18:58:33.544407658 +0530
+++ b/nss/nspr/configure 2017-08-14 18:59:34.319025410 +0530
@@ -2509,7 +2509,9 @@
OBJDIR='$(OBJDIR_NAME)'
OBJDIR_NAME=.
OBJDIR_SUFFIX=OBJ
-NSINSTALL='$(MOD_DEPTH)/config/$(OBJDIR_NAME)/nsinstall'
+if [ -z "$NSINSTALL" ]; then
+ NSINSTALL='$(MOD_DEPTH)/config/$(OBJDIR_NAME)/nsinstall'
+fi
NOSUCHFILE=/no-such-file
LIBNSPR='-L$(dist_libdir) -lnspr$(MOD_MAJOR_VERSION)'
LIBPLC='-L$(dist_libdir) -lplc$(MOD_MAJOR_VERSION)'
@@ -2643,7 +2645,7 @@
case "$target" in
arm-linux*-android*|*-linuxandroid*)
- android_tool_prefix="arm-linux-androideabi"
+ android_tool_prefix="clang"
;;
i?86-*android*)
android_tool_prefix="i686-linux-android"
@@ -2737,18 +2739,19 @@
esac
AS="$android_toolchain"/bin/"$android_tool_prefix"-as
- CC="$android_toolchain"/bin/"$android_tool_prefix"-gcc
- CXX="$android_toolchain"/bin/"$android_tool_prefix"-g++
- CPP="$android_toolchain"/bin/"$android_tool_prefix"-cpp
+ CC="$android_toolchain"/bin/"$android_tool_prefix"
+ CXX="$android_toolchain"/bin/"$android_tool_prefix"++
+ CPP="$CC" -E
LD="$android_toolchain"/bin/"$android_tool_prefix"-ld
AR="$android_toolchain"/bin/"$android_tool_prefix"-ar
RANLIB="$android_toolchain"/bin/"$android_tool_prefix"-ranlib
STRIP="$android_toolchain"/bin/"$android_tool_prefix"-strip
CPPFLAGS="-I$android_platform/usr/include $CPPFLAGS"
- CFLAGS="-mandroid -I$android_platform/usr/include -fno-short-enums -fno-exceptions $CFLAGS"
- CXXFLAGS="-mandroid -I$android_platform/usr/include -fpic -fno-short-enums -fno-exceptions $CXXFLAGS"
- LDFLAGS="-mandroid -L$android_platform/usr/lib -Wl,-rpath-link=$android_platform/usr/lib --sysroot=$android_platform $LDFLAGS"
+ CFLAGS="-gcc-toolchain "$android_ndk"/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64"
+ CFLAGS="$CFLAGS -target armv7-none-linux-androideabi"
+ CFLAGS="$CFLAGS --sysroot=$android_platform"
+ CXXFLAGS="-I$android_platform/usr/include -fpic -fno-short-enums -fno-exceptions $CXXFLAGS"
$as_echo "#define ANDROID 1" >>confdefs.h
@@ -5954,7 +5957,7 @@
CFLAGS="$_SAVE_CFLAGS"
fi
-all_flags=`echo $arch_flag $thumb_flag $thumb_interwork_flag $fpu_flag $float_abi_flag $soft_float_flag $align_flag`
+all_flags=`echo -target armv7-none-linux-androideabi $arch_flag $thumb_flag $thumb_interwork_flag $fpu_flag $float_abi_flag $soft_float_flag $align_flag`
if test -n "$all_flags"; then
_SAVE_CFLAGS="$CFLAGS"
CFLAGS="$all_flags"
--- a/nss.org/nss/coreconf/arch.mk 2017-08-14 18:58:33.596406475 +0530
+++ b/nss/nss/coreconf/arch.mk 2017-08-14 18:59:34.319025410 +0530
@@ -237,7 +237,7 @@
OS_TEST := arm
OS_ARCH = Android
ifndef OS_TARGET_RELEASE
- OS_TARGET_RELEASE := 8
+ OS_TARGET_RELEASE := 15
endif
endif
--- a/nss.org/nss/coreconf/Linux.mk 2017-08-14 18:58:33.596406475 +0530
+++ b/nss/nss/coreconf/Linux.mk 2017-08-14 19:00:20.201982027 +0530
@@ -33,16 +33,17 @@
ANDROID_TARGET=$(ANDROID_PREFIX)-$(ANDROID_TOOLCHAIN_VERSION)
# should autodetect which linux we are on, currently android only
# supports linux-x86 prebuilts
- ANDROID_TOOLCHAIN=$(ANDROID_NDK)/toolchains/$(ANDROID_TARGET)/prebuilt/linux-x86
+ ANDROID_GCC_TOOLCHAIN = $(ANDROID_NDK)/toolchains/$(ANDROID_TARGET)/prebuilt/linux-x86_64
+ ANDROID_TOOLCHAIN=$(ANDROID_NDK)/toolchains/llvm/prebuilt/linux-x86_64
ANDROID_SYSROOT=$(ANDROID_NDK)/platforms/android-$(OS_TARGET_RELEASE)/arch-$(OS_TEST)
- ANDROID_CC=$(ANDROID_TOOLCHAIN)/bin/$(ANDROID_PREFIX)-gcc
- ANDROID_CCC=$(ANDROID_TOOLCHAIN)/bin/$(ANDROID_PREFIX)-g++
+ ANDROID_CC=$(ANDROID_TOOLCHAIN)/bin/clang
+ ANDROID_CCC=$(ANDROID_TOOLCHAIN)/bin/clang++
NSS_DISABLE_GTESTS=1
# internal tools need to be built with the native compiler
ifndef INTERNAL_TOOLS
- CC = $(ANDROID_CC) --sysroot=$(ANDROID_SYSROOT)
+ CC = $(ANDROID_CC) --gcc-toolchain=$(ANDROID_GCC_TOOLCHAIN) -target armv7-none-linux-androideabi --sysroot=$(ANDROID_SYSROOT)
CCC = $(ANDROID_CCC) --sysroot=$(ANDROID_SYSROOT)
- DEFAULT_COMPILER=$(ANDROID_PREFIX)-gcc
+ DEFAULT_COMPILER=clang
ARCHFLAG = --sysroot=$(ANDROID_SYSROOT)
DEFINES += -DNO_SYSINFO -DNO_FORK_CHECK -DANDROID
CROSS_COMPILE = 1
--- a/nss.org/nss/coreconf/Makefile 2017-08-14 18:58:33.596406475 +0530
+++ b/nss/nss/coreconf/Makefile 2017-08-14 18:59:34.319025410 +0530
@@ -7,7 +7,9 @@
MODULE = coreconf
+ifneq ($(OS_TARGET),Android)
DIRS = nsinstall
+endif
include $(DEPTH)/coreconf/config.mk
include $(DEPTH)/coreconf/rules.mk
--- a/nss.org/nss/coreconf/UNIX.mk 2017-08-14 18:58:33.596406475 +0530
+++ b/nss/nss/coreconf/UNIX.mk 2017-08-14 18:59:34.319025410 +0530
@@ -24,7 +24,6 @@
NSINSTALL = $(BUILD_TREE)/nss/nsinstall
else
NSINSTALL_DIR = $(CORE_DEPTH)/coreconf/nsinstall
-NSINSTALL = $(NSINSTALL_DIR)/$(OBJDIR_NAME)/nsinstall
endif
MKDEPEND_DIR = $(CORE_DEPTH)/coreconf/mkdepend
--- a/nss.org/nss/coreconf/Werror.mk 2017-08-14 18:58:33.596406475 +0530
+++ b/nss/nss/coreconf/Werror.mk 2017-08-14 18:59:34.319025410 +0530
@@ -52,9 +52,6 @@
WARNING_CFLAGS = -Wall
ifdef CC_IS_CLANG
- # -Qunused-arguments : clang objects to arguments that it doesn't understand
- # and fixing this would require rearchitecture
- WARNING_CFLAGS += -Qunused-arguments
# -Wno-parentheses-equality : because clang warns about macro expansions
WARNING_CFLAGS += $(call disable_warning,parentheses-equality)
ifdef BUILD_OPT
diff -ur nss.org/nspr/build/autoconf/config.sub nss/nspr/build/autoconf/config.sub
--- nss.org/nspr/build/autoconf/config.sub 2017-09-07 15:29:45.031246453 +0200
+++ nss/nspr/build/autoconf/config.sub 2017-09-07 15:32:13.087235423 +0200
@@ -111,6 +111,9 @@
exit 1;;
esac
+if test $1 = "arm-unknown-linux-androideabi"; then echo $1; exit; fi
+if test $1 = "i686-pc-linux-android"; then echo $1; exit; fi
+
# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
diff -ur nss.org/nspr/configure nss/nspr/configure
--- nss.org/nspr/configure 2017-09-07 15:29:45.018246359 +0200
+++ nss/nspr/configure 2017-09-07 15:31:47.604075663 +0200
@@ -2737,18 +2739,15 @@
esac
AS="$android_toolchain"/bin/"$android_tool_prefix"-as
- CC="$android_toolchain"/bin/"$android_tool_prefix"-gcc
- CXX="$android_toolchain"/bin/"$android_tool_prefix"-g++
- CPP="$android_toolchain"/bin/"$android_tool_prefix"-cpp
+ CC="$CC"
+ CXX="$CXX"
+ CPP="$CC" -E
LD="$android_toolchain"/bin/"$android_tool_prefix"-ld
AR="$android_toolchain"/bin/"$android_tool_prefix"-ar
RANLIB="$android_toolchain"/bin/"$android_tool_prefix"-ranlib
STRIP="$android_toolchain"/bin/"$android_tool_prefix"-strip
CPPFLAGS="-I$android_platform/usr/include $CPPFLAGS"
- CFLAGS="-mandroid -I$android_platform/usr/include -fno-short-enums -fno-exceptions $CFLAGS"
- CXXFLAGS="-mandroid -I$android_platform/usr/include -fpic -fno-short-enums -fno-exceptions $CXXFLAGS"
- LDFLAGS="-mandroid -L$android_platform/usr/lib -Wl,-rpath-link=$android_platform/usr/lib --sysroot=$android_platform $LDFLAGS"
$as_echo "#define ANDROID 1" >>confdefs.h
diff -ur nss.org/nss/Makefile nss/nss/Makefile
--- nss.org/nss/Makefile 2017-09-07 15:29:44.933245745 +0200
+++ nss/nss/Makefile 2017-09-07 15:32:04.347181076 +0200
@@ -62,6 +62,7 @@
ifeq ($(OS_TARGET),Android)
NSPR_CONFIGURE_OPTS += --with-android-ndk=$(ANDROID_NDK) \
--target=$(ANDROID_PREFIX) \
+ --with-arch=toolchain-default \
--with-android-version=$(OS_TARGET_RELEASE) \
--with-android-toolchain=$(ANDROID_TOOLCHAIN) \
--with-android-platform=$(ANDROID_SYSROOT)
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