aboutsummaryrefslogtreecommitdiff
path: root/src/link/Elf.zig
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-05-05 07:23:28 +0200
committerAlex Rønne Petersen <alex@alexrp.com>2025-05-10 20:58:15 +0200
commitd3a6236eef400ff0f99c3fe7d85cfda1c687bb82 (patch)
tree2274b70e9e07a613f8e10d48022f8dc2e05bcc25 /src/link/Elf.zig
parent0e3609b8e05c12285786235636e9923deeea8c09 (diff)
downloadzig-d3a6236eef400ff0f99c3fe7d85cfda1c687bb82.tar.gz
zig-d3a6236eef400ff0f99c3fe7d85cfda1c687bb82.zip
compiler: Support building FreeBSD crt1.o/Scrt1.o and stub shared libraries.
Only works for FreeBSD 14+. Note that we still default to targeting FreeBSD 13. Contributes to #2876.
Diffstat (limited to 'src/link/Elf.zig')
-rw-r--r--src/link/Elf.zig12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index 987e1a9758..df91771ecf 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -2058,11 +2058,18 @@ fn linkWithLLD(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: s
try argv.append(lib_path);
}
try argv.append(try comp.crtFileAsString(arena, "libc_nonshared.a"));
- } else if (target.abi.isMusl()) {
+ } else if (target.isMuslLibC()) {
try argv.append(try comp.crtFileAsString(arena, switch (link_mode) {
.static => "libc.a",
.dynamic => "libc.so",
}));
+ } else if (target.isFreeBSDLibC()) {
+ for (freebsd.libs) |lib| {
+ const lib_path = try std.fmt.allocPrint(arena, "{}{c}lib{s}.so.{d}", .{
+ comp.freebsd_so_files.?.dir_path, fs.path.sep, lib.name, lib.sover,
+ });
+ try argv.append(lib_path);
+ }
} else {
diags.flags.missing_libc = true;
}
@@ -5280,8 +5287,9 @@ const dev = @import("../dev.zig");
const eh_frame = @import("Elf/eh_frame.zig");
const gc = @import("Elf/gc.zig");
const glibc = @import("../libs/glibc.zig");
-const link = @import("../link.zig");
const musl = @import("../libs/musl.zig");
+const freebsd = @import("../libs/freebsd.zig");
+const link = @import("../link.zig");
const relocatable = @import("Elf/relocatable.zig");
const relocation = @import("Elf/relocation.zig");
const target_util = @import("../target.zig");