Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master' into staging
Browse files Browse the repository at this point in the history
  • Loading branch information
Ericson2314 committed Jan 22, 2018
2 parents a786218 + 9593ead commit a3bff14
Show file tree
Hide file tree
Showing 23 changed files with 787 additions and 293 deletions.
6 changes: 5 additions & 1 deletion pkgs/development/compilers/ghc/6.10.2-binary.nix
Expand Up @@ -96,7 +96,11 @@ stdenv.mkDerivation rec {
[ $(./main) == "yes" ]
'';

passthru = { targetPrefix = ""; };
passthru = {
targetPrefix = "";
# Our Cabal compiler name
haskellCompilerName = "ghc";
};

meta = {
homepage = http://haskell.org/ghc;
Expand Down
7 changes: 6 additions & 1 deletion pkgs/development/compilers/ghc/6.10.4.nix
Expand Up @@ -25,7 +25,12 @@ stdenv.mkDerivation rec {

NIX_CFLAGS_COMPILE = "-fomit-frame-pointer";

passthru = { targetPrefix = ""; };
passthru = {
targetPrefix = "";

# Our Cabal compiler name
haskellCompilerName = "ghc";
};

meta = {
homepage = http://haskell.org/ghc;
Expand Down
9 changes: 7 additions & 2 deletions pkgs/development/compilers/ghc/6.12.3.nix
Expand Up @@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
'';

preConfigure = ''
echo "${buildMK}" > mk/build.mk
echo -n "${buildMK}" > mk/build.mk
'';

configureFlags = [
Expand All @@ -36,7 +36,12 @@ stdenv.mkDerivation rec {
# that in turn causes GHCi to abort
stripDebugFlags=["-S" "--keep-file-symbols"];

passthru = { targetPrefix = ""; };
passthru = {
targetPrefix = "";

# Our Cabal compiler name
haskellCompilerName = "ghc";
};

meta = {
homepage = http://haskell.org/ghc;
Expand Down
7 changes: 6 additions & 1 deletion pkgs/development/compilers/ghc/7.0.4-binary.nix
Expand Up @@ -134,7 +134,12 @@ stdenv.mkDerivation rec {
[ $(./main) == "yes" ]
'';

passthru = { targetPrefix = ""; };
passthru = {
targetPrefix = "";

# Our Cabal compiler name
haskellCompilerName = "ghc";
};

meta.license = stdenv.lib.licenses.bsd3;
meta.platforms = ["x86_64-linux" "i686-linux" "x86_64-darwin"];
Expand Down
9 changes: 7 additions & 2 deletions pkgs/development/compilers/ghc/7.0.4.nix
Expand Up @@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
'';

preConfigure = ''
echo "${buildMK}" > mk/build.mk
echo -n "${buildMK}" > mk/build.mk
sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure
'' + stdenv.lib.optionalString stdenv.isDarwin ''
find . -name '*.hs' | xargs sed -i -e 's|ASSERT (|ASSERT(|' -e 's|ASSERT2 (|ASSERT2(|' -e 's|WARN (|WARN(|'
Expand All @@ -45,7 +45,12 @@ stdenv.mkDerivation rec {
# that in turn causes GHCi to abort
stripDebugFlags=["-S" "--keep-file-symbols"];

passthru = { targetPrefix = ""; };
passthru = {
targetPrefix = "";

# Our Cabal compiler name
haskellCompilerName = "ghc";
};

meta = {
homepage = http://haskell.org/ghc;
Expand Down
115 changes: 100 additions & 15 deletions pkgs/development/compilers/ghc/7.10.3.nix
Expand Up @@ -2,15 +2,28 @@
, buildPlatform, hostPlatform, targetPlatform

# build-tools
, bootPkgs, hscolour, llvm_35
, bootPkgs, hscolour
, coreutils, fetchurl, fetchpatch, perl
, docbook_xsl, docbook_xml_dtd_45, docbook_xml_dtd_42, libxml2, libxslt

, libiconv ? null, ncurses
, libffi, libiconv ? null, ncurses

, useLLVM ? !targetPlatform.isx86
, # LLVM is conceptually a run-time-only depedendency, but for
# non-x86, we need LLVM to bootstrap later stages, so it becomes a
# build-time dependency too.
buildLlvmPackages, llvmPackages

, # If enabled, GHC will be built with the GPL-free but slower integer-simple
# library instead of the faster but GPLed integer-gmp library.
enableIntegerSimple ? false, gmp ? null

, # If enabled, use -fPIC when compiling static libs.
enableRelocatedStaticLibs ? targetPlatform != hostPlatform

, # Whether to build dynamic libs for the standard library (on the target
# platform). Static libs are always built.
enableShared ? true
}:

assert !enableIntegerSimple -> gmp != null;
Expand All @@ -28,6 +41,32 @@ let
sha256 = "1j45z4kcd3w1rzm4hapap2xc16bbh942qnzzdbdjcwqznsccznf0";
};

buildMK = ''
DYNAMIC_GHC_PROGRAMS = ${if enableShared then "YES" else "NO"}
'' + stdenv.lib.optionalString enableIntegerSimple ''
INTEGER_LIBRARY = integer-simple
'' + stdenv.lib.optionalString (targetPlatform != hostPlatform) ''
BuildFlavour = perf-cross
Stage1Only = YES
HADDOCK_DOCS = NO
'' + stdenv.lib.optionalString enableRelocatedStaticLibs ''
GhcLibHcOpts += -fPIC
GhcRtsHcOpts += -fPIC
'';

# Splicer will pull out correct variations
libDeps = platform: [ ncurses ]
++ stdenv.lib.optional (!enableIntegerSimple) gmp
++ stdenv.lib.optional (platform.libc != "glibc") libiconv;

toolsForTarget =
if hostPlatform == buildPlatform then
[ targetPackages.stdenv.cc ] ++ stdenv.lib.optional useLLVM llvmPackages.llvm
else assert targetPlatform == hostPlatform; # build != host == target
[ stdenv.cc ] ++ stdenv.lib.optional useLLVM buildLlvmPackages.llvm;

targetCC = builtins.head toolsForTarget;

in

stdenv.mkDerivation rec {
Expand All @@ -39,37 +78,77 @@ stdenv.mkDerivation rec {
sha256 = "1vsgmic8csczl62ciz51iv8nhrkm72lyhbz7p7id13y2w7fcx46g";
};

enableParallelBuilding = true;

outputs = [ "out" "doc" ];

patches = [
docFixes
./relocation.patch
];

buildInputs = [ ghc perl libxml2 libxslt docbook_xsl docbook_xml_dtd_45 docbook_xml_dtd_42 hscolour ] ++ stdenv.lib.optionals targetPlatform.isArm [ llvm_35 ];

enableParallelBuilding = true;

outputs = [ "out" "doc" ];

# GHC is a bit confused on its cross terminology.
preConfigure = ''
for env in $(env | grep '^TARGET_' | sed -E 's|\+?=.*||'); do
export "''${env#TARGET_}=''${!env}"
done
# GHC is a bit confused on its cross terminology, as these would normally be
# the *host* tools.
export CC="${targetCC}/bin/${targetCC.targetPrefix}cc"
export CXX="${targetCC}/bin/${targetCC.targetPrefix}cxx"
export LD="${targetCC.bintools}/bin/${targetCC.bintools.targetPrefix}ld"
export AS="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}as"
export AR="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ar"
export NM="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}nm"
export RANLIB="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}ranlib"
export READELF="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}readelf"
export STRIP="${targetCC.bintools.bintools}/bin/${targetCC.bintools.targetPrefix}strip"
echo -n "${buildMK}" > mk/build.mk
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}"
export 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
'';

# TODO(@Ericson2314): Always pass "--target" and always prefix.
configurePlatforms = [ "build" "host" ]
++ stdenv.lib.optional (targetPlatform != hostPlatform) "target";
# `--with` flags for libraries needed for RTS linker
configureFlags = [
"--with-gcc=${stdenv.cc}/bin/cc"
"--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib"
"--datadir=$doc/share/doc/ghc"
] ++ stdenv.lib.optional (! enableIntegerSimple) [
"--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib"
] ++ stdenv.lib.optional (targetPlatform == hostPlatform && ! enableIntegerSimple) [
"--with-gmp-includes=${gmp.dev}/include" "--with-gmp-libraries=${gmp.out}/lib"
] ++ stdenv.lib.optional stdenv.isDarwin [
] ++ stdenv.lib.optional (targetPlatform == hostPlatform && hostPlatform.libc != "glibc") [
"--with-iconv-includes=${libiconv}/include" "--with-iconv-libraries=${libiconv}/lib"
] ++ stdenv.lib.optionals (targetPlatform != hostPlatform) [
"--enable-bootstrap-with-devel-snapshot"
] ++ stdenv.lib.optionals (targetPlatform.isDarwin && targetPlatform.isAarch64) [
# fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/
"--disable-large-address-space"
];

# Hack to make sure we never to the relaxation `$PATH` and hooks support for
# compatability. This will be replaced with something clearer in a future
# masss-rebuild.
crossConfig = true;

nativeBuildInputs = [
ghc perl libxml2 libxslt docbook_xsl docbook_xml_dtd_45 docbook_xml_dtd_42 hscolour
];

# For building runtime libs
depsBuildTarget = toolsForTarget;

buildInputs = libDeps hostPlatform;

propagatedBuildInputs = [ targetPackages.stdenv.cc ]
++ stdenv.lib.optional useLLVM llvmPackages.llvm;

depsTargetTarget = map stdenv.lib.getDev (libDeps targetPlatform);
depsTargetTargetPropagated = map (stdenv.lib.getOutput "out") (libDeps targetPlatform);

# required, because otherwise all symbols from HSffi.o are stripped, and
# that in turn causes GHCi to abort
stripDebugFlags = [ "-S" ] ++ stdenv.lib.optional (!targetPlatform.isDarwin) "--keep-file-symbols";
Expand All @@ -88,6 +167,11 @@ stdenv.mkDerivation rec {

passthru = {
inherit bootPkgs targetPrefix;

inherit llvmPackages;

# Our Cabal compiler name
haskellCompilerName = "ghc";
};

meta = {
Expand All @@ -96,4 +180,5 @@ stdenv.mkDerivation rec {
maintainers = with stdenv.lib.maintainers; [ marcweber andres peti ];
inherit (ghc.meta) license platforms;
};

}
11 changes: 8 additions & 3 deletions pkgs/development/compilers/ghc/7.2.2.nix
Expand Up @@ -31,14 +31,14 @@ stdenv.mkDerivation rec {
libraries/base_CONFIGURE_OPTS += --configure-option=--with-iconv-libraries="${libiconv}/lib"
''}
'' + (if enableIntegerSimple then ''
INTEGER_LIBRARY=integer-simple
INTEGER_LIBRARY = integer-simple
'' else ''
libraries/integer-gmp_CONFIGURE_OPTS += --configure-option=--with-gmp-libraries="${gmp.out}/lib"
libraries/integer-gmp_CONFIGURE_OPTS += --configure-option=--with-gmp-includes="${gmp.dev}/include"
'');

preConfigure = ''
echo "${buildMK}" > mk/build.mk
echo -n "${buildMK}" > mk/build.mk
sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure
'' + stdenv.lib.optionalString stdenv.isDarwin ''
find . -name '*.hs' | xargs sed -i -e 's|ASSERT (|ASSERT(|' -e 's|ASSERT2 (|ASSERT2(|' -e 's|WARN (|WARN(|'
Expand All @@ -55,7 +55,12 @@ stdenv.mkDerivation rec {
# that in turn causes GHCi to abort
stripDebugFlags=["-S" "--keep-file-symbols"];

passthru = { targetPrefix = ""; };
passthru = {
targetPprefix = "";

# Our Cabal compiler name
haskellCompilerName = "ghc";
};

meta = {
homepage = http://haskell.org/ghc;
Expand Down
7 changes: 6 additions & 1 deletion pkgs/development/compilers/ghc/7.4.2-binary.nix
Expand Up @@ -136,7 +136,12 @@ stdenv.mkDerivation rec {
[ $(./main) == "yes" ]
'';

passthru = { targetPrefix = ""; };
passthru = {
targetPrefix = "";

# Our Cabal compiler name
haskellCompilerName = "ghc";
};

meta.license = stdenv.lib.licenses.bsd3;
meta.platforms = ["x86_64-linux" "i686-linux" "x86_64-darwin"];
Expand Down
13 changes: 9 additions & 4 deletions pkgs/development/compilers/ghc/7.4.2.nix
Expand Up @@ -32,17 +32,17 @@ stdenv.mkDerivation rec {
libraries/base_CONFIGURE_OPTS += --configure-option=--with-iconv-libraries="${libiconv}/lib"
''}
'' + (if enableIntegerSimple then ''
INTEGER_LIBRARY=integer-simple
INTEGER_LIBRARY = integer-simple
'' else ''
libraries/integer-gmp_CONFIGURE_OPTS += --configure-option=--with-gmp-libraries="${gmp.out}/lib"
libraries/integer-gmp_CONFIGURE_OPTS += --configure-option=--with-gmp-includes="${gmp.dev}/include"
'');

preConfigure = ''
echo "${buildMK}" > mk/build.mk
echo -n "${buildMK}" > mk/build.mk
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}"
export NIX_LDFLAGS+=" -rpath $out/lib/ghc-${version}"
'' + stdenv.lib.optionalString stdenv.isDarwin ''
find . -name '*.hs' | xargs sed -i -e 's|ASSERT (|ASSERT(|' -e 's|ASSERT2 (|ASSERT2(|' -e 's|WARN (|WARN(|'
find . -name '*.lhs' | xargs sed -i -e 's|ASSERT (|ASSERT(|' -e 's|ASSERT2 (|ASSERT2(|' -e 's|WARN (|WARN(|'
Expand All @@ -56,7 +56,12 @@ stdenv.mkDerivation rec {
# that in turn causes GHCi to abort
stripDebugFlags = [ "-S" ] ++ stdenv.lib.optional (!stdenv.isDarwin) "--keep-file-symbols";

passthru = { targetPrefix = ""; };
passthru = {
targetPrefix = "";

# Our Cabal compiler name
haskellCompilerName = "ghc";
};

meta = {
homepage = http://haskell.org/ghc;
Expand Down
13 changes: 9 additions & 4 deletions pkgs/development/compilers/ghc/7.6.3.nix
Expand Up @@ -43,22 +43,22 @@ in stdenv.mkDerivation rec {
SRC_HC_OPTS += ${ghcFlags}
SRC_CC_OPTS += ${cFlags}
'' + (if enableIntegerSimple then ''
INTEGER_LIBRARY=integer-simple
INTEGER_LIBRARY = integer-simple
'' else ''
libraries/integer-gmp_CONFIGURE_OPTS += --configure-option=--with-gmp-libraries="${gmp.out}/lib"
libraries/integer-gmp_CONFIGURE_OPTS += --configure-option=--with-gmp-includes="${gmp.dev}/include"
'');

preConfigure = ''
echo "${buildMK}" > mk/build.mk
echo -n "${buildMK}" > mk/build.mk
sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure
'' + stdenv.lib.optionalString stdenv.isLinux ''
# Set ghcFlags for binaries that ghc builds
sed -i -e 's|"\$topdir"|"\$topdir" ${ghcFlags}|' ghc/ghc.wrapper
'' + stdenv.lib.optionalString (!stdenv.isDarwin) ''
export NIX_LDFLAGS="$NIX_LDFLAGS -rpath $out/lib/ghc-${version}"
export NIX_LDFLAGS+=" -rpath $out/lib/ghc-${version}"
'' + stdenv.lib.optionalString stdenv.isDarwin ''
find . -name '*.hs' | xargs sed -i -e 's|ASSERT (|ASSERT(|' -e 's|ASSERT2 (|ASSERT2(|' -e 's|WARN (|WARN(|'
find . -name '*.lhs' | xargs sed -i -e 's|ASSERT (|ASSERT(|' -e 's|ASSERT2 (|ASSERT2(|' -e 's|WARN (|WARN(|'
Expand All @@ -82,7 +82,12 @@ in stdenv.mkDerivation rec {
# that in turn causes GHCi to abort
stripDebugFlags = [ "-S" ] ++ stdenv.lib.optional (!stdenv.isDarwin) "--keep-file-symbols";

passthru = { targetPrefix = ""; };
passthru = {
targetPrefix = "";

# Our Cabal compiler name
haskellCompilerName = "ghc";
};

meta = {
homepage = http://haskell.org/ghc;
Expand Down

0 comments on commit a3bff14

Please sign in to comment.