diff --git a/lib/compiler/aro/aro/target.zig b/lib/compiler/aro/aro/target.zig index bea982daa2d3017b601ac65246eb35f6b8986760..1f5262445ab444340b9ca6cb4e63d33cd8041b6d 100644 --- a/lib/compiler/aro/aro/target.zig +++ b/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", diff --git a/lib/std/Target.zig b/lib/std/Target.zig index a364ef88b66851ce30a215ee5104d754ba202964..60da0e529118948e3a55082bc6d7ef1fbf5e3e33 100644 --- a/lib/std/Target.zig +++ b/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, diff --git a/lib/std/zig/LibCDirs.zig b/lib/std/zig/LibCDirs.zig index cda21fbb3730b9e3780e9a26f18da80021f8c0ae..7efc1d73419b5236c5979da07e1c590fe8d5e394 100644 --- a/lib/std/zig/LibCDirs.zig +++ b/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, diff --git a/lib/std/zig/target.zig b/lib/std/zig/target.zig index ee462889036c795f659a7eadd8494922cab75148..a08ce22388767c5f9169afeb9d6c3d59ce71009d 100644 --- a/lib/std/zig/target.zig +++ b/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" }, diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 555cac0fa1ddd2ee8c2400e30006636970e76a52..951af2edc17ceb6cfd7d7c469ec49181ff06014f 100644 --- a/src/codegen/llvm.zig +++ b/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", diff --git a/src/target.zig b/src/target.zig index 7ad62ea242b70e1c6fa3f7c1e8292c093dbfb816..287b1f6c06a3f4e02eb105f15384e3ae0878d4e5 100644 --- a/src/target.zig +++ b/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) { diff --git a/test/llvm_targets.zig b/test/llvm_targets.zig index eed8178fe41c41daadabb4510cc6149827df7f5b..2271d1471b6e1c1623c1aa2f35fcf534ea78e1c9 100644 --- a/test/llvm_targets.zig +++ b/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 },