aboutsummaryrefslogtreecommitdiff
path: root/src/libs/wasi_libc.zig
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-07-06 20:05:18 +0200
committerAlex Rønne Petersen <alex@alexrp.com>2025-07-06 20:05:18 +0200
commit1f1082e36d3bf9cda4e61cae223e9903ae6fc4ce (patch)
tree0a2e45cda56056abd36b299ccb5bb52763d7d73f /src/libs/wasi_libc.zig
parentb461d07a5464aec86c533434dab0b58edfffb331 (diff)
downloadzig-1f1082e36d3bf9cda4e61cae223e9903ae6fc4ce.tar.gz
zig-1f1082e36d3bf9cda4e61cae223e9903ae6fc4ce.zip
wasi: Build emulated libraries into libc.a
This matches what we do for small helper libraries like this in MinGW-w64. It simplifies the compiler a bit, and also means the build system doesn't have to treat these library names specially. Closes #24325.
Diffstat (limited to 'src/libs/wasi_libc.zig')
-rw-r--r--src/libs/wasi_libc.zig177
1 files changed, 67 insertions, 110 deletions
diff --git a/src/libs/wasi_libc.zig b/src/libs/wasi_libc.zig
index 1094a8e3cc..cf6347201a 100644
--- a/src/libs/wasi_libc.zig
+++ b/src/libs/wasi_libc.zig
@@ -10,43 +10,8 @@ pub const CrtFile = enum {
crt1_reactor_o,
crt1_command_o,
libc_a,
- libdl_a,
- libwasi_emulated_process_clocks_a,
- libwasi_emulated_getpid_a,
- libwasi_emulated_mman_a,
- libwasi_emulated_signal_a,
};
-pub fn getEmulatedLibCrtFile(lib_name: []const u8) ?CrtFile {
- if (mem.eql(u8, lib_name, "dl")) {
- return .libdl_a;
- }
- if (mem.eql(u8, lib_name, "wasi-emulated-process-clocks")) {
- return .libwasi_emulated_process_clocks_a;
- }
- if (mem.eql(u8, lib_name, "wasi-emulated-getpid")) {
- return .libwasi_emulated_getpid_a;
- }
- if (mem.eql(u8, lib_name, "wasi-emulated-mman")) {
- return .libwasi_emulated_mman_a;
- }
- if (mem.eql(u8, lib_name, "wasi-emulated-signal")) {
- return .libwasi_emulated_signal_a;
- }
- return null;
-}
-
-pub fn emulatedLibCRFileLibName(crt_file: CrtFile) []const u8 {
- return switch (crt_file) {
- .libdl_a => "libdl.a",
- .libwasi_emulated_process_clocks_a => "libwasi-emulated-process-clocks.a",
- .libwasi_emulated_getpid_a => "libwasi-emulated-getpid.a",
- .libwasi_emulated_mman_a => "libwasi-emulated-mman.a",
- .libwasi_emulated_signal_a => "libwasi-emulated-signal.a",
- else => unreachable,
- };
-}
-
pub fn execModelCrtFile(wasi_exec_model: std.builtin.WasiExecModel) CrtFile {
return switch (wasi_exec_model) {
.reactor => CrtFile.crt1_reactor_o,
@@ -157,87 +122,65 @@ pub fn buildCrtFile(comp: *Compilation, crt_file: CrtFile, prog_node: std.Progre
}
}
- try comp.build_crt_file("c", .Lib, .@"wasi libc.a", prog_node, libc_sources.items, .{});
- },
-
- .libdl_a => {
- var args = std.ArrayList([]const u8).init(arena);
- try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
- try addLibcBottomHalfIncludes(comp, arena, &args);
+ {
+ // Compile libdl.
+ var args = std.ArrayList([]const u8).init(arena);
+ try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
+ try addLibcBottomHalfIncludes(comp, arena, &args);
- var emu_dl_sources = std.ArrayList(Compilation.CSourceFile).init(arena);
- for (emulated_dl_src_files) |file_path| {
- try emu_dl_sources.append(.{
- .src_path = try comp.dirs.zig_lib.join(arena, &.{
- "libc", try sanitize(arena, file_path),
- }),
- .extra_flags = args.items,
- .owner = undefined,
- });
+ for (emulated_dl_src_files) |file_path| {
+ try libc_sources.append(.{
+ .src_path = try comp.dirs.zig_lib.join(arena, &.{
+ "libc", try sanitize(arena, file_path),
+ }),
+ .extra_flags = args.items,
+ .owner = undefined,
+ });
+ }
}
- try comp.build_crt_file("dl", .Lib, .@"wasi libdl.a", prog_node, emu_dl_sources.items, .{});
- },
- .libwasi_emulated_process_clocks_a => {
- var args = std.ArrayList([]const u8).init(arena);
- try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
- try addLibcBottomHalfIncludes(comp, arena, &args);
+ {
+ // Compile libwasi-emulated-process-clocks.
+ var args = std.ArrayList([]const u8).init(arena);
+ try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
+ try addLibcBottomHalfIncludes(comp, arena, &args);
- var emu_clocks_sources = std.ArrayList(Compilation.CSourceFile).init(arena);
- for (emulated_process_clocks_src_files) |file_path| {
- try emu_clocks_sources.append(.{
- .src_path = try comp.dirs.zig_lib.join(arena, &.{
- "libc", try sanitize(arena, file_path),
- }),
- .extra_flags = args.items,
- .owner = undefined,
- });
+ for (emulated_process_clocks_src_files) |file_path| {
+ try libc_sources.append(.{
+ .src_path = try comp.dirs.zig_lib.join(arena, &.{
+ "libc", try sanitize(arena, file_path),
+ }),
+ .extra_flags = args.items,
+ .owner = undefined,
+ });
+ }
}
- try comp.build_crt_file("wasi-emulated-process-clocks", .Lib, .@"libwasi-emulated-process-clocks.a", prog_node, emu_clocks_sources.items, .{});
- },
- .libwasi_emulated_getpid_a => {
- var args = std.ArrayList([]const u8).init(arena);
- try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
- try addLibcBottomHalfIncludes(comp, arena, &args);
- var emu_getpid_sources = std.ArrayList(Compilation.CSourceFile).init(arena);
- for (emulated_getpid_src_files) |file_path| {
- try emu_getpid_sources.append(.{
- .src_path = try comp.dirs.zig_lib.join(arena, &.{
- "libc", try sanitize(arena, file_path),
- }),
- .extra_flags = args.items,
- .owner = undefined,
- });
- }
- try comp.build_crt_file("wasi-emulated-getpid", .Lib, .@"libwasi-emulated-getpid.a", prog_node, emu_getpid_sources.items, .{});
- },
- .libwasi_emulated_mman_a => {
- var args = std.ArrayList([]const u8).init(arena);
- try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
- try addLibcBottomHalfIncludes(comp, arena, &args);
+ {
+ // Compile libwasi-emulated-getpid.
+ var args = std.ArrayList([]const u8).init(arena);
+ try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
+ try addLibcBottomHalfIncludes(comp, arena, &args);
- var emu_mman_sources = std.ArrayList(Compilation.CSourceFile).init(arena);
- for (emulated_mman_src_files) |file_path| {
- try emu_mman_sources.append(.{
- .src_path = try comp.dirs.zig_lib.join(arena, &.{
- "libc", try sanitize(arena, file_path),
- }),
- .extra_flags = args.items,
- .owner = undefined,
- });
+ for (emulated_getpid_src_files) |file_path| {
+ try libc_sources.append(.{
+ .src_path = try comp.dirs.zig_lib.join(arena, &.{
+ "libc", try sanitize(arena, file_path),
+ }),
+ .extra_flags = args.items,
+ .owner = undefined,
+ });
+ }
}
- try comp.build_crt_file("wasi-emulated-mman", .Lib, .@"libwasi-emulated-mman.a", prog_node, emu_mman_sources.items, .{});
- },
- .libwasi_emulated_signal_a => {
- var emu_signal_sources = std.ArrayList(Compilation.CSourceFile).init(arena);
{
+ // Compile libwasi-emulated-mman.
var args = std.ArrayList([]const u8).init(arena);
try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
+ try addLibcBottomHalfIncludes(comp, arena, &args);
- for (emulated_signal_bottom_half_src_files) |file_path| {
- try emu_signal_sources.append(.{
+ for (emulated_mman_src_files) |file_path| {
+ try libc_sources.append(.{
.src_path = try comp.dirs.zig_lib.join(arena, &.{
"libc", try sanitize(arena, file_path),
}),
@@ -248,23 +191,37 @@ pub fn buildCrtFile(comp: *Compilation, crt_file: CrtFile, prog_node: std.Progre
}
{
- var args = std.ArrayList([]const u8).init(arena);
- try addCCArgs(comp, arena, &args, .{ .want_O3 = true });
- try addLibcTopHalfIncludes(comp, arena, &args);
- try args.append("-D_WASI_EMULATED_SIGNAL");
+ // Compile libwasi-emulated-signal.
+ var bottom_args = std.ArrayList([]const u8).init(arena);
+ try addCCArgs(comp, arena, &bottom_args, .{ .want_O3 = true });
+
+ for (emulated_signal_bottom_half_src_files) |file_path| {
+ try libc_sources.append(.{
+ .src_path = try comp.dirs.zig_lib.join(arena, &.{
+ "libc", try sanitize(arena, file_path),
+ }),
+ .extra_flags = bottom_args.items,
+ .owner = undefined,
+ });
+ }
+
+ var top_args = std.ArrayList([]const u8).init(arena);
+ try addCCArgs(comp, arena, &top_args, .{ .want_O3 = true });
+ try addLibcTopHalfIncludes(comp, arena, &top_args);
+ try top_args.append("-D_WASI_EMULATED_SIGNAL");
for (emulated_signal_top_half_src_files) |file_path| {
- try emu_signal_sources.append(.{
+ try libc_sources.append(.{
.src_path = try comp.dirs.zig_lib.join(arena, &.{
"libc", try sanitize(arena, file_path),
}),
- .extra_flags = args.items,
+ .extra_flags = top_args.items,
.owner = undefined,
});
}
}
- try comp.build_crt_file("wasi-emulated-signal", .Lib, .@"libwasi-emulated-signal.a", prog_node, emu_signal_sources.items, .{});
+ try comp.build_crt_file("c", .Lib, .@"wasi libc.a", prog_node, libc_sources.items, .{});
},
}
}