Commit 8954e9748a

Alex Rønne Petersen <alex@alexrp.com>
2025-03-10 08:28:56
std.Target: Add Abi.muslf32 and Abi.muslsf.
1 parent 1599f8a
Changed files (7)
lib/compiler/aro/aro/target.zig
@@ -698,6 +698,8 @@ pub fn toLLVMTriple(target: std.Target, buf: []u8) []const u8 {
         .muslabi64 => "muslabi64",
         .musleabi => "musleabi",
         .musleabihf => "musleabihf",
+        .muslf32 => "muslf32",
+        .muslsf => "muslsf",
         .muslx32 => "muslx32",
         .msvc => "msvc",
         .itanium => "itanium",
lib/std/zig/LibCDirs.zig
@@ -236,6 +236,8 @@ fn libCGenericName(target: std.Target) [:0]const u8 {
         .muslabi64,
         .musleabi,
         .musleabihf,
+        .muslf32,
+        .muslsf,
         .muslx32,
         .none,
         .ohos,
lib/std/zig/target.zig
@@ -37,6 +37,7 @@ pub const available_libcs = [_]ArchOsAbi{
     .{ .arch = .loongarch64, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 5, .minor = 19, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 36, .patch = 0 }, .glibc_triple = "loongarch64-linux-gnu-lp64d" },
     .{ .arch = .loongarch64, .os = .linux, .abi = .gnusf, .os_ver = .{ .major = 5, .minor = 19, .patch = 0 }, .glibc_min = .{ .major = 2, .minor = 36, .patch = 0 }, .glibc_triple = "loongarch64-linux-gnu-lp64s" },
     .{ .arch = .loongarch64, .os = .linux, .abi = .musl, .os_ver = .{ .major = 5, .minor = 19, .patch = 0 } },
+    .{ .arch = .loongarch64, .os = .linux, .abi = .muslsf, .os_ver = .{ .major = 5, .minor = 19, .patch = 0 } },
     .{ .arch = .m68k, .os = .linux, .abi = .gnu, .os_ver = .{ .major = 1, .minor = 3, .patch = 94 } },
     .{ .arch = .m68k, .os = .linux, .abi = .musl, .os_ver = .{ .major = 1, .minor = 3, .patch = 94 } },
     .{ .arch = .mips, .os = .linux, .abi = .gnueabi, .os_ver = .{ .major = 1, .minor = 1, .patch = 82 }, .glibc_triple = "mips-linux-gnu-soft" },
lib/std/Target.zig
@@ -775,6 +775,8 @@ pub const Abi = enum {
     muslabi64,
     musleabi,
     musleabihf,
+    muslf32,
+    muslsf,
     muslx32,
     msvc,
     itanium,
@@ -949,6 +951,8 @@ pub const Abi = enum {
             .muslabi64,
             .musleabi,
             .musleabihf,
+            .muslf32,
+            .muslsf,
             .muslx32,
             => true,
             else => abi.isOpenHarmony(),
@@ -2251,9 +2255,20 @@ pub const DynamicLinker = struct {
                         },
                     }),
 
+                    .loongarch32,
+                    .loongarch64,
+                    => |arch| initFmt("/lib/ld-musl-{s}{s}.so.1", .{
+                        @tagName(arch),
+                        switch (abi) {
+                            .musl => "",
+                            .muslf32 => "-sp",
+                            .muslsf => "-sf",
+                            else => return none,
+                        },
+                    }),
+
                     .aarch64,
                     .aarch64_be,
-                    .loongarch64, // TODO: `-sp` and `-sf` ABI support in LLVM 20.
                     .m68k,
                     .powerpc64,
                     .powerpc64le,
src/codegen/llvm.zig
@@ -275,6 +275,8 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 {
         .muslabi64 => "musl", // Should be muslabi64 in LLVM 20.
         .musleabi => "musleabi",
         .musleabihf => "musleabihf",
+        .muslf32 => "muslf32",
+        .muslsf => "muslsf",
         .muslx32 => "muslx32",
         .msvc => "msvc",
         .itanium => "itanium",
src/target.zig
@@ -496,10 +496,9 @@ pub fn llvmMachineAbi(target: std.Target) ?[:0]const u8 {
 
     return switch (target.cpu.arch) {
         .arm, .armeb, .thumb, .thumbeb => "aapcs",
-        // TODO: `muslsf` and `muslf32` in LLVM 20.
         .loongarch64 => switch (target.abi) {
-            .gnusf => "lp64s",
-            .gnuf32 => "lp64f",
+            .gnusf, .muslsf => "lp64s",
+            .gnuf32, .muslf32 => "lp64f",
             else => "lp64d",
         },
         .loongarch32 => switch (target.abi) {
test/llvm_targets.zig
@@ -114,6 +114,8 @@ const targets = [_]std.Target.Query{
     // .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnuf32 },
     .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .gnusf },
     .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .musl },
+    // .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .muslf32 },
+    .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .muslsf },
     .{ .cpu_arch = .loongarch64, .os_tag = .linux, .abi = .none },
     // .{ .cpu_arch = .loongarch64, .os_tag = .uefi, .abi = .none },