authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-10-16 06:07:13+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-10-26 21:59:58+02:00
log4b78dbe068445eb37cb28f2f8d1faf5836dc1175
treeb03b0b028fb3e38fc407db57e94afde7b90612f7
parent6a364b4a5e71b971b753d2b62c7708ae1e76d707
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

Compilation: Omit Clang CPU model flags for some targets.


2 files changed, 20 insertions(+), 4 deletions(-)

src/Compilation.zig+6-4
...@@ -5371,10 +5371,12 @@ pub fn addCCArgs(...@@ -5371,10 +5371,12 @@ pub fn addCCArgs(
5371 try argv.append(include_dir);5371 try argv.append(include_dir);
5372 }5372 }
53735373
5374 if (target.cpu.model.llvm_name) |llvm_name| {5374 if (target_util.clangSupportsTargetCpuArg(target)) {
5375 try argv.appendSlice(&[_][]const u8{5375 if (target.cpu.model.llvm_name) |llvm_name| {
5376 "-Xclang", "-target-cpu", "-Xclang", llvm_name,5376 try argv.appendSlice(&[_][]const u8{
5377 });5377 "-Xclang", "-target-cpu", "-Xclang", llvm_name,
5378 });
5379 }
5378 }5380 }
53795381
5380 // It would be really nice if there was a more compact way to communicate this info to Clang.5382 // It would be really nice if there was a more compact way to communicate this info to Clang.
src/target.zig+14
...@@ -315,6 +315,20 @@ pub fn clangAssemblerSupportsMcpuArg(target: std.Target) bool {...@@ -315,6 +315,20 @@ pub fn clangAssemblerSupportsMcpuArg(target: std.Target) bool {
315 };315 };
316}316}
317317
318/// Some experimental or poorly-maintained LLVM targets do not properly process CPU models in their
319/// Clang driver code. For these, we should omit the `-Xclang -target-cpu -Xclang <model>` flags.
320pub fn clangSupportsTargetCpuArg(target: std.Target) bool {
321 return switch (target.cpu.arch) {
322 .arc,
323 .msp430,
324 .ve,
325 .xcore,
326 .xtensa,
327 => false,
328 else => true,
329 };
330}
331
318pub fn clangSupportsFloatAbiArg(target: std.Target) bool {332pub fn clangSupportsFloatAbiArg(target: std.Target) bool {
319 return switch (target.cpu.arch) {333 return switch (target.cpu.arch) {
320 .arm,334 .arm,