zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 4b78dbe068445eb37cb28f2f8d1faf5836dc1175 (tree)
parent 6a364b4a5e71b971b753d2b62c7708ae1e76d707
Author: Alex Rønne Petersen <alex@alexrp.com>
Date:   Wed, 16 Oct 2024 06:07:13 +0200

Compilation: Omit Clang CPU model flags for some targets.

Diffstat:
Msrc/Compilation.zig | 10++++++----
Msrc/target.zig | 14++++++++++++++
2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/src/Compilation.zig b/src/Compilation.zig @@ -5371,10 +5371,12 @@ pub fn addCCArgs( try argv.append(include_dir); } - if (target.cpu.model.llvm_name) |llvm_name| { - try argv.appendSlice(&[_][]const u8{ - "-Xclang", "-target-cpu", "-Xclang", llvm_name, - }); + if (target_util.clangSupportsTargetCpuArg(target)) { + if (target.cpu.model.llvm_name) |llvm_name| { + try argv.appendSlice(&[_][]const u8{ + "-Xclang", "-target-cpu", "-Xclang", llvm_name, + }); + } } // It would be really nice if there was a more compact way to communicate this info to Clang. diff --git a/src/target.zig b/src/target.zig @@ -315,6 +315,20 @@ pub fn clangAssemblerSupportsMcpuArg(target: std.Target) bool { }; } +/// Some experimental or poorly-maintained LLVM targets do not properly process CPU models in their +/// Clang driver code. For these, we should omit the `-Xclang -target-cpu -Xclang <model>` flags. +pub fn clangSupportsTargetCpuArg(target: std.Target) bool { + return switch (target.cpu.arch) { + .arc, + .msp430, + .ve, + .xcore, + .xtensa, + => false, + else => true, + }; +} + pub fn clangSupportsFloatAbiArg(target: std.Target) bool { return switch (target.cpu.arch) { .arm,