aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2024-10-16 06:07:13 +0200
committerAlex Rønne Petersen <alex@alexrp.com>2024-10-26 21:59:58 +0200
commit4b78dbe068445eb37cb28f2f8d1faf5836dc1175 (patch)
treeb03b0b028fb3e38fc407db57e94afde7b90612f7 /src
parent6a364b4a5e71b971b753d2b62c7708ae1e76d707 (diff)
downloadzig-4b78dbe068445eb37cb28f2f8d1faf5836dc1175.tar.gz
zig-4b78dbe068445eb37cb28f2f8d1faf5836dc1175.zip
Compilation: Omit Clang CPU model flags for some targets.
Diffstat (limited to 'src')
-rw-r--r--src/Compilation.zig10
-rw-r--r--src/target.zig14
2 files changed, 20 insertions, 4 deletions
diff --git a/src/Compilation.zig b/src/Compilation.zig
index 73185a91ea..f83bac1e19 100644
--- 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
index 1f8a567f03..f0ef89d4e9 100644
--- 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,