695a026f5f
This change brings development feedback loop improvement from a couple of ghc rebuilds to only one for working on generic builder. To completely eliminate the rebuilds, use two nixpkgs clones and point boot packages to the unmodified one.
186 lines
7.1 KiB
Nix
186 lines
7.1 KiB
Nix
{ pkgs, lib, newScope, stdenv, buildPlatform, targetPlatform }:
|
|
|
|
let
|
|
# These are attributes in compiler and packages that don't support integer-simple.
|
|
integerSimpleExcludes = [
|
|
"ghc6102Binary"
|
|
"ghc704Binary"
|
|
"ghc742Binary"
|
|
"ghc784Binary"
|
|
"ghc7103Binary"
|
|
"ghc821Binary"
|
|
"ghc6104"
|
|
"ghc6123"
|
|
"ghc704"
|
|
"ghc763"
|
|
"ghcjs"
|
|
"ghcjsHEAD"
|
|
"ghcCross"
|
|
"uhc"
|
|
"integer-simple"
|
|
];
|
|
|
|
haskellLib = import ../development/haskell-modules/lib.nix {
|
|
inherit (pkgs) lib;
|
|
inherit pkgs;
|
|
};
|
|
|
|
callPackage = newScope { inherit haskellLib; };
|
|
|
|
in rec {
|
|
lib = haskellLib;
|
|
|
|
compiler = {
|
|
|
|
ghc6102Binary = callPackage ../development/compilers/ghc/6.10.2-binary.nix {
|
|
gmp = pkgs.gmp4;
|
|
};
|
|
ghc704Binary = callPackage ../development/compilers/ghc/7.0.4-binary.nix {
|
|
gmp = pkgs.gmp4;
|
|
};
|
|
ghc742Binary = callPackage ../development/compilers/ghc/7.4.2-binary.nix {
|
|
gmp = pkgs.gmp4;
|
|
};
|
|
ghc784Binary = callPackage ../development/compilers/ghc/7.8.4-binary.nix { };
|
|
ghc7103Binary = callPackage ../development/compilers/ghc/7.10.3-binary.nix { };
|
|
ghc821Binary = callPackage ../development/compilers/ghc/8.2.1-binary.nix { };
|
|
|
|
ghc6104 = callPackage ../development/compilers/ghc/6.10.4.nix { ghc = compiler.ghc6102Binary; };
|
|
ghc6123 = callPackage ../development/compilers/ghc/6.12.3.nix { ghc = compiler.ghc6102Binary; };
|
|
ghc704 = callPackage ../development/compilers/ghc/7.0.4.nix {
|
|
ghc = compiler.ghc704Binary;
|
|
};
|
|
ghc722 = callPackage ../development/compilers/ghc/7.2.2.nix {
|
|
ghc = compiler.ghc704Binary;
|
|
};
|
|
ghc742 = callPackage ../development/compilers/ghc/7.4.2.nix {
|
|
ghc = compiler.ghc704Binary;
|
|
};
|
|
ghc763 = callPackage ../development/compilers/ghc/7.6.3.nix {
|
|
ghc = compiler.ghc704Binary;
|
|
};
|
|
ghc783 = callPackage ../development/compilers/ghc/7.8.3.nix {
|
|
ghc = compiler.ghc742Binary;
|
|
};
|
|
ghc784 = callPackage ../development/compilers/ghc/7.8.4.nix {
|
|
ghc = compiler.ghc742Binary;
|
|
};
|
|
ghc7103 = callPackage ../development/compilers/ghc/7.10.3.nix rec {
|
|
bootPkgs = packages.ghc7103Binary;
|
|
inherit (bootPkgs) hscolour;
|
|
};
|
|
ghc802 = callPackage ../development/compilers/ghc/8.0.2.nix rec {
|
|
bootPkgs = packages.ghc7103Binary;
|
|
inherit (bootPkgs) hscolour;
|
|
sphinx = pkgs.python27Packages.sphinx;
|
|
};
|
|
ghc822 = callPackage ../development/compilers/ghc/8.2.2.nix rec {
|
|
bootPkgs = packages.ghc7103Binary;
|
|
inherit (bootPkgs) hscolour alex happy;
|
|
inherit buildPlatform targetPlatform;
|
|
sphinx = pkgs.python3Packages.sphinx;
|
|
selfPkgs = packages.ghc822;
|
|
};
|
|
ghcHEAD = callPackage ../development/compilers/ghc/head.nix rec {
|
|
bootPkgs = packages.ghc821Binary;
|
|
inherit (bootPkgs) alex happy;
|
|
inherit buildPlatform targetPlatform;
|
|
selfPkgs = packages.ghcHEAD;
|
|
};
|
|
ghcjs = packages.ghc7103.callPackage ../development/compilers/ghcjs {
|
|
bootPkgs = packages.ghc821Binary;
|
|
};
|
|
ghcjsHEAD = packages.ghc802.callPackage ../development/compilers/ghcjs/head.nix {
|
|
bootPkgs = packages.ghc821Binary;
|
|
};
|
|
ghcHaLVM240 = callPackage ../development/compilers/halvm/2.4.0.nix rec {
|
|
bootPkgs = packages.ghc7103Binary;
|
|
inherit (bootPkgs) hscolour alex happy;
|
|
};
|
|
|
|
uhc = callPackage ../development/compilers/uhc/default.nix ({
|
|
stdenv = pkgs.clangStdenv;
|
|
inherit (packages.ghc7103Binary) ghcWithPackages;
|
|
});
|
|
|
|
# The integer-simple attribute set contains all the GHC compilers
|
|
# build with integer-simple instead of integer-gmp.
|
|
integer-simple =
|
|
let integerSimpleGhcNames =
|
|
pkgs.lib.filter (name: ! builtins.elem name integerSimpleExcludes)
|
|
(pkgs.lib.attrNames compiler);
|
|
integerSimpleGhcs = pkgs.lib.genAttrs integerSimpleGhcNames
|
|
(name: compiler."${name}".override { enableIntegerSimple = true; });
|
|
in pkgs.recurseIntoAttrs (integerSimpleGhcs // {
|
|
ghcHEAD = integerSimpleGhcs.ghcHEAD.override { selfPkgs = packages.integer-simple.ghcHEAD; };
|
|
});
|
|
|
|
};
|
|
|
|
packages = {
|
|
|
|
ghc784 = callPackage ../development/haskell-modules {
|
|
ghc = compiler.ghc784;
|
|
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-7.8.x.nix { };
|
|
};
|
|
ghc7103 = callPackage ../development/haskell-modules {
|
|
ghc = compiler.ghc7103;
|
|
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-7.10.x.nix { };
|
|
};
|
|
ghc7103Binary = callPackage ../development/haskell-modules {
|
|
ghc = compiler.ghc7103Binary;
|
|
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-7.10.x.nix { };
|
|
};
|
|
ghc802 = callPackage ../development/haskell-modules {
|
|
ghc = compiler.ghc802;
|
|
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.0.x.nix { };
|
|
};
|
|
ghc822 = callPackage ../development/haskell-modules {
|
|
ghc = compiler.ghc822;
|
|
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.2.x.nix { };
|
|
};
|
|
ghc821Binary = callPackage ../development/haskell-modules {
|
|
ghc = compiler.ghc821Binary;
|
|
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.2.x.nix { };
|
|
};
|
|
ghcHEAD = callPackage ../development/haskell-modules {
|
|
ghc = compiler.ghcHEAD;
|
|
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-head.nix { };
|
|
};
|
|
# TODO Support for multiple variants here
|
|
ghcCross = callPackage ../development/haskell-modules {
|
|
ghc = compiler.ghcHEAD.crossCompiler;
|
|
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-head.nix { };
|
|
};
|
|
ghcjs = callPackage ../development/haskell-modules {
|
|
ghc = compiler.ghcjs;
|
|
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-7.10.x.nix { };
|
|
packageSetConfig = callPackage ../development/haskell-modules/configuration-ghcjs.nix { };
|
|
};
|
|
ghcjsHEAD = callPackage ../development/haskell-modules {
|
|
ghc = compiler.ghcjsHEAD;
|
|
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.0.x.nix { };
|
|
packageSetConfig = callPackage ../development/haskell-modules/configuration-ghcjs.nix { };
|
|
};
|
|
ghcHaLVM240 = callPackage ../development/haskell-modules {
|
|
ghc = compiler.ghcHaLVM240;
|
|
compilerConfig = callPackage ../development/haskell-modules/configuration-halvm-2.4.0.nix { };
|
|
};
|
|
|
|
# The integer-simple attribute set contains package sets for all the GHC compilers
|
|
# using integer-simple instead of integer-gmp.
|
|
integer-simple =
|
|
let integerSimpleGhcNames =
|
|
pkgs.lib.filter (name: ! builtins.elem name integerSimpleExcludes)
|
|
(pkgs.lib.attrNames packages);
|
|
in pkgs.lib.genAttrs integerSimpleGhcNames (name: packages."${name}".override {
|
|
ghc = compiler.integer-simple."${name}";
|
|
overrides = _self : _super : {
|
|
integer-simple = null;
|
|
integer-gmp = null;
|
|
};
|
|
});
|
|
|
|
};
|
|
}
|