diff options
Diffstat (limited to 'pkgs/development/compilers/ghc/head.nix')
-rw-r--r-- | pkgs/development/compilers/ghc/head.nix | 81 |
1 files changed, 60 insertions, 21 deletions
diff --git a/pkgs/development/compilers/ghc/head.nix b/pkgs/development/compilers/ghc/head.nix index d57b6e575da5..f46a017c66aa 100644 --- a/pkgs/development/compilers/ghc/head.nix +++ b/pkgs/development/compilers/ghc/head.nix @@ -1,48 +1,51 @@ { stdenv, fetchgit, bootPkgs, perl, gmp, ncurses, libiconv, binutils, coreutils -, autoconf, automake, happy, alex +, autoconf, automake, happy, alex, crossSystem, selfPkgs, cross ? null }: let inherit (bootPkgs) ghc; -in stdenv.mkDerivation rec { - version = "8.1.20161109"; + commonBuildInputs = [ ghc perl autoconf automake happy alex ]; + + version = "8.1.20161115"; + + commonPreConfigure = '' + sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure + '' + stdenv.lib.optionalString (!stdenv.isDarwin) '' + export NIX_LDFLAGS="$NIX_LDFLAGS -rpath $out/lib/ghc-${version}" + '' + stdenv.lib.optionalString stdenv.isDarwin '' + export NIX_LDFLAGS+=" -no_dtrace_dof" + ''; +in stdenv.mkDerivation (rec { + inherit version; name = "ghc-${version}"; - rev = "2e8463b232054b788b73e6551947a9434aa76009"; + rev = "017d11e0a36866b05ace32ece1af11adf652a619"; src = fetchgit { url = "git://git.haskell.org/ghc.git"; inherit rev; - sha256 = "12nxai5qqnw42syhd0vzl2f9f8z28rc0fsa7g771dyzpqglak90l"; + sha256 = "1ryggmz961qd0fl50rkjjvi6g9azwla2vx9310a9nzjaj5x6ib4y"; }; - patches = [ - ./ghc-HEAD-dont-pass-linker-flags-via-response-files.patch # https://github.com/NixOS/nixpkgs/issues/10752 - ]; + # This shouldn't be necessary since 1ad1edbb32ce01ba8b47d8e8dad357b0edd6a4dc, but + # see http://hydra.cryp.to/build/2061608/nixlog/1/raw + patches = [ ./ghc-HEAD-dont-pass-linker-flags-via-response-files.patch ]; - postUnpack = '' - pushd ghc-${builtins.substring 0 7 rev} + postPatch = '' echo ${version} >VERSION echo ${rev} >GIT_COMMIT_ID patchShebangs . ./boot - popd ''; - buildInputs = [ ghc perl autoconf automake happy alex ]; + buildInputs = commonBuildInputs; enableParallelBuilding = true; - preConfigure = '' - sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure - '' + stdenv.lib.optionalString (!stdenv.isDarwin) '' - export NIX_LDFLAGS="$NIX_LDFLAGS -rpath $out/lib/ghc-${version}" - '' + stdenv.lib.optionalString stdenv.isDarwin '' - export NIX_LDFLAGS+=" -no_dtrace_dof" - ''; + preConfigure = commonPreConfigure; configureFlags = [ - "--with-cc=${stdenv.cc}/bin/cc" + "CC=${stdenv.cc}/bin/cc" "--with-gmp-includes=${gmp.dev}/include" "--with-gmp-libraries=${gmp.out}/lib" "--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib" ] ++ stdenv.lib.optional stdenv.isDarwin [ @@ -67,6 +70,11 @@ in stdenv.mkDerivation rec { passthru = { inherit bootPkgs; + } // stdenv.lib.optionalAttrs (crossSystem != null) { + crossCompiler = selfPkgs.ghc.override { + cross = crossSystem; + bootPkgs = selfPkgs; + }; }; meta = { @@ -76,4 +84,35 @@ in stdenv.mkDerivation rec { inherit (ghc.meta) license platforms; }; -} +} // stdenv.lib.optionalAttrs (cross != null) { + name = "${cross.config}-ghc-${version}"; + + # Some fixes for cross-compilation to iOS. See https://phabricator.haskell.org/D2710 (D2711,D2712,D2713) + patches = [ ./D2710.patch ./D2711.patch ./D2712.patch ./D2713.patch ]; + + preConfigure = commonPreConfigure + '' + sed 's|#BuildFlavour = quick-cross|BuildFlavour = perf-cross|' mk/build.mk.sample > mk/build.mk + ''; + + configureFlags = [ + "CC=${stdenv.ccCross}/bin/${cross.config}-cc" + "LD=${stdenv.binutilsCross}/bin/${cross.config}-ld" + "AR=${stdenv.binutilsCross}/bin/${cross.config}-ar" + "NM=${stdenv.binutilsCross}/bin/${cross.config}-nm" + "RANLIB=${stdenv.binutilsCross}/bin/${cross.config}-ranlib" + "--target=${cross.config}" + "--enable-bootstrap-with-devel-snapshot" + ]; + + buildInputs = commonBuildInputs ++ [ stdenv.ccCross stdenv.binutilsCross ]; + + dontSetConfigureCross = true; + + passthru = { + inherit bootPkgs cross; + + cc = "${stdenv.ccCross}/bin/${cross.config}-cc"; + + ld = "${stdenv.binutilsCross}/bin/${cross.config}-ld"; + }; +}) |