mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2025-01-04 09:56:13 +03:00
pkgs/test/stdenv/default.nix: add gcc-stageCompare
This commit adds a derivation `gcc-stageCompare` to `pkgs/test/stdenv/default.nix`. It is important to always build this derivation whenever building `stdenv`! Because we are using a Nix-driven bootstrap instead of gcc's built-in `--enable-bootstrap`, the `gcc` derivation no longer performs the post-self-compilation sanity check. You must build this derivation in order to perform that sanity check. The major benefit of this new approach is that the sanity check (which involves a third compilation of gcc) can be performed *concurrently* with all packages that depend on `stdenv`, rather than serially. Since `stdenv` has very little derivation-level parallelism it cannot take advantage of more than one or perhaps two builders. If you have three or more builders this commit will reduce the time-to-rebuild-stdenv by around 20% (one of three gcc rebuilds is removed from the critical path, and stdenv's build time is dominated by roughly 3*gcc + 1*binutils + 1*bison-test-suite). Co-authored-by: Sandro <sandro.jaeckel@gmail.com>
This commit is contained in:
parent
96588eb3de
commit
5f57c2e0f9
@ -81,7 +81,8 @@ in rec {
|
|||||||
stdenv
|
stdenv
|
||||||
subversion
|
subversion
|
||||||
tarball
|
tarball
|
||||||
vim;
|
vim
|
||||||
|
tests-stdenv-gcc-stageCompare;
|
||||||
};
|
};
|
||||||
|
|
||||||
tested = let
|
tested = let
|
||||||
@ -131,6 +132,7 @@ in rec {
|
|||||||
"nixos.tests.proxy"
|
"nixos.tests.proxy"
|
||||||
"nixos.tests.simple"
|
"nixos.tests.simple"
|
||||||
"nixpkgs.jdk"
|
"nixpkgs.jdk"
|
||||||
|
"nixpkgs.tests-stdenv-gcc-stageCompare"
|
||||||
])
|
])
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
, nukeReferences
|
, nukeReferences
|
||||||
, langC
|
, langC
|
||||||
, langCC
|
, langCC
|
||||||
|
, runtimeShell
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
32
pkgs/test/stdenv/gcc-stageCompare.nix
Normal file
32
pkgs/test/stdenv/gcc-stageCompare.nix
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# This test *must* be run prior to releasing any build of either stdenv or the
|
||||||
|
# gcc that it exports! This check should also be part of CI for any PR that
|
||||||
|
# causes a rebuild of `stdenv.cc`.
|
||||||
|
#
|
||||||
|
# When we used gcc's internal bootstrap it did this check as part of (and
|
||||||
|
# serially with) the gcc derivation. Now that we bootstrap externally this
|
||||||
|
# check can be done in parallel with any/all of stdenv's referrers. But we
|
||||||
|
# must remember to do the check.
|
||||||
|
#
|
||||||
|
|
||||||
|
{ stdenv
|
||||||
|
, pkgs
|
||||||
|
, lib
|
||||||
|
}:
|
||||||
|
|
||||||
|
assert stdenv.cc.isGNU;
|
||||||
|
with pkgs;
|
||||||
|
# rebuild gcc using the "final" stdenv
|
||||||
|
let gcc-stageCompare = (gcc-unwrapped.override {
|
||||||
|
reproducibleBuild = true;
|
||||||
|
profiledCompiler = false;
|
||||||
|
stdenv = overrideCC stdenv (wrapCCWith {
|
||||||
|
cc = stdenv.cc;
|
||||||
|
});
|
||||||
|
}).overrideAttrs(_: {
|
||||||
|
NIX_OUTPATH_USED_AS_RANDOM_SEED = stdenv.cc.cc.out;
|
||||||
|
});
|
||||||
|
in (runCommand "gcc-stageCompare" {} ''
|
||||||
|
diff -sr ${pkgs.gcc-unwrapped.checksum}/checksums ${gcc-stageCompare.checksum}/checksums && touch $out
|
||||||
|
'').overrideAttrs (a: {
|
||||||
|
meta = (a.meta or { }) // { platforms = lib.platforms.linux; };
|
||||||
|
})
|
@ -33898,6 +33898,8 @@ with pkgs;
|
|||||||
|
|
||||||
testssl = callPackage ../applications/networking/testssl { };
|
testssl = callPackage ../applications/networking/testssl { };
|
||||||
|
|
||||||
|
tests-stdenv-gcc-stageCompare = callPackage ../test/stdenv/gcc-stageCompare.nix { };
|
||||||
|
|
||||||
lavalauncher = callPackage ../applications/misc/lavalauncher { };
|
lavalauncher = callPackage ../applications/misc/lavalauncher { };
|
||||||
|
|
||||||
t-rec = callPackage ../misc/t-rec {
|
t-rec = callPackage ../misc/t-rec {
|
||||||
|
@ -150,5 +150,5 @@ with import ./release-lib.nix { inherit supportedSystems nixpkgsArgs; };
|
|||||||
xfsprogs = linux;
|
xfsprogs = linux;
|
||||||
xkeyboard_config = linux;
|
xkeyboard_config = linux;
|
||||||
zip = all;
|
zip = all;
|
||||||
|
tests-stdenv-gcc-stageCompare = all;
|
||||||
} ))
|
} ))
|
||||||
|
Loading…
Reference in New Issue
Block a user