Strange errors when I attempt to use GCC flags to build a kernel

I’ve been trying to enable architecture optimisation, but neither specifying gcc.arch and gcc.tune in nixpkgs nor using an overlay to force compiler flags seems to work.

nixpkgs.localSystem.system = builtins.currentSystem;
nixpkgs.localSystem.platform = lib.systems.platforms.pc64 // {
	gcc.arch = "skylake";
	gcc.tune = "skylake";
};

gives me the following error when I run nixos-rebuild:

error: a 'x86_64-linux' with features {gccarch-skylake} is required to build '/nix/store/7vycgvmhpbxj4nhnc8mqj6n7zx57r87s-bootstrap-stage0-glibc.drv', but I am a 'x86_64-linux' with features {benchmark, big-parallel, kvm, nixos-test}

I found it odd that you would need to run this from a kernel already optimised, since otherwise it’s relatively easy to compile for different architectures, and I tried using an overlay instead.

nixpkgs.overlays = [ (self: super: { stdenv = super.impureUseNativeOptimizations super.stdenv; }) ];

The result of this was some (to me) unhelpful error messages about the compiler somehow running in 16-bit mode:

  CC [M]  net/wireless/shipped-certs.o
  CC [M]  net/sctp/ipv6.o
  AR      net/wireless/built-in.a
  LD [M]  net/wireless/cfg80211.o
  LD [M]  net/sctp/sctp_diag.o
  LD [M]  net/sctp/sctp.o
  CC      net/sysctl_net.o
  CC      net/compat.o
  CC      net/socket.o
  AR      net/built-in.a
  GEN     .version
  CHK     include/generated/compile.h
  LD      vmlinux.o
  MODPOST vmlinux.o
  MODINFO modules.builtin.modinfo
  LD      .tmp_vmlinux.kallsyms1
  KSYM    .tmp_vmlinux.kallsyms1.o
  LD      .tmp_vmlinux.kallsyms2
  KSYM    .tmp_vmlinux.kallsyms2.o
  LD      vmlinux
  SORTEX  vmlinux
  SYSMAP  System.map
make[1]: 'vmlinux' is up to date.
  CC      arch/x86/boot/a20.o
  CC      arch/x86/boot/cpucheck.o
/build/ccE3h5o3.s: Assembler messages:
/build/ccE3h5o3.s:33: Error: instruction `andn' isn't supported in 16-bit mode.
/build/ccE3h5o3.s:42: Error: instruction `shlx' isn't supported in 16-bit mode.
make[2]: *** [../scripts/Makefile.build:266: arch/x86/boot/cpucheck.o] Error 1
make[1]: *** [arch/x86/Makefile:284: bzImage] Error 2
make: *** [../Makefile:179: sub-make] Error 2

I tried being more specific:

nixpkgs.overlays = [(self: super: { stdenv = super.addAttrsToDerivation {
	NIX_CFLAGS_COMPILE = "-march=native -pipe -O2";
} (super.impureUseNativeOptimizations super.stdenv); }) ];

but unfortunately:

Scanning dependencies of target aws-cpp-sdk-core
[  0%] Building CXX object aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/AmazonSerializableWebServiceRequest.cpp.o
[  0%] Building CXX object aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/AmazonStreamingWebServiceRequest.cpp.o
[  0%] Building CXX object aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/auth/AWSAuthSignerProvider.cpp.o
[  1%] Building CXX object aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/auth/AWSCredentialsProvider.cpp.o
[  1%] Building CXX object aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/auth/AWSAuthSigner.cpp.o
[  1%] Building CXX object aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/Version.cpp.o
[  1%] Building CXX object aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/auth/AWSCredentialsProviderChain.cpp.o
[  1%] Building CXX object aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/client/AWSClient.cpp.o
[  2%] Building CXX object aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/Globals.cpp.o
[  2%] Building CXX object aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/client/AWSErrorMarshaller.cpp.o
/build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp: In member function 'virtual Aws::Client::AWSError<Aws::Client::CoreErrors> Aws::Client::AWSJsonClient::BuildAWSError(const std::shared_ptr<Aws::Http::HttpResponse>&) const':
/build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:753:111: error: implicitly-declared 'Aws::Client::AWSError<Aws::Client::CoreErrors>& Aws::Client::AWSError<Aws::Client::CoreErrors>::operator=(const Aws::Client::AWSError<Aws::Client::CoreErrors>&)' is deprecated [-Werror=deprecated-copy]
  753 |         error = AWSError<CoreErrors>(CoreErrors::NETWORK_CONNECTION, "", "Unable to connect to endpoint", true);
      |                                                                                                               ^
In file included from /build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:20:
/build/source/aws-cpp-sdk-core/include/aws/core/client/AWSError.h:51:13: note: because 'Aws::Client::AWSError<Aws::Client::CoreErrors>' has user-provided 'Aws::Client::AWSError<ERROR_TYPE>::AWSError(const Aws::Client::AWSError<Aws::Client::CoreErrors>&) [with ERROR_TYPE = Aws::Client::CoreErrors]'
   51 |             AWSError(const AWSError<CoreErrors>& rhs) :
      |             ^~~~~~~~
/build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:766:54: error: implicitly-declared 'Aws::Client::AWSError<Aws::Client::CoreErrors>& Aws::Client::AWSError<Aws::Client::CoreErrors>::operator=(const Aws::Client::AWSError<Aws::Client::CoreErrors>&)' is deprecated [-Werror=deprecated-copy]
  766 |             IsRetryableHttpResponseCode(responseCode));
      |                                                      ^
In file included from /build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:20:
/build/source/aws-cpp-sdk-core/include/aws/core/client/AWSError.h:51:13: note: because 'Aws::Client::AWSError<Aws::Client::CoreErrors>' has user-provided 'Aws::Client::AWSError<ERROR_TYPE>::AWSError(const Aws::Client::AWSError<Aws::Client::CoreErrors>&) [with ERROR_TYPE = Aws::Client::CoreErrors]'
   51 |             AWSError(const AWSError<CoreErrors>& rhs) :
      |             ^~~~~~~~
/build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:771:61: error: implicitly-declared 'Aws::Client::AWSError<Aws::Client::CoreErrors>& Aws::Client::AWSError<Aws::Client::CoreErrors>::operator=(const Aws::Client::AWSError<Aws::Client::CoreErrors>&)' is deprecated [-Werror=deprecated-copy]
  771 |         error = GetErrorMarshaller()->Marshall(*httpResponse);
      |                                                             ^
In file included from /build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:20:
/build/source/aws-cpp-sdk-core/include/aws/core/client/AWSError.h:51:13: note: because 'Aws::Client::AWSError<Aws::Client::CoreErrors>' has user-provided 'Aws::Client::AWSError<ERROR_TYPE>::AWSError(const Aws::Client::AWSError<Aws::Client::CoreErrors>&) [with ERROR_TYPE = Aws::Client::CoreErrors]'
   51 |             AWSError(const AWSError<CoreErrors>& rhs) :
      |             ^~~~~~~~
/build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp: In member function 'virtual Aws::Client::AWSError<Aws::Client::CoreErrors> Aws::Client::AWSXMLClient::BuildAWSError(const std::shared_ptr<Aws::Http::HttpResponse>&) const':
/build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:849:111: error: implicitly-declared 'Aws::Client::AWSError<Aws::Client::CoreErrors>& Aws::Client::AWSError<Aws::Client::CoreErrors>::operator=(const Aws::Client::AWSError<Aws::Client::CoreErrors>&)' is deprecated [-Werror=deprecated-copy]
  849 |         error = AWSError<CoreErrors>(CoreErrors::NETWORK_CONNECTION, "", "Unable to connect to endpoint", true);
      |                                                                                                               ^
In file included from /build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:20:
/build/source/aws-cpp-sdk-core/include/aws/core/client/AWSError.h:51:13: note: because 'Aws::Client::AWSError<Aws::Client::CoreErrors>' has user-provided 'Aws::Client::AWSError<ERROR_TYPE>::AWSError(const Aws::Client::AWSError<Aws::Client::CoreErrors>&) [with ERROR_TYPE = Aws::Client::CoreErrors]'
   51 |             AWSError(const AWSError<CoreErrors>& rhs) :
      |             ^~~~~~~~
/build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:861:104: error: implicitly-declared 'Aws::Client::AWSError<Aws::Client::CoreErrors>& Aws::Client::AWSError<Aws::Client::CoreErrors>::operator=(const Aws::Client::AWSError<Aws::Client::CoreErrors>&)' is deprecated [-Werror=deprecated-copy]
  861 |         error = AWSError<CoreErrors>(errorCode, "", ss.str(), IsRetryableHttpResponseCode(responseCode));
      |                                                                                                        ^
In file included from /build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:20:
/build/source/aws-cpp-sdk-core/include/aws/core/client/AWSError.h:51:13: note: because 'Aws::Client::AWSError<Aws::Client::CoreErrors>' has user-provided 'Aws::Client::AWSError<ERROR_TYPE>::AWSError(const Aws::Client::AWSError<Aws::Client::CoreErrors>&) [with ERROR_TYPE = Aws::Client::CoreErrors]'
   51 |             AWSError(const AWSError<CoreErrors>& rhs) :
      |             ^~~~~~~~
/build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:875:61: error: implicitly-declared 'Aws::Client::AWSError<Aws::Client::CoreErrors>& Aws::Client::AWSError<Aws::Client::CoreErrors>::operator=(const Aws::Client::AWSError<Aws::Client::CoreErrors>&)' is deprecated [-Werror=deprecated-copy]
  875 |         error = GetErrorMarshaller()->Marshall(*httpResponse);
      |                                                             ^
In file included from /build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:20:
/build/source/aws-cpp-sdk-core/include/aws/core/client/AWSError.h:51:13: note: because 'Aws::Client::AWSError<Aws::Client::CoreErrors>' has user-provided 'Aws::Client::AWSError<ERROR_TYPE>::AWSError(const Aws::Client::AWSError<Aws::Client::CoreErrors>&) [with ERROR_TYPE = Aws::Client::CoreErrors]'
   51 |             AWSError(const AWSError<CoreErrors>& rhs) :
      |             ^~~~~~~~
In file included from /build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:31:
/build/source/aws-cpp-sdk-core/include/aws/core/utils/Outcome.h: In instantiation of 'Aws::Utils::Outcome<R, E>& Aws::Utils::Outcome<R, E>::operator=(Aws::Utils::Outcome<R, E>&&) [with R = std::shared_ptr<Aws::Http::HttpResponse>; E = Aws::Client::AWSError<Aws::Client::CoreErrors>]':
/build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:164:23:   required from here
/build/source/aws-cpp-sdk-core/include/aws/core/utils/Outcome.h:84:27: error: implicitly-declared 'Aws::Client::AWSError<Aws::Client::CoreErrors>& Aws::Client::AWSError<Aws::Client::CoreErrors>::operator=(const Aws::Client::AWSError<Aws::Client::CoreErrors>&)' is deprecated [-Werror=deprecated-copy]
   84 |                     error = std::move(o.error);
      |                     ~~~~~~^~~~~~~~~~~~~~~~~~~~
In file included from /build/source/aws-cpp-sdk-core/source/client/AWSClient.cpp:20:
/build/source/aws-cpp-sdk-core/include/aws/core/client/AWSError.h:51:13: note: because 'Aws::Client::AWSError<Aws::Client::CoreErrors>' has user-provided 'Aws::Client::AWSError<ERROR_TYPE>::AWSError(const Aws::Client::AWSError<Aws::Client::CoreErrors>&) [with ERROR_TYPE = Aws::Client::CoreErrors]'
   51 |             AWSError(const AWSError<CoreErrors>& rhs) :
      |             ^~~~~~~~
[  2%] Building CXX object aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/client/AsyncCallerContext.cpp.o
[  3%] Building CXX object aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/client/ClientConfiguration.cpp.o
/build/source/aws-cpp-sdk-core/source/client/AWSErrorMarshaller.cpp: In member function 'virtual Aws::Client::AWSError<Aws::Client::CoreErrors> Aws::Client::XmlErrorMarshaller::Marshall(const Aws::Http::HttpResponse&) const':
/build/source/aws-cpp-sdk-core/source/client/AWSErrorMarshaller.cpp:95:82: error: implicitly-declared 'Aws::Client::AWSError<Aws::Client::CoreErrors>& Aws::Client::AWSError<Aws::Client::CoreErrors>::operator=(const Aws::Client::AWSError<Aws::Client::CoreErrors>&)' is deprecated [-Werror=deprecated-copy]
   95 |                                  StringUtils::Trim(messageNode.GetText().c_str()));
      |                                                                                  ^
In file included from /build/source/aws-cpp-sdk-core/source/client/AWSErrorMarshaller.cpp:21:
/build/source/aws-cpp-sdk-core/include/aws/core/client/AWSError.h:51:13: note: because 'Aws::Client::AWSError<Aws::Client::CoreErrors>' has user-provided 'Aws::Client::AWSError<ERROR_TYPE>::AWSError(const Aws::Client::AWSError<Aws::Client::CoreErrors>&) [with ERROR_TYPE = Aws::Client::CoreErrors]'
   51 |             AWSError(const AWSError<CoreErrors>& rhs) :
      |             ^~~~~~~~
/build/source/aws-cpp-sdk-core/source/client/AWSErrorMarshaller.cpp:107:75: error: implicitly-declared 'Aws::Client::AWSError<Aws::Client::CoreErrors>& Aws::Client::AWSError<Aws::Client::CoreErrors>::operator=(const Aws::Client::AWSError<Aws::Client::CoreErrors>&)' is deprecated [-Werror=deprecated-copy]
  107 |         error = FindErrorByHttpResponseCode(httpResponse.GetResponseCode());
      |                                                                           ^
In file included from /build/source/aws-cpp-sdk-core/source/client/AWSErrorMarshaller.cpp:21:
/build/source/aws-cpp-sdk-core/include/aws/core/client/AWSError.h:51:13: note: because 'Aws::Client::AWSError<Aws::Client::CoreErrors>' has user-provided 'Aws::Client::AWSError<ERROR_TYPE>::AWSError(const Aws::Client::AWSError<Aws::Client::CoreErrors>&) [with ERROR_TYPE = Aws::Client::CoreErrors]'
   51 |             AWSError(const AWSError<CoreErrors>& rhs) :
      |             ^~~~~~~~
cc1plus: all warnings being treated as errors
make[2]: *** [aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/build.make:237: aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/client/AWSErrorMarshaller.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
cc1plus: all warnings being treated as errors
make[2]: *** [aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/build.make:223: aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/source/client/AWSClient.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:322: aws-cpp-sdk-core/CMakeFiles/aws-cpp-sdk-core.dir/all] Error 2
make: *** [Makefile:149: all] Error 2
builder for '/nix/store/g71f3f4h564rjk39mcs9947amixjh5qw-aws-sdk-cpp-1.7.90.drv' failed with exit code 2
cannot build derivation '/nix/store/9yq6kzanyymxlqkf848qj2vlz1gy06qz-nix-2.3.9.drv': 1 dependencies couldn't be built
error: build of '/nix/store/9yq6kzanyymxlqkf848qj2vlz1gy06qz-nix-2.3.9.drv' failed

Any ideas? People I’ve asked elsewhere all used the first method, but with AMD Ryzen processors. Is the issue here the Skylake architecture?