[Packages/Optimizations] Move all optimization logic in a dedicated file

This commit is contained in:
Antoine Viallon 2022-10-06 00:57:26 +02:00
parent 852b544a57
commit a2c29a7c84
Signed by: aviallon
GPG key ID: 186FC35EDEB25716
4 changed files with 129 additions and 132 deletions

70
optimizations.nix Normal file
View file

@ -0,0 +1,70 @@
{ config, pkgs, lib, myLib, ... }:
with lib;
let
cfg = config.aviallon.optimizations;
desktopCfg = config.aviallon.desktop;
generalCfg = config.aviallon.general;
_optimizeAttrs = level:
traceValSeq ((myLib.optimizations.makeOptimizationFlags {
inherit level;
cpuArch = generalCfg.cpuArch;
extraCFlags = cfg.extraCompileFlags;
}) // {
preConfigure = ''
cmakeFlagsArray+=(
"-DCMAKE_CXX_FLAGS=$CXXFLAGS"
"-DCMAKE_C_FLAGS=$CFLAGS"
)
'';
doCheck = false;
doInstallCheck = false;
});
optimizedStdenv = pkgs.addAttrsToDerivation _optimizeAttrs pkgs.fastStdenv;
optimizePkg = {level ? "normal" }: pkg:
(
if (hasAttr "stdenv" pkg.override.__functionArgs) then
trace "Optimized ${getName pkg} with stdenv" pkg.override {
stdenv = pkgs.addAttrsToDerivation (_optimizeAttrs level) pkgs.fastStdenv;
}
else
warn "Can't optimize ${getName pkg}" pkg
);
in
{
options.aviallon.optimizations = {
enable = mkOption {
default = true;
example = false;
description = "Enable aviallon's optimizations";
type = types.bool;
};
lto = mkEnableOption "enable LTO for some packages";
extraCompileFlags = mkOption {
default = [ "-mtune=${generalCfg.cpuTune}" ];
example = [ "-O2" "-mavx" ];
description = "Add specific compile flags";
type = types.listOf types.str;
};
};
config = mkIf cfg.enable {
nixpkgs.overlays = mkBefore [
(self: super: {
htop = optimizePkg {} super.htop;
nano = optimizePkg {level = "unsafe";} super.nano;
virtmanager = optimizePkg {} super.virtmanager;
libsForQt5 = super.libsForQt5.overrideScope' (mself: msuper: {
kwin = optimizePkg {} msuper.kwin;
dolphin = optimizePkg {} msuper.dolphin;
});
libsForQt514 = super.libsForQt514.overrideScope' (mself: msuper: {
kwin = optimizePkg {level = "unsafe"; } msuper.kwin;
dolphin = optimizePkg {} msuper.dolphin;
});
#wayland = optimizePkg super.wayland;
})
];
};
}