From 461139e3fa65583c97abba8e5f41de6550b07488 Mon Sep 17 00:00:00 2001 From: Drew Hess Date: Wed, 3 Jan 2018 15:57:23 -0800 Subject: [PATCH 1/4] ghc: ARM builds have an LLVM runtime dependency. --- pkgs/development/compilers/ghc/7.10.3-binary.nix | 3 ++- pkgs/development/compilers/ghc/7.10.3.nix | 4 ++-- pkgs/development/compilers/ghc/8.0.2.nix | 4 ++-- pkgs/development/compilers/ghc/8.2.1-binary.nix | 3 ++- pkgs/development/compilers/ghc/8.2.2.nix | 4 ++-- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/pkgs/development/compilers/ghc/7.10.3-binary.nix b/pkgs/development/compilers/ghc/7.10.3-binary.nix index 6fed39317c7..b68c84711b0 100644 --- a/pkgs/development/compilers/ghc/7.10.3-binary.nix +++ b/pkgs/development/compilers/ghc/7.10.3-binary.nix @@ -1,7 +1,7 @@ { stdenv , fetchurl, perl , ncurses5, gmp, libiconv -, gcc +, gcc, llvm_35 }: # Prebuilt only does native @@ -43,6 +43,7 @@ stdenv.mkDerivation rec { or (throw "cannot bootstrap GHC on this platform")); nativeBuildInputs = [ perl ]; + buildInputs = stdenv.lib.optionals stdenv.isArm [ llvm_35 ]; # Cannot patchelf beforehand due to relative RPATHs that anticipate # the final install location/ diff --git a/pkgs/development/compilers/ghc/7.10.3.nix b/pkgs/development/compilers/ghc/7.10.3.nix index 1d9e2814a1f..dd5acfa16f1 100644 --- a/pkgs/development/compilers/ghc/7.10.3.nix +++ b/pkgs/development/compilers/ghc/7.10.3.nix @@ -2,7 +2,7 @@ , buildPlatform, hostPlatform, targetPlatform # build-tools -, bootPkgs, hscolour +, bootPkgs, hscolour, llvm_35 , coreutils, fetchurl, fetchpatch, perl , docbook_xsl, docbook_xml_dtd_45, docbook_xml_dtd_42, libxml2, libxslt @@ -44,7 +44,7 @@ stdenv.mkDerivation rec { ./relocation.patch ]; - buildInputs = [ ghc perl libxml2 libxslt docbook_xsl docbook_xml_dtd_45 docbook_xml_dtd_42 hscolour ]; + buildInputs = [ ghc perl libxml2 libxslt docbook_xsl docbook_xml_dtd_45 docbook_xml_dtd_42 hscolour ] ++ stdenv.lib.optionals stdenv.isArm [ llvm_35 ]; enableParallelBuilding = true; diff --git a/pkgs/development/compilers/ghc/8.0.2.nix b/pkgs/development/compilers/ghc/8.0.2.nix index 762fe547ca9..bb706aa6bbc 100644 --- a/pkgs/development/compilers/ghc/8.0.2.nix +++ b/pkgs/development/compilers/ghc/8.0.2.nix @@ -2,7 +2,7 @@ , buildPlatform, hostPlatform, targetPlatform # build-tools -, bootPkgs, hscolour +, bootPkgs, hscolour, llvm_37 , coreutils, fetchurl, fetchpatch, patchutils, perl, sphinx , libiconv ? null, ncurses @@ -35,7 +35,7 @@ stdenv.mkDerivation rec { ++ stdenv.lib.optional stdenv.isLinux ./ghc-no-madv-free.patch ++ stdenv.lib.optional stdenv.isDarwin ./ghc-8.0.2-no-cpp-warnings.patch; - buildInputs = [ ghc perl hscolour sphinx ]; + buildInputs = [ ghc perl hscolour sphinx ] ++ stdenv.lib.optionals (stdenv.isArm || stdenv.isAarch64) [ llvm_37 ]; enableParallelBuilding = true; diff --git a/pkgs/development/compilers/ghc/8.2.1-binary.nix b/pkgs/development/compilers/ghc/8.2.1-binary.nix index b3b5e2eceec..ec2694a0028 100644 --- a/pkgs/development/compilers/ghc/8.2.1-binary.nix +++ b/pkgs/development/compilers/ghc/8.2.1-binary.nix @@ -1,5 +1,5 @@ { stdenv -, fetchurl, perl, gcc +, fetchurl, perl, gcc, llvm_39 , ncurses5, gmp, libiconv }: @@ -46,6 +46,7 @@ stdenv.mkDerivation rec { or (throw "cannot bootstrap GHC on this platform")); nativeBuildInputs = [ perl ]; + buildInputs = stdenv.lib.optionals (stdenv.isArm || stdenv.isAarch64) [ llvm_39 ]; # Cannot patchelf beforehand due to relative RPATHs that anticipate # the final install location/ diff --git a/pkgs/development/compilers/ghc/8.2.2.nix b/pkgs/development/compilers/ghc/8.2.2.nix index bffc7c3fc6c..fd06afcf948 100644 --- a/pkgs/development/compilers/ghc/8.2.2.nix +++ b/pkgs/development/compilers/ghc/8.2.2.nix @@ -3,7 +3,7 @@ , selfPkgs, cross ? null # build-tools -, bootPkgs, alex, happy, hscolour +, bootPkgs, alex, happy, hscolour, llvm_39 , autoconf, automake, coreutils, fetchurl, perl, python3, sphinx , libiconv ? null, ncurses @@ -46,7 +46,7 @@ stdenv.mkDerivation (rec { sed 's|#BuildFlavour = quick-cross|BuildFlavour = perf-cross|' mk/build.mk.sample > mk/build.mk ''; - buildInputs = [ alex autoconf automake ghc happy hscolour perl python3 sphinx ]; + buildInputs = [ alex autoconf automake ghc happy hscolour perl python3 sphinx ] ++ stdenv.lib.optionals (stdenv.isArm || stdenv.isAarch64) [ llvm_39 ]; enableParallelBuilding = true; From 8ad5937f90a51e0038bdb5408691255b80f30adb Mon Sep 17 00:00:00 2001 From: Drew Hess Date: Wed, 3 Jan 2018 15:59:07 -0800 Subject: [PATCH 2/4] ghc: 8.2.2 on armv7l doesn't build without explicit use of ld.gold. --- pkgs/development/compilers/ghc/8.2.2.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/development/compilers/ghc/8.2.2.nix b/pkgs/development/compilers/ghc/8.2.2.nix index fd06afcf948..5ef71804b57 100644 --- a/pkgs/development/compilers/ghc/8.2.2.nix +++ b/pkgs/development/compilers/ghc/8.2.2.nix @@ -58,6 +58,8 @@ stdenv.mkDerivation (rec { "--with-gmp-includes=${gmp.dev}/include" "--with-gmp-libraries=${gmp.out}/lib" ] ++ stdenv.lib.optional stdenv.isDarwin [ "--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib" + ] ++ stdenv.lib.optional stdenv.isArm [ + "LD=${stdenv.cc}/bin/ld.gold" ]; # required, because otherwise all symbols from HSffi.o are stripped, and From 260749cf5d3218188fbce57ed1ca4ef5ea862282 Mon Sep 17 00:00:00 2001 From: Drew Hess Date: Wed, 3 Jan 2018 16:00:26 -0800 Subject: [PATCH 3/4] haskell-modules: split-objs is not supported on ARM. --- pkgs/development/haskell-modules/generic-builder.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/haskell-modules/generic-builder.nix b/pkgs/development/haskell-modules/generic-builder.nix index 29bcdfce2c9..bf195696f94 100644 --- a/pkgs/development/haskell-modules/generic-builder.nix +++ b/pkgs/development/haskell-modules/generic-builder.nix @@ -130,7 +130,7 @@ let (optionalString (enableSharedExecutables && stdenv.isDarwin) "--ghc-option=-optl=-Wl,-headerpad_max_install_names") (optionalString enableParallelBuilding "--ghc-option=-j$NIX_BUILD_CORES") (optionalString useCpphs "--with-cpphs=${cpphs}/bin/cpphs --ghc-options=-cpp --ghc-options=-pgmP${cpphs}/bin/cpphs --ghc-options=-optP--cpp") - (enableFeature (enableDeadCodeElimination && (versionAtLeast "8.0.1" ghc.version)) "split-objs") + (enableFeature (enableDeadCodeElimination && !stdenv.isArm && !stdenv.isAarch64 && (versionAtLeast "8.0.1" ghc.version)) "split-objs") (enableFeature enableLibraryProfiling "library-profiling") (enableFeature enableExecutableProfiling (if versionOlder ghc.version "8" then "executable-profiling" else "profiling")) (enableFeature enableSharedLibraries "shared") From 05824e66a1425c07c0249846756b1109b9953927 Mon Sep 17 00:00:00 2001 From: Drew Hess Date: Wed, 3 Jan 2018 16:03:26 -0800 Subject: [PATCH 4/4] haskell-modules: disable happy tests on armv7l-linux. --- pkgs/development/haskell-modules/configuration-common.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/development/haskell-modules/configuration-common.nix b/pkgs/development/haskell-modules/configuration-common.nix index 52eecb709a8..8a99a6f985c 100644 --- a/pkgs/development/haskell-modules/configuration-common.nix +++ b/pkgs/development/haskell-modules/configuration-common.nix @@ -1023,4 +1023,6 @@ self: super: { # https://github.com/Twinside/Juicy.Pixels/issues/149 JuicyPixels = dontHaddock super.JuicyPixels; + # armv7l fixes. + happy = if pkgs.stdenv.isArm then dontCheck super.happy else super.happy; # Similar to https://ghc.haskell.org/trac/ghc/ticket/13062 }