Skip to content
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion pkgs/development/compilers/ghc/6.10.2-binary.nix
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Loading