Nix CPU global CPU flags

I have struggled with something similar. I wanted to do a build optimized for the x86-64-v3 feature level. Here is what didn’t work for me.

I started with just this:

  nixpkgs.localSystem = {
    gcc.arch = "x86-64-v3";
    gcc.tune = "generic";
    system = "x86_64-linux";
  };

This complained about nix system features, and so I had to add gccarch feature:

nix.settings.system-features = [ "nixos-test" "benchmark" "big-parallel" "kvm" "gccarch-x86-64-v3" ];

This then complained about the architecture not being valid, so I tried again targeting skylake instead:

  nix.settings.system-features = [ "nixos-test" "benchmark" "big-parallel" "kvm" "gccarch-skylake" ];
  nixpkgs.localSystem = {
    gcc.arch = "skylake";
    gcc.tune = "skylake";
    system = "x86_64-linux";
  };

With these flags the build did start to run, but from what I could see with ps none of the invocations of gcc actually had the march or mtune flags set as I’d expect. I interrupted the build and have given up on this for the time being.


I would be very interested to hear if you figure out a solution to this, especially if you get the micro-architecture feature level build working.

2 Likes