From 77c8f4b6713c5209f0cde62001b5995641f8bf60 Mon Sep 17 00:00:00 2001 From: Alex Rønne Petersen Date: Sun, 25 Aug 2024 07:18:29 +0200 Subject: Compilation: Pass hard/soft float flags to Clang as appropriate. --- src/Compilation.zig | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'src/Compilation.zig') diff --git a/src/Compilation.zig b/src/Compilation.zig index 54fa120856..ffd004b93e 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -5484,6 +5484,9 @@ pub fn addCCArgs( const is_enabled = target.cpu.features.isEnabled(index); if (feature.llvm_name) |llvm_name| { + // We communicate float ABI to Clang through the dedicated options further down. + if (std.mem.eql(u8, llvm_name, "soft-float")) continue; + argv.appendSliceAssumeCapacity(&[_][]const u8{ "-Xclang", "-target-feature", "-Xclang" }); const plus_or_minus = "-+"[@intFromBool(is_enabled)]; const arg = try std.fmt.allocPrint(arena, "{c}{s}", .{ plus_or_minus, llvm_name }); @@ -5705,10 +5708,6 @@ pub fn addCCArgs( if (target.cpu.model.llvm_name) |llvm_name| { try argv.append(try std.fmt.allocPrint(arena, "-march={s}", .{llvm_name})); } - - if (std.Target.mips.featureSetHas(target.cpu.features, .soft_float)) { - try argv.append("-msoft-float"); - } }, else => { // TODO @@ -5751,6 +5750,21 @@ pub fn addCCArgs( try argv.append(try std.fmt.allocPrint(arena, "-mabi={s}", .{mabi})); } + // We might want to support -mfloat-abi=softfp for Arm and CSKY here in the future. + if (target_util.clangSupportsFloatAbiArg(target)) { + const fabi = @tagName(target.floatAbi()); + + try argv.append(switch (target.cpu.arch) { + // For whatever reason, Clang doesn't support `-mfloat-abi` for s390x. + .s390x => try std.fmt.allocPrint(arena, "-m{s}-float", .{fabi}), + else => try std.fmt.allocPrint(arena, "-mfloat-abi={s}", .{fabi}), + }); + } + + if (target_util.clangSupportsNoImplicitFloatArg(target) and target.floatAbi() == .soft) { + try argv.append("-mno-implicit-float"); + } + if (out_dep_path) |p| { try argv.appendSlice(&[_][]const u8{ "-MD", "-MV", "-MF", p }); } -- cgit v1.2.3 From f9455511faba40ad719fa0e6897ea09ac5fb9d23 Mon Sep 17 00:00:00 2001 From: Alex Rønne Petersen Date: Sun, 25 Aug 2024 06:57:18 +0200 Subject: Compilation: Work around llvm/llvm-project#105972 by defining the macros. https://github.com/llvm/llvm-project/issues/105972 --- src/Compilation.zig | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/Compilation.zig') diff --git a/src/Compilation.zig b/src/Compilation.zig index ffd004b93e..bd93b2061b 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -5765,6 +5765,13 @@ pub fn addCCArgs( try argv.append("-mno-implicit-float"); } + // https://github.com/llvm/llvm-project/issues/105972 + if (target.cpu.arch.isPowerPC() and target.floatAbi() == .soft) { + try argv.append("-D__NO_FPRS__"); + try argv.append("-D_SOFT_FLOAT"); + try argv.append("-D_SOFT_DOUBLE"); + } + if (out_dep_path) |p| { try argv.appendSlice(&[_][]const u8{ "-MD", "-MV", "-MF", p }); } -- cgit v1.2.3