linux stdenv: Inline stage funs to conform to new convention

Code is just moved around
This commit is contained in:
John Ericson 2016-12-24 07:38:56 -08:00
parent b10f415c21
commit ff35560460
2 changed files with 53 additions and 60 deletions

View File

@ -26,7 +26,7 @@ let
# On Linux systems, the standard build environment consists of Nix-built # On Linux systems, the standard build environment consists of Nix-built
# instances glibc and the `standard' Unix tools, i.e., the Posix utilities, # instances glibc and the `standard' Unix tools, i.e., the Posix utilities,
# the GNU C compiler, and so on. # the GNU C compiler, and so on.
inherit (import ./linux args) stagesLinux; stagesLinux = import ./linux args;
inherit (import ./darwin args) stagesDarwin; inherit (import ./darwin args) stagesDarwin;

View File

@ -18,7 +18,7 @@
assert crossSystem == null; assert crossSystem == null;
rec { let
commonPreHook = commonPreHook =
'' ''
@ -95,7 +95,11 @@ rec {
stdenv = thisStdenv; stdenv = thisStdenv;
}; };
baseCase = {}: { in
[
({}: {
__raw = true; __raw = true;
gcc-unwrapped = null; gcc-unwrapped = null;
@ -103,11 +107,11 @@ rec {
binutils = null; binutils = null;
coreutils = null; coreutils = null;
gnugrep = null; gnugrep = null;
}; })
# Build a dummy stdenv with no GCC or working fetchurl. This is # Build a dummy stdenv with no GCC or working fetchurl. This is
# because we need a stdenv to build the GCC wrapper and fetchurl. # because we need a stdenv to build the GCC wrapper and fetchurl.
stage0 = prevStage: stageFun prevStage { (prevStage: stageFun prevStage {
name = null; name = null;
overrides = self: super: { overrides = self: super: {
@ -134,7 +138,7 @@ rec {
coreutils = bootstrapTools; coreutils = bootstrapTools;
gnugrep = bootstrapTools; gnugrep = bootstrapTools;
}; };
}; })
# Create the first "real" standard environment. This one consists # Create the first "real" standard environment. This one consists
@ -147,7 +151,7 @@ rec {
# If we ever need to use a package from more than one stage back, we # If we ever need to use a package from more than one stage back, we
# simply re-export those packages in the middle stage(s) using the # simply re-export those packages in the middle stage(s) using the
# overrides attribute and the inherit syntax. # overrides attribute and the inherit syntax.
stage1 = prevStage: stageFun prevStage { (prevStage: stageFun prevStage {
name = "bootstrap-gcc-wrapper"; name = "bootstrap-gcc-wrapper";
# Rebuild binutils to use from stage2 onwards. # Rebuild binutils to use from stage2 onwards.
@ -164,12 +168,12 @@ rec {
# top-level pkgs as an override either. # top-level pkgs as an override either.
perl = super.perl.override { enableThreading = false; }; perl = super.perl.override { enableThreading = false; };
}; };
}; })
# 2nd stdenv that contains our own rebuilt binutils and is used for # 2nd stdenv that contains our own rebuilt binutils and is used for
# compiling our own Glibc. # compiling our own Glibc.
stage2 = prevStage: stageFun prevStage { (prevStage: stageFun prevStage {
name = "bootstrap-gcc-wrapper"; name = "bootstrap-gcc-wrapper";
overrides = self: super: { overrides = self: super: {
@ -179,13 +183,13 @@ rec {
perl paxctl gnum4 bison; perl paxctl gnum4 bison;
# This also contains the full, dynamically linked, final Glibc. # This also contains the full, dynamically linked, final Glibc.
}; };
}; })
# Construct a third stdenv identical to the 2nd, except that this # Construct a third stdenv identical to the 2nd, except that this
# one uses the rebuilt Glibc from stage2. It still uses the recent # one uses the rebuilt Glibc from stage2. It still uses the recent
# binutils and rest of the bootstrap tools, including GCC. # binutils and rest of the bootstrap tools, including GCC.
stage3 = prevStage: stageFun prevStage { (prevStage: stageFun prevStage {
name = "bootstrap-gcc-wrapper"; name = "bootstrap-gcc-wrapper";
overrides = self: super: rec { overrides = self: super: rec {
@ -205,12 +209,12 @@ rec {
}; };
}; };
extraBuildInputs = [ prevStage.patchelf prevStage.paxctl ]; extraBuildInputs = [ prevStage.patchelf prevStage.paxctl ];
}; })
# Construct a fourth stdenv that uses the new GCC. But coreutils is # Construct a fourth stdenv that uses the new GCC. But coreutils is
# still from the bootstrap tools. # still from the bootstrap tools.
stage4 = prevStage: stageFun prevStage { (prevStage: stageFun prevStage {
name = ""; name = "";
overrides = self: super: { overrides = self: super: {
@ -232,8 +236,7 @@ rec {
}; };
}; };
extraBuildInputs = [ prevStage.patchelf prevStage.xz ]; extraBuildInputs = [ prevStage.patchelf prevStage.xz ];
}; })
# Construct the final stdenv. It uses the Glibc and GCC, and adds # Construct the final stdenv. It uses the Glibc and GCC, and adds
# in a new binutils that doesn't depend on bootstrap-tools, as well # in a new binutils that doesn't depend on bootstrap-tools, as well
@ -242,62 +245,52 @@ rec {
# When updating stdenvLinux, make sure that the result has no # When updating stdenvLinux, make sure that the result has no
# dependency (`nix-store -qR') on bootstrapTools or the first # dependency (`nix-store -qR') on bootstrapTools or the first
# binutils built. # binutils built.
stdenvLinux = prevStage: import ../generic rec { (prevStage: {
inherit system config; inherit system crossSystem platform config;
stdenv = import ../generic rec {
inherit system config;
preHook = preHook = ''
''
# Make "strip" produce deterministic output, by setting # Make "strip" produce deterministic output, by setting
# timestamps etc. to a fixed value. # timestamps etc. to a fixed value.
commonStripFlags="--enable-deterministic-archives" commonStripFlags="--enable-deterministic-archives"
${commonPreHook} ${commonPreHook}
''; '';
initialPath = initialPath =
((import ../common-path.nix) {pkgs = prevStage;}); ((import ../common-path.nix) {pkgs = prevStage;});
extraBuildInputs = [ prevStage.patchelf prevStage.paxctl ]; extraBuildInputs = [ prevStage.patchelf prevStage.paxctl ];
cc = prevStage.gcc; cc = prevStage.gcc;
shell = cc.shell; shell = cc.shell;
inherit (prevStage.stdenv) fetchurlBoot; inherit (prevStage.stdenv) fetchurlBoot;
extraAttrs = { extraAttrs = {
inherit (prevStage) glibc; inherit (prevStage) glibc;
inherit platform bootstrapTools; inherit platform bootstrapTools;
shellPackage = prevStage.bash; shellPackage = prevStage.bash;
};
/* outputs TODO
allowedRequisites = with prevStage;
[ gzip bzip2 xz bash binutils coreutils diffutils findutils gawk
glibc gnumake gnused gnutar gnugrep gnupatch patchelf attr acl
paxctl zlib pcre linuxHeaders ed gcc gcc.cc libsigsegv
];
*/
overrides = self: super: {
gcc = cc;
inherit (prevStage)
gzip bzip2 xz bash binutils coreutils diffutils findutils gawk
glibc gnumake gnused gnutar gnugrep gnupatch patchelf
attr acl paxctl zlib pcre;
};
}; };
})
/* outputs TODO ]
allowedRequisites = with prevStage;
[ gzip bzip2 xz bash binutils coreutils diffutils findutils gawk
glibc gnumake gnused gnutar gnugrep gnupatch patchelf attr acl
paxctl zlib pcre linuxHeaders ed gcc gcc.cc libsigsegv
];
*/
overrides = self: super: {
gcc = cc;
inherit (prevStage)
gzip bzip2 xz bash binutils coreutils diffutils findutils gawk
glibc gnumake gnused gnutar gnugrep gnupatch patchelf
attr acl paxctl zlib pcre;
};
};
stagesLinux = [
baseCase
stage0
stage1
stage2
stage3
stage4
(prevStage: {
inherit system crossSystem platform config;
stdenv = stdenvLinux prevStage;
})
];
}