summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorJookia <166291@gmail.com>2016-07-03 21:32:51 +1000
committerTuomas Tynkkynen <tuomas.tynkkynen@iki.fi>2016-07-20 02:38:10 +0300
commit6c4ba06597be6efec7e2036c76d4dd8d2e53443c (patch)
tree23d1440af829af9861dc96a75fed5bf8b891d908 /pkgs
parentad16c9ac31f4eb2b5a6b5a4615df8e9ea4c3a405 (diff)
downloadnixpkgs-6c4ba06597be6efec7e2036c76d4dd8d2e53443c.tar
nixpkgs-6c4ba06597be6efec7e2036c76d4dd8d2e53443c.tar.gz
nixpkgs-6c4ba06597be6efec7e2036c76d4dd8d2e53443c.tar.bz2
nixpkgs-6c4ba06597be6efec7e2036c76d4dd8d2e53443c.tar.lz
nixpkgs-6c4ba06597be6efec7e2036c76d4dd8d2e53443c.tar.xz
nixpkgs-6c4ba06597be6efec7e2036c76d4dd8d2e53443c.tar.zst
nixpkgs-6c4ba06597be6efec7e2036c76d4dd8d2e53443c.zip
spidermonkey: Fix building 185-1.0.0 on ARMv7.
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/development/interpreters/spidermonkey/185-1.0.0.nix15
-rw-r--r--pkgs/development/interpreters/spidermonkey/arm-flags.patch342
2 files changed, 353 insertions, 4 deletions
diff --git a/pkgs/development/interpreters/spidermonkey/185-1.0.0.nix b/pkgs/development/interpreters/spidermonkey/185-1.0.0.nix
index 779f0ef26d4..b3fa96d756a 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 00000000000..721aff154e3
--- /dev/null
+++ b/pkgs/development/interpreters/spidermonkey/arm-flags.patch
@@ -0,0 +1,342 @@
+From: Mike Hommey <mh@glandium.org>
+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.