[Optimizations] Improve fast GCC even further

This commit is contained in:
Antoine Viallon 2022-10-09 01:29:44 +02:00
parent 2ac7d4e239
commit 805124cee7
Signed by: aviallon
GPG key ID: 186FC35EDEB25716

View file

@ -5,35 +5,42 @@ let
desktopCfg = config.aviallon.desktop; desktopCfg = config.aviallon.desktop;
generalCfg = config.aviallon.general; generalCfg = config.aviallon.general;
_optimizeAttrs = { lto ? false , go ? false, ... }@attrs: _optimizeAttrs =
{
lto ? false ,
go ? false ,
cmake ? true ,
cpuArch ? generalCfg.cpuArch ,
cpuTune ? generalCfg.cpuTune ,
extraCFlags ? cfg.extraCompileFlags ,
...
}@attrs:
traceValSeq ( traceValSeq (
(myLib.optimizations.makeOptimizationFlags ({ (myLib.optimizations.makeOptimizationFlags ({
inherit lto go; inherit lto go cpuArch cpuTune extraCFlags;
cpuArch = generalCfg.cpuArch;
cpuTune = generalCfg.cpuTune;
extraCFlags = cfg.extraCompileFlags;
} // attrs)) } // attrs))
// { // (optionalAttrs cmake {
preConfigure = '' preConfigure = ''
cmakeFlagsArray+=( cmakeFlagsArray+=(
"-DCMAKE_CXX_FLAGS=$CXXFLAGS" "-DCMAKE_CXX_FLAGS=$CXXFLAGS"
"-DCMAKE_C_FLAGS=$CFLAGS" "-DCMAKE_C_FLAGS=$CFLAGS"
) )
''; '';
}
// (optionalAttrs go {
buildInputs = [ pkgs.gccgo ];
}) })
// (optionalAttrs go {
nativeBuildInputs = [ pkgs.gccgo ];
}
)
); );
addAttrs = pkg: attrs: pkg.overrideAttrs (old: traceValSeqN 2 (myLib.attrsets.mergeAttrsRecursive old attrs) ); addAttrs = pkg: attrs: pkg.overrideAttrs (old: traceValSeqN 2 (myLib.attrsets.mergeAttrsRecursive old attrs) );
optimizePkg = {level ? "normal", ... }@attrs: pkg: optimizePkg = {level ? "normal", useAttrs ? false , ... }@attrs: pkg:
let let
optimizedAttrs = _optimizeAttrs (attrs // {inherit level; go = (hasAttr "GOARCH" pkg); }); optimizedAttrs = _optimizeAttrs (attrs // {inherit level; go = (hasAttr "GOARCH" pkg); });
optStdenv = pkgs.addAttrsToDerivation optimizedAttrs pkgs.fastStdenv; optStdenv = pkgs.addAttrsToDerivation optimizedAttrs pkgs.fastStdenv;
in ( in (
if (hasAttr "stdenv" pkg.override.__functionArgs) then if (!useAttrs) && (hasAttr "stdenv" pkg.override.__functionArgs) then
trace "Optimized ${getName pkg} with stdenv at level '${level}'" pkg.override { trace "Optimized ${getName pkg} with stdenv at level '${level}'" pkg.override {
stdenv = optStdenv; stdenv = optStdenv;
} }
@ -65,14 +72,19 @@ in
(self: super: { (self: super: {
fastStdenv = super.overrideCC super.gccStdenv (super.buildPackages.gcc_latest.overrideAttrs (old: fastStdenv = super.overrideCC super.gccStdenv (super.buildPackages.gcc_latest.overrideAttrs (old:
let let
ccAttrs = cc: cc.overrideAttrs (oldAttrs: { optimizedAttrs = {}
configureFlags = (oldAttrs.configureFlags or []) ++ [ "--with-cpu-64=${generalCfg.cpuArch}" "--with-arch-64=${generalCfg.cpuTune}" ]; #// _optimizeAttrs { level = "general"; cpuArch = null; cpuTune = null; }
}); // {
ccOverrides = cc: cc.override { configureFlags = [
reproducibleBuild = false; "--with-cpu-64=${generalCfg.cpuArch}" "--with-arch-64=${generalCfg.cpuArch}"
}; "--with-tune-64=${generalCfg.cpuTune}"
"--with-build-config=bootstrap-lto-lean"
];
}
;
ccWithProfiling = old.cc.overrideAttrs (_: { buildFlags = [ "profiledbootstrap" ]; } );
in { in {
cc = ccOverrides (ccAttrs old.cc); cc = addAttrs ccWithProfiling optimizedAttrs;
} }
)); ));
}) })