diff --git a/general.nix b/general.nix index a6391ba..6fb46b5 100644 --- a/general.nix +++ b/general.nix @@ -38,7 +38,12 @@ in }; arch = mkOption { - default = "x86-64"; + default = + if cfg.cpu.x86.level >= 2 then + "x86-64-v${toString cfg.cpu.x86.level}" + else + "x86-64" + ; example = "x86-64-v2"; description = "Set CPU arch used in overlays, ..."; type = types.str; @@ -49,6 +54,15 @@ in description = "Set CPU tuning for compilers"; type = types.str; }; + + x86 = { + level = mkOption { + default = 1; + example = 3; + description = "Set supported x86-64 level"; + type = with types; addCheck int (n: n >= 1 && n <= 4); + }; + }; }; unsafeOptimizations = mkEnableOption "unsafe system tuning"; debug = mkEnableOption "debug-specific configuration"; diff --git a/nix/nix.nix b/nix/nix.nix index 437d6ba..0a897de 100644 --- a/nix/nix.nix +++ b/nix/nix.nix @@ -79,7 +79,10 @@ in nix.package = mkIf (strings.versionOlder pkgs.nix.version "2.7") pkgs.nix_2_7; nix.settings.system-features = [ "big-parallel" "kvm" "benchmark" ] - ++ optional ( ! isNull generalCfg.cpuArch ) "gccarch-${generalCfg.cpuArch}" + ++ optional ( ! isNull generalCfg.cpu.arch ) "gccarch-${generalCfg.cpu.arch}" + ++ optional ( generalCfg.cpu.x86.level >= 2 ) "gccarch-x86-64-v2" + ++ optional ( generalCfg.cpu.x86.level >= 3 ) "gccarch-x86-64-v3" + ++ optional ( generalCfg.cpu.x86.level >= 4 ) "gccarch-x86-64-v4" ; nix.settings.builders-use-substitutes = true;