| ... | @@ -10,6 +10,7 @@ pub const CrtFile = enum { | ... | @@ -10,6 +10,7 @@ pub const CrtFile = enum { |
| 10 | crt1_reactor_o, | 10 | crt1_reactor_o, |
| 11 | crt1_command_o, | 11 | crt1_command_o, |
| 12 | libc_a, | 12 | libc_a, |
| | 13 | libdl_a, |
| 13 | libwasi_emulated_process_clocks_a, | 14 | libwasi_emulated_process_clocks_a, |
| 14 | libwasi_emulated_getpid_a, | 15 | libwasi_emulated_getpid_a, |
| 15 | libwasi_emulated_mman_a, | 16 | libwasi_emulated_mman_a, |
| ... | @@ -17,6 +18,9 @@ pub const CrtFile = enum { | ... | @@ -17,6 +18,9 @@ pub const CrtFile = enum { |
| 17 | }; | 18 | }; |
| 18 | | 19 | |
| 19 | pub fn getEmulatedLibCrtFile(lib_name: []const u8) ?CrtFile { | 20 | pub fn getEmulatedLibCrtFile(lib_name: []const u8) ?CrtFile { |
| | 21 | if (mem.eql(u8, lib_name, "dl")) { |
| | 22 | return .libdl_a; |
| | 23 | } |
| 20 | if (mem.eql(u8, lib_name, "wasi-emulated-process-clocks")) { | 24 | if (mem.eql(u8, lib_name, "wasi-emulated-process-clocks")) { |
| 21 | return .libwasi_emulated_process_clocks_a; | 25 | return .libwasi_emulated_process_clocks_a; |
| 22 | } | 26 | } |
| ... | @@ -34,6 +38,7 @@ pub fn getEmulatedLibCrtFile(lib_name: []const u8) ?CrtFile { | ... | @@ -34,6 +38,7 @@ pub fn getEmulatedLibCrtFile(lib_name: []const u8) ?CrtFile { |
| 34 | | 38 | |
| 35 | pub fn emulatedLibCRFileLibName(crt_file: CrtFile) []const u8 { | 39 | pub fn emulatedLibCRFileLibName(crt_file: CrtFile) []const u8 { |
| 36 | return switch (crt_file) { | 40 | return switch (crt_file) { |
| | 41 | .libdl_a => "libdl.a", |
| 37 | .libwasi_emulated_process_clocks_a => "libwasi-emulated-process-clocks.a", | 42 | .libwasi_emulated_process_clocks_a => "libwasi-emulated-process-clocks.a", |
| 38 | .libwasi_emulated_getpid_a => "libwasi-emulated-getpid.a", | 43 | .libwasi_emulated_getpid_a => "libwasi-emulated-getpid.a", |
| 39 | .libwasi_emulated_mman_a => "libwasi-emulated-mman.a", | 44 | .libwasi_emulated_mman_a => "libwasi-emulated-mman.a", |
| ... | @@ -154,6 +159,25 @@ pub fn buildCrtFile(comp: *Compilation, crt_file: CrtFile, prog_node: std.Progre | ... | @@ -154,6 +159,25 @@ pub fn buildCrtFile(comp: *Compilation, crt_file: CrtFile, prog_node: std.Progre |
| 154 | | 159 | |
| 155 | try comp.build_crt_file("c", .Lib, .@"wasi libc.a", prog_node, libc_sources.items, .{}); | 160 | try comp.build_crt_file("c", .Lib, .@"wasi libc.a", prog_node, libc_sources.items, .{}); |
| 156 | }, | 161 | }, |
| | 162 | |
| | 163 | .libdl_a => { |
| | 164 | var args = std.ArrayList([]const u8).init(arena); |
| | 165 | try addCCArgs(comp, arena, &args, .{ .want_O3 = true }); |
| | 166 | try addLibcBottomHalfIncludes(comp, arena, &args); |
| | 167 | |
| | 168 | var emu_dl_sources = std.ArrayList(Compilation.CSourceFile).init(arena); |
| | 169 | for (emulated_dl_src_files) |file_path| { |
| | 170 | try emu_dl_sources.append(.{ |
| | 171 | .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ |
| | 172 | "libc", try sanitize(arena, file_path), |
| | 173 | }), |
| | 174 | .extra_flags = args.items, |
| | 175 | .owner = undefined, |
| | 176 | }); |
| | 177 | } |
| | 178 | try comp.build_crt_file("dl", .Lib, .@"wasi libdl.a", prog_node, emu_dl_sources.items, .{}); |
| | 179 | }, |
| | 180 | |
| 157 | .libwasi_emulated_process_clocks_a => { | 181 | .libwasi_emulated_process_clocks_a => { |
| 158 | var args = std.ArrayList([]const u8).init(arena); | 182 | var args = std.ArrayList([]const u8).init(arena); |
| 159 | try addCCArgs(comp, arena, &args, .{ .want_O3 = true }); | 183 | try addCCArgs(comp, arena, &args, .{ .want_O3 = true }); |
| ... | @@ -1173,6 +1197,10 @@ const libc_top_half_src_files = [_][]const u8{ | ... | @@ -1173,6 +1197,10 @@ const libc_top_half_src_files = [_][]const u8{ |
| 1173 | const crt1_command_src_file = "wasi/libc-bottom-half/crt/crt1-command.c"; | 1197 | const crt1_command_src_file = "wasi/libc-bottom-half/crt/crt1-command.c"; |
| 1174 | const crt1_reactor_src_file = "wasi/libc-bottom-half/crt/crt1-reactor.c"; | 1198 | const crt1_reactor_src_file = "wasi/libc-bottom-half/crt/crt1-reactor.c"; |
| 1175 | | 1199 | |
| | 1200 | const emulated_dl_src_files = &[_][]const u8{ |
| | 1201 | "wasi/libc-top-half/musl/src/misc/dl.c", |
| | 1202 | }; |
| | 1203 | |
| 1176 | const emulated_process_clocks_src_files = &[_][]const u8{ | 1204 | const emulated_process_clocks_src_files = &[_][]const u8{ |
| 1177 | "wasi/libc-bottom-half/clocks/clock.c", | 1205 | "wasi/libc-bottom-half/clocks/clock.c", |
| 1178 | "wasi/libc-bottom-half/clocks/getrusage.c", | 1206 | "wasi/libc-bottom-half/clocks/getrusage.c", |