diff options
| author | Frank Denis <github@pureftpd.org> | 2024-04-18 21:47:47 +0200 |
|---|---|---|
| committer | Alex Rønne Petersen <alex@alexrp.com> | 2025-01-29 12:48:56 +0100 |
| commit | e60072635eca3f3c983d92819aa67c0decc7d4a6 (patch) | |
| tree | be8950a91fecf0e879e8cc797d6a1c32a1c03781 /src | |
| parent | 8a8da49b5212030d603000d699a8ca9ed92e24cd (diff) | |
| download | zig-e60072635eca3f3c983d92819aa67c0decc7d4a6.tar.gz zig-e60072635eca3f3c983d92819aa67c0decc7d4a6.zip | |
Add libdl shims from wasi-libc
Diffstat (limited to 'src')
| -rw-r--r-- | src/Compilation.zig | 1 | ||||
| -rw-r--r-- | src/wasi_libc.zig | 28 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/Compilation.zig b/src/Compilation.zig index 1362b16cc9..8b12474422 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -806,6 +806,7 @@ pub const MiscTask = enum { @"wasi crt1-reactor.o", @"wasi crt1-command.o", @"wasi libc.a", + @"wasi libdl.a", @"libwasi-emulated-process-clocks.a", @"libwasi-emulated-getpid.a", @"libwasi-emulated-mman.a", diff --git a/src/wasi_libc.zig b/src/wasi_libc.zig index 97a435c26c..05ae41954a 100644 --- a/src/wasi_libc.zig +++ b/src/wasi_libc.zig @@ -10,6 +10,7 @@ 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, @@ -17,6 +18,9 @@ pub const CrtFile = enum { }; 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; } @@ -34,6 +38,7 @@ pub fn getEmulatedLibCrtFile(lib_name: []const u8) ?CrtFile { 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", @@ -154,6 +159,25 @@ 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); + + 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.zig_lib_directory.join(arena, &[_][]const u8{ + "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 }); @@ -1173,6 +1197,10 @@ const libc_top_half_src_files = [_][]const u8{ const crt1_command_src_file = "wasi/libc-bottom-half/crt/crt1-command.c"; const crt1_reactor_src_file = "wasi/libc-bottom-half/crt/crt1-reactor.c"; +const emulated_dl_src_files = &[_][]const u8{ + "wasi/libc-top-half/musl/src/misc/dl.c", +}; + const emulated_process_clocks_src_files = &[_][]const u8{ "wasi/libc-bottom-half/clocks/clock.c", "wasi/libc-bottom-half/clocks/getrusage.c", |
