From 6c4ba06597be6efec7e2036c76d4dd8d2e53443c Mon Sep 17 00:00:00 2001 From: Jookia <166291@gmail.com> Date: Sun, 3 Jul 2016 21:32:51 +1000 Subject: [PATCH] spidermonkey: Fix building 185-1.0.0 on ARMv7. --- .../interpreters/spidermonkey/185-1.0.0.nix | 15 +- .../interpreters/spidermonkey/arm-flags.patch | 342 ++++++++++++++++++ 2 files changed, 353 insertions(+), 4 deletions(-) create mode 100644 pkgs/development/interpreters/spidermonkey/arm-flags.patch diff --git a/pkgs/development/interpreters/spidermonkey/185-1.0.0.nix b/pkgs/development/interpreters/spidermonkey/185-1.0.0.nix index 779f0ef26d45..b3fa96d756af 100644 --- a/pkgs/development/interpreters/spidermonkey/185-1.0.0.nix +++ b/pkgs/development/interpreters/spidermonkey/185-1.0.0.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, pkgconfig, nspr, perl, python, zip }: +{ stdenv, autoconf213, fetchurl, pkgconfig, nspr, perl, python, zip }: stdenv.mkDerivation rec { version = "185-1.0.0"; @@ -12,17 +12,21 @@ stdenv.mkDerivation rec { propagatedBuildInputs = [ nspr ]; buildInputs = [ pkgconfig perl python zip ]; + nativeBuildInputs = if stdenv.isArm then [ autoconf213 ] else []; postUnpack = "sourceRoot=\${sourceRoot}/js/src"; preConfigure = '' export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${nspr.dev}/include/nspr" export LIBXUL_DIST=$out + ${if stdenv.isArm then "autoreconf --verbose --force" else ""} ''; - # Explained below in configureFlags for ARM patches = stdenv.lib.optionals stdenv.isArm [ + # Explained below in configureFlags for ARM ./findvanilla.patch + # Fix for hard float flags. + ./arm-flags.patch ]; patchFlags = "-p3"; @@ -33,12 +37,15 @@ stdenv.mkDerivation rec { # of polkit, which is what matters most, it does not override the allocator # so the failure of that test does not matter much. configureFlags = [ "--enable-threadsafe" "--with-system-nspr" ] ++ - stdenv.lib.optionals stdenv.isArm [ + stdenv.lib.optionals (stdenv.system == "armv5tel-linux") [ "--with-cpu-arch=armv5t" "--disable-tracejit" ]; # hack around a make problem, see https://github.com/NixOS/nixpkgs/issues/1279#issuecomment-29547393 - preBuild = "touch -- {.,shell,jsapi-tests}/{-lpthread,-ldl}"; + preBuild = '' + touch -- {.,shell,jsapi-tests}/{-lpthread,-ldl} + ${if stdenv.isArm then "rm -r jit-test/tests/jaeger/bug563000" else ""} + ''; enableParallelBuilding = true; diff --git a/pkgs/development/interpreters/spidermonkey/arm-flags.patch b/pkgs/development/interpreters/spidermonkey/arm-flags.patch new file mode 100644 index 000000000000..721aff154e37 --- /dev/null +++ b/pkgs/development/interpreters/spidermonkey/arm-flags.patch @@ -0,0 +1,342 @@ +From: Mike Hommey +Date: Wed, 27 Apr 2011 08:58:01 +0200 +Subject: Bug 626035 - Modify the way arm compiler flags are set in configure + +--- + configure.in | 292 ++++++++++++++++++++++++++++++++------------------- + js/src/configure.in | 284 ++++++++++++++++++++++++++++++++----------------- + 2 files changed, 372 insertions(+), 204 deletions(-) + +Index: mozjs-1.8.5-1.0.0+dfsg/js/src/configure.in +=================================================================== +--- mozjs-1.8.5-1.0.0+dfsg.orig/js/src/configure.in 2012-01-21 15:57:37.507703219 +0100 ++++ mozjs-1.8.5-1.0.0+dfsg/js/src/configure.in 2012-01-21 15:58:04.951703302 +0100 +@@ -3535,34 +3535,6 @@ + AC_CHECK_LIB(socket, socket) + esac + +-AC_MSG_CHECKING(for ARM SIMD support in compiler) +-AC_TRY_COMPILE([], +- [asm("uqadd8 r1, r1, r2");], +- result="yes", result="no") +-AC_MSG_RESULT("$result") +-if test "$result" = "yes"; then +- AC_DEFINE(HAVE_ARM_SIMD) +- HAVE_ARM_SIMD=1 +-fi +-AC_SUBST(HAVE_ARM_SIMD) +- +-AC_MSG_CHECKING(for ARM NEON support in compiler) +-_SAVE_CFLAGS="$CFLAGS" +-if test "$GNU_CC"; then +- # gcc needs -mfpu=neon to recognize NEON instructions +- CFLAGS="$CFLAGS -mfpu=neon -mfloat-abi=softfp" +-fi +-AC_TRY_COMPILE([], +- [asm("vadd.i8 d0, d0, d0");], +- result="yes", result="no") +-AC_MSG_RESULT("$result") +-if test "$result" = "yes"; then +- AC_DEFINE(HAVE_ARM_NEON) +- HAVE_ARM_NEON=1 +-fi +-CFLAGS="$_SAVE_CFLAGS" +-AC_SUBST(HAVE_ARM_NEON) +- + dnl ======================================================== + dnl = pthread support + dnl = Start by checking whether the system support pthreads +@@ -4614,13 +4586,11 @@ + BUILD_STATIC_LIBS= + ENABLE_TESTS=1 + +-MOZ_THUMB2= + USE_ARM_KUSER= + + case "${target}" in + arm-android-eabi) + USE_ARM_KUSER=1 +- MOZ_THUMB2=1 + ;; + esac + +@@ -4666,80 +4636,204 @@ + dnl ======================================================== + MOZ_ARG_HEADER(Individual module options) + +-dnl Setup default CPU arch for arm target +-case "$target_cpu" in +- arm*) +- MOZ_ARM_ARCH=armv7 +- ;; +-esac + dnl ======================================================== +-dnl = Enable building the Thumb2 instruction set ++dnl = ARM toolchain tweaks + dnl ======================================================== +-MOZ_ARG_ENABLE_BOOL(thumb2, +- [ --enable-thumb2 Enable Thumb2 instruction set (implies ARMv7)], +- MOZ_THUMB2=1, +- MOZ_THUMB2=) +-if test -n "$MOZ_THUMB2"; then +- MOZ_ARM_ARCH=armv7 ++ ++dnl Defaults ++case "${target}" in ++arm-android-eabi) ++ MOZ_THUMB=yes ++ MOZ_ARCH=armv7-a ++ MOZ_FPU=vfp ++ MOZ_FLOAT_ABI=softfp ++ ;; ++arm*-*) ++ if test -n "$MOZ_PLATFORM_MAEMO"; then ++ MOZ_THUMB=no ++ MOZ_ARCH=armv7-a ++ MOZ_FLOAT_ABI=softfp ++ fi ++ if test "$MOZ_PLATFORM_MAEMO" = 6; then ++ MOZ_THUMB=yes ++ fi ++ ;; ++esac ++ ++dnl Kept for compatibility with some buildbot mozconfig ++MOZ_ARG_DISABLE_BOOL(thumb2, [], MOZ_THUMB=no, MOZ_THUMB=yes) ++ ++MOZ_ARG_WITH_STRING(thumb, ++[ --with-thumb[[=yes|no|toolchain]]] ++[ Use Thumb instruction set (-mthumb)], ++ if test -z "$GNU_CC"; then ++ AC_MSG_ERROR([--with-thumb is not supported on non-GNU toolchains]) ++ fi ++ MOZ_THUMB=$withval) ++ ++MOZ_ARG_WITH_STRING(thumb-interwork, ++[ --with-thumb-interwork[[=yes|no|toolchain]] ++ Use Thumb/ARM instuctions interwork (-mthumb-interwork)], ++ if test -z "$GNU_CC"; then ++ AC_MSG_ERROR([--with-thumb-interwork is not supported on non-GNU toolchains]) ++ fi ++ MOZ_THUMB_INTERWORK=$withval) ++ ++MOZ_ARG_WITH_STRING(arch, ++[ --with-arch=[[type|toolchain]] ++ Use specific CPU features (-march=type)], ++ if test -z "$GNU_CC"; then ++ AC_MSG_ERROR([--with-arch is not supported on non-GNU toolchains]) ++ fi ++ MOZ_ARCH=$withval) ++ ++MOZ_ARG_WITH_STRING(fpu, ++[ --with-fpu=[[type|toolchain]] ++ Use specific FPU type (-mfpu=type)], ++ if test -z "$GNU_CC"; then ++ AC_MSG_ERROR([--with-fpu is not supported on non-GNU toolchains]) ++ fi ++ MOZ_FPU=$withval) ++ ++MOZ_ARG_WITH_STRING(float-abi, ++[ --with-float-abi=[[type|toolchain]] ++ Use specific arm float ABI (-mfloat-abi=type)], ++ if test -z "$GNU_CC"; then ++ AC_MSG_ERROR([--with-float-abi is not supported on non-GNU toolchains]) ++ fi ++ MOZ_FLOAT_ABI=$withval) ++ ++MOZ_ARG_WITH_STRING(soft-float, ++[ --with-soft-float[[=yes|no|toolchain]] ++ Use soft float library (-msoft-float)], ++ if test -z "$GNU_CC"; then ++ AC_MSG_ERROR([--with-soft-float is not supported on non-GNU toolchains]) ++ fi ++ MOZ_SOFT_FLOAT=$withval) ++ ++case "$MOZ_ARCH" in ++toolchain|"") ++ arch_flag="" ++ ;; ++*) ++ arch_flag="-march=$MOZ_ARCH" ++ ;; ++esac ++ ++case "$MOZ_THUMB" in ++yes) ++ MOZ_THUMB2=1 ++ thumb_flag="-mthumb" ++ ;; ++no) ++ MOZ_THUMB2= ++ thumb_flag="-marm" ++ ;; ++*) ++ _SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$arch_flag" ++ AC_TRY_COMPILE([],[return sizeof(__thumb2__);], ++ MOZ_THUMB2=1, ++ MOZ_THUMB2=) ++ CFLAGS="$_SAVE_CFLAGS" ++ thumb_flag="" ++ ;; ++esac ++ ++if test "$MOZ_THUMB2" = 1; then ++ AC_DEFINE(MOZ_THUMB2) + fi + +-dnl ======================================================== +-dnl = Enable building for ARM specific CPU features +-dnl ======================================================== +-MOZ_ARG_WITH_STRING(cpu-arch, +-[ --with-cpu-arch=arch Use specific arm architecture CPU features, default armv7], +- MOZ_ARM_ARCH=$withval) ++case "$MOZ_THUMB_INTERWORK" in ++yes) ++ thumb_interwork_flag="-mthumb-interwork" ++ ;; ++no) ++ thumb_interwork_flag="-mno-thumb-interwork" ++ ;; ++*) # toolchain ++ thumb_interwork_flag="" ++ ;; ++esac + +-if test -n "$MOZ_THUMB2"; then +- case "$target_cpu" in +- arm*) +- if test "$MOZ_ARM_ARCH" != "armv7"; then +- AC_MSG_ERROR([--enable-thumb2 is not compatible with cpu-arch=$MOZ_ARM_ARCH]) +- fi +- if test "$GNU_CC"; then +- AC_DEFINE(MOZ_THUMB2) +- AC_DEFINE(MOZ_ARM_ARCH) +- CFLAGS="$CFLAGS -march=armv7-a -mthumb -mfloat-abi=softfp $MOZ_ARM_VFP_FLAGS" +- CXXFLAGS="$CXXFLAGS -march=armv7-a -mthumb -mfloat-abi=softfp $MOZ_ARM_VFP_FLAGS" +- ASFLAGS="$ASFLAGS -march=armv7-a -mthumb -mfloat-abi=softfp $MOZ_ARM_VFP_FLAGS" +- else +- AC_MSG_ERROR([--enable-thumb2 is not supported for non-GNU toolchains]) +- fi ++case "$MOZ_FPU" in ++toolchain|"") ++ fpu_flag="" + ;; +- *) +- AC_MSG_ERROR([--enable-thumb2 is not supported for non-ARM CPU architectures]) ++*) ++ fpu_flag="-mfpu=$MOZ_FPU" + ;; +- esac +-elif test "$MOZ_ARM_ARCH" = "armv7"; then +- case "$target_cpu" in +- arm*) +- if test "$GNU_CC"; then +- AC_DEFINE(MOZ_ARM_ARCH) +- CFLAGS="$CFLAGS -march=armv7-a -marm -mfloat-abi=softfp $MOZ_ARM_VFP_FLAGS" +- CXXFLAGS="$CXXFLAGS -march=armv7-a -marm -mfloat-abi=softfp $MOZ_ARM_VFP_FLAGS" +- ASFLAGS="$ASFLAGS -march=armv7-a -marm -mfloat-abi=softfp $MOZ_ARM_VFP_FLAGS" +- else +- AC_MSG_ERROR([--with-cpu-arch=armv7 is not supported for non-GNU toolchains]) +- fi ++esac ++ ++case "$MOZ_FLOAT_ABI" in ++toolchain|"") ++ float_abi_flag="" + ;; +- *) +- AC_MSG_ERROR([--with-cpu-arch=armv7 is not supported for non-ARM CPU architectures]) ++*) ++ float_abi_flag="-mfloat-abi=$MOZ_FLOAT_ABI" + ;; +- esac +-else +- case "$target_cpu" in +- arm*) +- if test "$GNU_CC"; then +- CFLAGS="$CFLAGS -march=armv5te -mthumb-interwork -msoft-float" +- CXXFLAGS="$CXXFLAGS -march=armv5te -mthumb-interwork -msoft-float" +- ASFLAGS="$ASFLAGS -march=armv5te -mthumb-interwork -msoft-float" +- fi +- ;; +- esac ++esac ++ ++case "$MOZ_SOFT_FLOAT" in ++yes) ++ soft_float_flag="-msoft-float" ++ ;; ++no) ++ soft_float_flag="-mno-soft-float" ++ ;; ++*) # toolchain ++ soft_float_flag="" ++ ;; ++esac ++ ++dnl Use echo to avoid accumulating space characters ++all_flags=`echo $arch_flag $thumb_flag $thumb_interwork_flag $fpu_flag $float_abi_flag $soft_float_flag` ++if test -n "$all_flags"; then ++ _SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$all_flags" ++ AC_MSG_CHECKING(whether the chosen combination of compiler flags ($all_flags) works) ++ AC_TRY_COMPILE([],[return 0;], ++ AC_MSG_RESULT([yes]), ++ AC_MSG_ERROR([no])) ++ ++ CFLAGS="$_SAVE_CFLAGS $all_flags" ++ CXXFLAGS="$CXXFLAGS $all_flags" ++ ASFLAGS="$ASFLAGS $all_flags" ++ if test -n "$thumb_flag"; then ++ LDFLAGS="$LDFLAGS $thumb_flag" ++ fi + fi + + AC_SUBST(MOZ_THUMB2) +-AC_SUBST(MOZ_ARM_ARCH) ++ ++if test "$CPU_ARCH" = "arm"; then ++ AC_MSG_CHECKING(for ARM SIMD support in compiler) ++ # We try to link so that this also fails when ++ # building with LTO. ++ AC_TRY_LINK([], ++ [asm("uqadd8 r1, r1, r2");], ++ result="yes", result="no") ++ AC_MSG_RESULT("$result") ++ if test "$result" = "yes"; then ++ AC_DEFINE(HAVE_ARM_SIMD) ++ HAVE_ARM_SIMD=1 ++ fi ++ ++ AC_MSG_CHECKING(for ARM NEON support in compiler) ++ # We try to link so that this also fails when ++ # building with LTO. ++ AC_TRY_LINK([], ++ [asm(".fpu neon\n vadd.i8 d0, d0, d0");], ++ result="yes", result="no") ++ AC_MSG_RESULT("$result") ++ if test "$result" = "yes"; then ++ AC_DEFINE(HAVE_ARM_NEON) ++ HAVE_ARM_NEON=1 ++ fi ++fi # CPU_ARCH = arm ++ ++AC_SUBST(HAVE_ARM_SIMD) ++AC_SUBST(HAVE_ARM_NEON) + + dnl ======================================================== + dnl = +@@ -6147,12 +6241,6 @@ + if test "$OS_ARCH" = "OS2"; then + ac_configure_args="$ac_configure_args CFLAGS=-Zomf AR=emxomfar" + fi +- if test -n "$MOZ_THUMB2"; then +- ac_configure_args="$ac_configure_args --enable-thumb2" +- fi +- if test -n "$MOZ_ARM_ARCH"; then +- ac_configure_args="$ac_configure_args --with-cpu-arch=$MOZ_ARM_ARCH" +- fi + + # Use a separate cache file for libffi, since it does things differently + # from our configure.