diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2025-07-06 20:05:18 +0200 |
|---|---|---|
| committer | Alex Rønne Petersen <alex@alexrp.com> | 2025-07-06 20:05:18 +0200 |
| commit | 1f1082e36d3bf9cda4e61cae223e9903ae6fc4ce (patch) | |
| tree | 0a2e45cda56056abd36b299ccb5bb52763d7d73f /src/libs/wasi_libc.zig | |
| parent | b461d07a5464aec86c533434dab0b58edfffb331 (diff) | |
| download | zig-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.zig | 177 |
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, .{}); }, } } |
