clang: don't set -march for overridden target
If -target is explicitly passed to clang, we shouldn't pass our -march value for the default target, because it probably won't exist for the target being used. Up until now, clang has been lenient with this, but it's a hard error with clang 17, so since gcc.arch is always set on aarch64, fixing this is a hard requirement for upgrading our default clang to 17. Before (with clang 17 on aarch64-linux): $ clang -target bpf -c -o /dev/null test.bpf.c clang: warning: ignoring '-fstack-protector-strong' option as it is not currently supported for target 'bpf' [-Woption-ignored] clang: error: unsupported option '-march=' for target 'bpf' clang: warning: argument unused during compilation: '--gcc-toolchain=/nix/store/cngak08nb1yk44gnjipv5rg1ahh1xkax-gcc-13.2.0' [-Wunused-command-line-argument] After: $ clang -target bpf -c -o /dev/null test.bpf.c clang: warning: ignoring '-fstack-protector-strong' option as it is not currently supported for target 'bpf' [-Woption-ignored] clang: warning: argument unused during compilation: '--gcc-toolchain=/nix/store/cngak08nb1yk44gnjipv5rg1ahh1xkax-gcc-13.2.0' [-Wunused-command-line-argument]
This commit is contained in:
parent
269ce7215b
commit
12b0e8ac74
2 changed files with 9 additions and 2 deletions
|
@ -7,5 +7,5 @@ for p in "${params[@]}"; do
|
|||
done
|
||||
|
||||
if $needsTarget; then
|
||||
extraBefore+=(-target @defaultTarget@)
|
||||
extraBefore+=(-target @defaultTarget@ @march@)
|
||||
fi
|
||||
|
|
|
@ -595,8 +595,11 @@ stdenv.mkDerivation {
|
|||
# Always add -march based on cpu in triple. Sometimes there is a
|
||||
# discrepency (x86_64 vs. x86-64), so we provide an "arch" arg in
|
||||
# that case.
|
||||
#
|
||||
# For clang, this is handled in add-clang-cc-cflags-before.sh
|
||||
|
||||
# TODO: aarch64-darwin has mcpu incompatible with gcc
|
||||
+ optionalString ((targetPlatform ? gcc.arch) && (isClang || !(stdenv.isDarwin && stdenv.isAarch64)) &&
|
||||
+ optionalString ((targetPlatform ? gcc.arch) && !isClang && !(stdenv.isDarwin && stdenv.isAarch64) &&
|
||||
isGccArchSupported targetPlatform.gcc.arch) ''
|
||||
echo "-march=${targetPlatform.gcc.arch}" >> $out/nix-support/cc-cflags-before
|
||||
''
|
||||
|
@ -685,6 +688,10 @@ stdenv.mkDerivation {
|
|||
## Needs to go after ^ because the for loop eats \n and makes this file an invalid script
|
||||
##
|
||||
+ optionalString isClang ''
|
||||
# Escape twice: once for this script, once for the one it gets substituted into.
|
||||
export march=${lib.escapeShellArg
|
||||
(lib.optionalString (targetPlatform ? gcc.arch)
|
||||
(lib.escapeShellArg "-march=${targetPlatform.gcc.arch}"))}
|
||||
export defaultTarget=${targetPlatform.config}
|
||||
substituteAll ${./add-clang-cc-cflags-before.sh} $out/nix-support/add-local-cc-cflags-before.sh
|
||||
''
|
||||
|
|
Loading…
Reference in a new issue