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?