295315cc87
See previous commit for what was done to `binutils` to make this possible. There were some uses of `forcedNativePackages` added. The combination of overrides with that attribute is highly spooky: it's often important that if an overridden package comes from it, the replaced arguments for that package come from it. Long term this package set and all the spookiness should be gone and irrelevant: "Move along, nothing to see here!" No hashes should be changed with this commit
123 lines
4 KiB
Nix
123 lines
4 KiB
Nix
{ stdenv, lib, fetchgit, bootPkgs, perl, ncurses, libiconv, binutils, coreutils
|
|
, autoconf, automake, happy, alex, python3, buildPlatform, targetPlatform
|
|
, selfPkgs, cross ? null
|
|
|
|
# If enabled GHC will be build with the GPL-free but slower integer-simple
|
|
# library instead of the faster but GPLed integer-gmp library.
|
|
, enableIntegerSimple ? false, gmp
|
|
}:
|
|
|
|
let
|
|
inherit (bootPkgs) ghc;
|
|
|
|
commonBuildInputs = [ ghc perl autoconf automake happy alex python3 ];
|
|
|
|
version = "8.1.20170106";
|
|
rev = "b4f2afe70ddbd0576b4eba3f82ba1ddc52e9b3bd";
|
|
|
|
commonPreConfigure = ''
|
|
echo ${version} >VERSION
|
|
echo ${rev} >GIT_COMMIT_ID
|
|
./boot
|
|
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"
|
|
'' + stdenv.lib.optionalString enableIntegerSimple ''
|
|
echo "INTEGER_LIBRARY=integer-simple" > mk/build.mk
|
|
'';
|
|
in stdenv.mkDerivation (rec {
|
|
inherit version rev;
|
|
name = "ghc-${version}";
|
|
|
|
src = fetchgit {
|
|
url = "git://git.haskell.org/ghc.git";
|
|
inherit rev;
|
|
sha256 = "1h064nikx5srsd7qvz19f6dxvnpfjp0b3b94xs1f4nar18hzf4j0";
|
|
};
|
|
|
|
postPatch = "patchShebangs .";
|
|
|
|
preConfigure = commonPreConfigure;
|
|
|
|
buildInputs = commonBuildInputs;
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
configureFlags = [
|
|
"CC=${stdenv.cc}/bin/cc"
|
|
"--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib"
|
|
] ++ stdenv.lib.optional (! enableIntegerSimple) [
|
|
"--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"
|
|
];
|
|
|
|
# required, because otherwise all symbols from HSffi.o are stripped, and
|
|
# that in turn causes GHCi to abort
|
|
stripDebugFlags = [ "-S" ] ++ stdenv.lib.optional (!stdenv.isDarwin) "--keep-file-symbols";
|
|
|
|
checkTarget = "test";
|
|
|
|
postInstall = ''
|
|
paxmark m $out/lib/${name}/bin/{ghc,haddock}
|
|
|
|
# Install the bash completion file.
|
|
install -D -m 444 utils/completion/ghc.bash $out/share/bash-completion/completions/ghc
|
|
|
|
# Patch scripts to include "readelf" and "cat" in $PATH.
|
|
for i in "$out/bin/"*; do
|
|
test ! -h $i || continue
|
|
egrep --quiet '^#!' <(head -n 1 $i) || continue
|
|
sed -i -e '2i export PATH="$PATH:${stdenv.lib.makeBinPath [ binutils coreutils ]}"' $i
|
|
done
|
|
'';
|
|
|
|
passthru = {
|
|
inherit bootPkgs;
|
|
} // stdenv.lib.optionalAttrs (targetPlatform != buildPlatform) {
|
|
crossCompiler = selfPkgs.ghc.override {
|
|
cross = targetPlatform;
|
|
bootPkgs = selfPkgs;
|
|
};
|
|
};
|
|
|
|
meta = {
|
|
homepage = "http://haskell.org/ghc";
|
|
description = "The Glasgow Haskell Compiler";
|
|
maintainers = with stdenv.lib.maintainers; [ marcweber andres peti ];
|
|
inherit (ghc.meta) license platforms;
|
|
};
|
|
|
|
} // stdenv.lib.optionalAttrs (cross != null) {
|
|
name = "${cross.config}-ghc-${version}";
|
|
|
|
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.binutils}/bin/${cross.config}-ld"
|
|
"AR=${stdenv.binutils}/bin/${cross.config}-ar"
|
|
"NM=${stdenv.binutils}/bin/${cross.config}-nm"
|
|
"RANLIB=${stdenv.binutils}/bin/${cross.config}-ranlib"
|
|
"--target=${cross.config}"
|
|
"--enable-bootstrap-with-devel-snapshot"
|
|
] ++
|
|
# fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/
|
|
lib.optional (cross.config or null == "aarch64-apple-darwin14") "--disable-large-address-space";
|
|
|
|
buildInputs = commonBuildInputs ++ [ stdenv.ccCross stdenv.binutils ];
|
|
|
|
dontSetConfigureCross = true;
|
|
|
|
passthru = {
|
|
inherit bootPkgs cross;
|
|
|
|
cc = "${stdenv.ccCross}/bin/${cross.config}-cc";
|
|
|
|
ld = "${stdenv.binutils}/bin/${cross.config}-ld";
|
|
};
|
|
})
|