diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2021-06-09 09:52:15 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-09 09:52:15 +0200 |
| commit | a6ae5a77dac6466617cdf57357aa79c2b79403b3 (patch) | |
| tree | 1e22f27275c7c6ee6928ddd3a7c90f4b66d12ee6 /src | |
| parent | 2d43db1d767ec56183cd7cf3ee8c5fd929548beb (diff) | |
| parent | 2ee1f7898b27447bb9b21d284842415c7459db4b (diff) | |
| download | zig-a6ae5a77dac6466617cdf57357aa79c2b79403b3.tar.gz zig-a6ae5a77dac6466617cdf57357aa79c2b79403b3.zip | |
Merge pull request #8992 from ziglang/cc-wasm32-wasi-emulations
cc,wasi: include emulated libs in WASI libc and refactor WASI libc handling
Diffstat (limited to 'src')
| -rw-r--r-- | src/Compilation.zig | 43 | ||||
| -rw-r--r-- | src/link.zig | 2 | ||||
| -rw-r--r-- | src/link/Wasm.zig | 48 | ||||
| -rw-r--r-- | src/main.zig | 12 | ||||
| -rw-r--r-- | src/wasi_libc.zig | 450 |
5 files changed, 369 insertions, 186 deletions
diff --git a/src/Compilation.zig b/src/Compilation.zig index 4c015cb58f..371bcdaf18 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -203,8 +203,8 @@ const Job = union(enum) { /// needed when not linking libc and using LLVM for code generation because it generates /// calls to, for example, memcpy and memset. zig_libc: void, - /// WASI libc sysroot - wasi_libc_sysroot: void, + /// one of WASI libc static objects + wasi_libc_crt_file: wasi_libc.CRTFile, /// Use stage1 C++ code to compile zig code into an object file. stage1_module: void, @@ -279,7 +279,7 @@ pub const MiscTask = enum { libcxx, libcxxabi, libtsan, - wasi_libc_sysroot, + wasi_libc_crt_file, compiler_rt, libssp, zig_libc, @@ -646,6 +646,12 @@ pub const InitOptions = struct { framework_dirs: []const []const u8 = &[0][]const u8{}, frameworks: []const []const u8 = &[0][]const u8{}, system_libs: []const []const u8 = &[0][]const u8{}, + /// These correspond to the WASI libc emulated subcomponents including: + /// * process clocks + /// * getpid + /// * mman + /// * signal + wasi_emulated_libs: []const wasi_libc.CRTFile = &[0]wasi_libc.CRTFile{}, link_libc: bool = false, link_libcpp: bool = false, link_libunwind: bool = false, @@ -1286,6 +1292,7 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation { .framework_dirs = options.framework_dirs, .system_libs = system_libs, .syslibroot = darwin_options.syslibroot, + .wasi_emulated_libs = options.wasi_emulated_libs, .lib_dirs = options.lib_dirs, .rpath_list = options.rpath_list, .strip = strip, @@ -1426,8 +1433,19 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation { }, }); } - if (comp.wantBuildWasiLibcSysrootFromSource()) { - try comp.work_queue.write(&[_]Job{.{ .wasi_libc_sysroot = {} }}); + if (comp.wantBuildWasiLibcFromSource()) { + const wasi_emulated_libs = comp.bin_file.options.wasi_emulated_libs; + try comp.work_queue.ensureUnusedCapacity(wasi_emulated_libs.len + 2); // worst-case we need all components + for (wasi_emulated_libs) |crt_file| { + comp.work_queue.writeItemAssumeCapacity(.{ + .wasi_libc_crt_file = crt_file, + }); + } + // TODO add logic deciding which crt1 we want here. + comp.work_queue.writeAssumeCapacity(&[_]Job{ + .{ .wasi_libc_crt_file = .crt1_o }, + .{ .wasi_libc_crt_file = .libc_a }, + }); } if (comp.wantBuildMinGWFromSource()) { const static_lib_jobs = [_]Job{ @@ -2169,12 +2187,12 @@ pub fn performAllTheWork(self: *Compilation) error{ TimerUnsupported, OutOfMemor ); }; }, - .wasi_libc_sysroot => { - wasi_libc.buildWasiLibcSysroot(self) catch |err| { + .wasi_libc_crt_file => |crt_file| { + wasi_libc.buildCRTFile(self, crt_file) catch |err| { // TODO Surface more error details. try self.setMiscFailure( - .wasi_libc_sysroot, - "unable to build WASI libc sysroot: {s}", + .wasi_libc_crt_file, + "unable to build WASI libc CRT file: {s}", .{@errorName(err)}, ); }; @@ -3303,7 +3321,7 @@ pub fn get_libc_crt_file(comp: *Compilation, arena: *Allocator, basename: []cons if (comp.wantBuildGLibCFromSource() or comp.wantBuildMuslFromSource() or comp.wantBuildMinGWFromSource() or - comp.wantBuildWasiLibcSysrootFromSource()) + comp.wantBuildWasiLibcFromSource()) { return comp.crt_files.get(basename).?.full_object_path; } @@ -3343,8 +3361,9 @@ fn wantBuildMuslFromSource(comp: Compilation) bool { !comp.getTarget().isWasm(); } -fn wantBuildWasiLibcSysrootFromSource(comp: Compilation) bool { - return comp.wantBuildLibCFromSource() and comp.getTarget().isWasm(); +fn wantBuildWasiLibcFromSource(comp: Compilation) bool { + return comp.wantBuildLibCFromSource() and comp.getTarget().isWasm() and + comp.getTarget().os.tag == .wasi; } fn wantBuildMinGWFromSource(comp: Compilation) bool { diff --git a/src/link.zig b/src/link.zig index fcb263f03e..4072e90ca3 100644 --- a/src/link.zig +++ b/src/link.zig @@ -13,6 +13,7 @@ const Type = @import("type.zig").Type; const Cache = @import("Cache.zig"); const build_options = @import("build_options"); const LibCInstallation = @import("libc_installation.zig").LibCInstallation; +const wasi_libc = @import("wasi_libc.zig"); pub const producer_string = if (std.builtin.is_test) "zig test" else "zig " ++ build_options.version; @@ -110,6 +111,7 @@ pub const Options = struct { framework_dirs: []const []const u8, frameworks: []const []const u8, system_libs: std.StringArrayHashMapUnmanaged(void), + wasi_emulated_libs: []const wasi_libc.CRTFile, lib_dirs: []const []const u8, rpath_list: []const []const u8, diff --git a/src/link/Wasm.zig b/src/link/Wasm.zig index 77283384be..21bb9d826c 100644 --- a/src/link/Wasm.zig +++ b/src/link/Wasm.zig @@ -15,6 +15,7 @@ const codegen = @import("../codegen/wasm.zig"); const link = @import("../link.zig"); const trace = @import("../tracy.zig").trace; const build_options = @import("build_options"); +const wasi_libc = @import("../wasi_libc.zig"); const Cache = @import("../Cache.zig"); const TypedValue = @import("../TypedValue.zig"); @@ -574,7 +575,6 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void { null; const target = self.base.options.target; - const link_in_crt = self.base.options.link_libc and self.base.options.output_mode == .Exe; const id_symlink_basename = "lld.id"; @@ -653,8 +653,6 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void { try fs.cwd().copyFile(the_object_path, fs.cwd(), full_out_path, .{}); } } else { - const is_obj = self.base.options.output_mode == .Obj; - // Create an LLD command line and invoke it. var argv = std.ArrayList([]const u8).init(self.base.allocator); defer argv.deinit(); @@ -662,10 +660,6 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void { // This is necessary because LLD does not behave properly as a library - // it calls exit() and does not reset all global data between invocations. try argv.appendSlice(&[_][]const u8{ comp.self_exe_path.?, "wasm-ld" }); - if (is_obj) { - try argv.append("-r"); - } - try argv.append("-error-limit=0"); if (self.base.options.lto) { @@ -697,16 +691,38 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void { full_out_path, }); - if (link_in_crt) { - // TODO work out if we want standard crt, a reactor or a command - try argv.append(try comp.get_libc_crt_file(arena, "crt.o")); - } + if (target.os.tag == .wasi) { + if (self.base.options.link_libc and self.base.options.output_mode == .Exe) { + // TODO work out if we want standard crt, a reactor or a command + try argv.append(try comp.get_libc_crt_file(arena, "crt1.o")); + } + + const is_exe_or_dyn_lib = self.base.options.output_mode == .Exe or + (self.base.options.output_mode == .Lib and self.base.options.link_mode == .Dynamic); + if (is_exe_or_dyn_lib) { + const system_libs = self.base.options.system_libs.keys(); - if (!is_obj and self.base.options.link_libc) { - try argv.append(try comp.get_libc_crt_file(arena, switch (self.base.options.link_mode) { - .Static => "libc.a", - .Dynamic => unreachable, - })); + for (system_libs) |link_lib| { + if (mem.eql(u8, "wasi_snapshot_preview1", link_lib)) { + // Any referenced symbol from this lib, will be undefined until + // runtime as this lib is provided directly by the runtime. + continue; + } + try argv.append(try std.fmt.allocPrint(arena, "-l{s}", .{link_lib})); + } + + const wasi_emulated_libs = self.base.options.wasi_emulated_libs; + for (wasi_emulated_libs) |crt_file| { + try argv.append(try comp.get_libc_crt_file( + arena, + wasi_libc.emulatedLibCRFileLibName(crt_file), + )); + } + + if (self.base.options.link_libc) { + try argv.append(try comp.get_libc_crt_file(arena, "libc.a")); + } + } } // Positional arguments to the linker such as object files. diff --git a/src/main.zig b/src/main.zig index 9245f5fd8a..0b93f97726 100644 --- a/src/main.zig +++ b/src/main.zig @@ -15,6 +15,7 @@ const Package = @import("Package.zig"); const build_options = @import("build_options"); const introspect = @import("introspect.zig"); const LibCInstallation = @import("libc_installation.zig").LibCInstallation; +const wasi_libc = @import("wasi_libc.zig"); const translate_c = @import("translate_c.zig"); const Cache = @import("Cache.zig"); const target_util = @import("target.zig"); @@ -616,6 +617,9 @@ fn buildOutputType( var system_libs = std.ArrayList([]const u8).init(gpa); defer system_libs.deinit(); + var wasi_emulated_libs = std.ArrayList(wasi_libc.CRTFile).init(gpa); + defer wasi_emulated_libs.deinit(); + var clang_argv = std.ArrayList([]const u8).init(gpa); defer clang_argv.deinit(); @@ -1586,6 +1590,13 @@ fn buildOutputType( if (std.fs.path.isAbsolute(lib_name)) { fatal("cannot use absolute path as a system library: {s}", .{lib_name}); } + if (target_info.target.os.tag == .wasi) { + if (wasi_libc.getEmulatedLibCRTFile(lib_name)) |crt_file| { + try wasi_emulated_libs.append(crt_file); + _ = system_libs.orderedRemove(i); + continue; + } + } i += 1; } } @@ -1895,6 +1906,7 @@ fn buildOutputType( .framework_dirs = framework_dirs.items, .frameworks = frameworks.items, .system_libs = system_libs.items, + .wasi_emulated_libs = wasi_emulated_libs.items, .link_libc = link_libc, .link_libcpp = link_libcpp, .link_libunwind = link_libunwind, diff --git a/src/wasi_libc.zig b/src/wasi_libc.zig index 3c04203082..b61ba5091c 100644 --- a/src/wasi_libc.zig +++ b/src/wasi_libc.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const mem = std.mem; const path = std.fs.path; const Allocator = std.mem.Allocator; @@ -7,7 +8,44 @@ const build_options = @import("build_options"); const target_util = @import("target.zig"); const musl = @import("musl.zig"); -pub fn buildWasiLibcSysroot(comp: *Compilation) !void { +pub const CRTFile = enum { + crt1_o, + crt1_reactor_o, + crt1_command_o, + libc_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, "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) { + .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 buildCRTFile(comp: *Compilation, crt_file: CRTFile) !void { if (!build_options.have_llvm) { return error.ZigCompilerNotBuiltWithLLVMExtensions; } @@ -17,190 +55,190 @@ pub fn buildWasiLibcSysroot(comp: *Compilation) !void { defer arena_allocator.deinit(); const arena = &arena_allocator.allocator; - { - // Compile crt sources. - var args = std.ArrayList([]const u8).init(arena); - try addCCArgs(comp, arena, &args, false); - try args.appendSlice(&[_][]const u8{ - "-I", - try comp.zig_lib_directory.join(arena, &[_][]const u8{ - "libc", - "wasi", - "libc-bottom-half", - "headers", - "private", - }), + switch (crt_file) { + .crt1_o => { + var args = std.ArrayList([]const u8).init(arena); + try addCCArgs(comp, arena, &args, false); + try addLibcBottomHalfIncludes(comp, arena, &args); + return comp.build_crt_file("crt1", .Obj, &[1]Compilation.CSourceFile{ + .{ + .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", try sanitize(arena, crt1_src_file), + }), + .extra_flags = args.items, + }, + }); + }, + .crt1_reactor_o => { + var args = std.ArrayList([]const u8).init(arena); + try addCCArgs(comp, arena, &args, false); + try addLibcBottomHalfIncludes(comp, arena, &args); + return comp.build_crt_file("crt1-reactor", .Obj, &[1]Compilation.CSourceFile{ + .{ + .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", try sanitize(arena, crt1_reactor_src_file), + }), + .extra_flags = args.items, + }, + }); + }, + .crt1_command_o => { + var args = std.ArrayList([]const u8).init(arena); + try addCCArgs(comp, arena, &args, false); + try addLibcBottomHalfIncludes(comp, arena, &args); + return comp.build_crt_file("crt1-command", .Obj, &[1]Compilation.CSourceFile{ + .{ + .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", try sanitize(arena, crt1_command_src_file), + }), + .extra_flags = args.items, + }, + }); + }, + .libc_a => { + var libc_sources = std.ArrayList(Compilation.CSourceFile).init(arena); + + { + // Compile dlmalloc. + var args = std.ArrayList([]const u8).init(arena); + try addCCArgs(comp, arena, &args, true); + try args.appendSlice(&[_][]const u8{ + "-I", + try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", + "wasi", + "dlmalloc", + "include", + }), + }); - "-I", - try comp.zig_lib_directory.join(arena, &[_][]const u8{ - "libc", - "wasi", - "libc-bottom-half", - "cloudlibc", - "src", - "include", - }), + for (dlmalloc_src_files) |file_path| { + try libc_sources.append(.{ + .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", try sanitize(arena, file_path), + }), + .extra_flags = args.items, + }); + } + } - "-I", - try comp.zig_lib_directory.join(arena, &[_][]const u8{ - "libc", - "wasi", - "libc-bottom-half", - "cloudlibc", - "src", - }), - }); + { + // Compile libc-bottom-half. + var args = std.ArrayList([]const u8).init(arena); + try addCCArgs(comp, arena, &args, true); + try addLibcBottomHalfIncludes(comp, arena, &args); - var comp_sources = std.ArrayList(Compilation.CSourceFile).init(arena); - for (crt_src_files) |file_path| { - try comp_sources.append(.{ - .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ - "libc", try sanitize(arena, file_path), - }), - .extra_flags = args.items, - }); - } - try comp.build_crt_file("crt", .Obj, comp_sources.items); - } + for (libc_bottom_half_src_files) |file_path| { + try libc_sources.append(.{ + .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", try sanitize(arena, file_path), + }), + .extra_flags = args.items, + }); + } + } - { - // Compile WASI libc (sysroot). - var comp_sources = std.ArrayList(Compilation.CSourceFile).init(arena); + { + // Compile libc-top-half. + var args = std.ArrayList([]const u8).init(arena); + try addCCArgs(comp, arena, &args, true); + try addLibcTopHalfIncludes(comp, arena, &args); + + for (libc_top_half_src_files) |file_path| { + try libc_sources.append(.{ + .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", try sanitize(arena, file_path), + }), + .extra_flags = args.items, + }); + } + } - { - // Compile dlmalloc. + try comp.build_crt_file("c", .Lib, libc_sources.items); + }, + .libwasi_emulated_process_clocks_a => { var args = std.ArrayList([]const u8).init(arena); try addCCArgs(comp, arena, &args, true); - try args.appendSlice(&[_][]const u8{ - "-I", - try comp.zig_lib_directory.join(arena, &[_][]const u8{ - "libc", - "wasi", - "dlmalloc", - "include", - }), - }); + try addLibcBottomHalfIncludes(comp, arena, &args); - for (dlmalloc_src_files) |file_path| { - try comp_sources.append(.{ + 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.zig_lib_directory.join(arena, &[_][]const u8{ "libc", try sanitize(arena, file_path), }), .extra_flags = args.items, }); } - } - - { - // Compile libc-bottom-half. + try comp.build_crt_file("wasi-emulated-process-clocks", .Lib, emu_clocks_sources.items); + }, + .libwasi_emulated_getpid_a => { var args = std.ArrayList([]const u8).init(arena); try addCCArgs(comp, arena, &args, true); - try args.appendSlice(&[_][]const u8{ - "-I", - try comp.zig_lib_directory.join(arena, &[_][]const u8{ - "libc", - "wasi", - "libc-bottom-half", - "headers", - "private", - }), - - "-I", - try comp.zig_lib_directory.join(arena, &[_][]const u8{ - "libc", - "wasi", - "libc-bottom-half", - "cloudlibc", - "src", - }), - - "-I", - try comp.zig_lib_directory.join(arena, &[_][]const u8{ - "libc", - "wasi", - "libc-bottom-half", - "cloudlibc", - "src", - "include", - }), - }); + try addLibcBottomHalfIncludes(comp, arena, &args); - for (libc_bottom_half_src_files) |file_path| { - try comp_sources.append(.{ + 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.zig_lib_directory.join(arena, &[_][]const u8{ "libc", try sanitize(arena, file_path), }), .extra_flags = args.items, }); } - } - - { - // Compile libc-top-half. + try comp.build_crt_file("wasi-emulated-getpid", .Lib, emu_getpid_sources.items); + }, + .libwasi_emulated_mman_a => { var args = std.ArrayList([]const u8).init(arena); try addCCArgs(comp, arena, &args, true); - try args.appendSlice(&[_][]const u8{ - "-I", - try comp.zig_lib_directory.join(arena, &[_][]const u8{ - "libc", - "wasi", - "libc-top-half", - "musl", - "src", - "include", - }), - - "-I", - try comp.zig_lib_directory.join(arena, &[_][]const u8{ - "libc", - "wasi", - "libc-top-half", - "musl", - "src", - "internal", - }), - - "-I", - try comp.zig_lib_directory.join(arena, &[_][]const u8{ - "libc", - "wasi", - "libc-top-half", - "musl", - "arch", - "wasm32", - }), + try addLibcBottomHalfIncludes(comp, arena, &args); - "-I", - try comp.zig_lib_directory.join(arena, &[_][]const u8{ - "libc", - "wasi", - "libc-top-half", - "musl", - "arch", - "generic", - }), - - "-I", - try comp.zig_lib_directory.join(arena, &[_][]const u8{ - "libc", - "wasi", - "libc-top-half", - "headers", - "private", - }), - }); - - for (libc_top_half_src_files) |file_path| { - try comp_sources.append(.{ + 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.zig_lib_directory.join(arena, &[_][]const u8{ "libc", try sanitize(arena, file_path), }), .extra_flags = args.items, }); } - } + try comp.build_crt_file("wasi-emulated-mman", .Lib, emu_mman_sources.items); + }, + .libwasi_emulated_signal_a => { + var emu_signal_sources = std.ArrayList(Compilation.CSourceFile).init(arena); + + { + var args = std.ArrayList([]const u8).init(arena); + try addCCArgs(comp, arena, &args, true); - try comp.build_crt_file("c", .Lib, comp_sources.items); + for (emulated_signal_bottom_half_src_files) |file_path| { + try emu_signal_sources.append(.{ + .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", try sanitize(arena, file_path), + }), + .extra_flags = args.items, + }); + } + } + + { + var args = std.ArrayList([]const u8).init(arena); + try addCCArgs(comp, arena, &args, true); + try addLibcTopHalfIncludes(comp, arena, &args); + try args.append("-D_WASI_EMULATED_SIGNAL"); + + for (emulated_signal_top_half_src_files) |file_path| { + try emu_signal_sources.append(.{ + .src_path = try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", try sanitize(arena, file_path), + }), + .extra_flags = args.items, + }); + } + } + + try comp.build_crt_file("wasi-emulated-signal", .Lib, emu_signal_sources.items); + }, } } @@ -251,6 +289,99 @@ fn addCCArgs( }); } +fn addLibcBottomHalfIncludes( + comp: *Compilation, + arena: *Allocator, + args: *std.ArrayList([]const u8), +) error{OutOfMemory}!void { + try args.appendSlice(&[_][]const u8{ + "-I", + try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", + "wasi", + "libc-bottom-half", + "headers", + "private", + }), + + "-I", + try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", + "wasi", + "libc-bottom-half", + "cloudlibc", + "src", + "include", + }), + + "-I", + try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", + "wasi", + "libc-bottom-half", + "cloudlibc", + "src", + }), + }); +} + +fn addLibcTopHalfIncludes( + comp: *Compilation, + arena: *Allocator, + args: *std.ArrayList([]const u8), +) error{OutOfMemory}!void { + try args.appendSlice(&[_][]const u8{ + "-I", + try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", + "wasi", + "libc-top-half", + "musl", + "src", + "include", + }), + + "-I", + try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", + "wasi", + "libc-top-half", + "musl", + "src", + "internal", + }), + + "-I", + try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", + "wasi", + "libc-top-half", + "musl", + "arch", + "wasm32", + }), + + "-I", + try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", + "wasi", + "libc-top-half", + "musl", + "arch", + "generic", + }), + + "-I", + try comp.zig_lib_directory.join(arena, &[_][]const u8{ + "libc", + "wasi", + "libc-top-half", + "headers", + "private", + }), + }); +} + const dlmalloc_src_files = [_][]const u8{ "wasi/dlmalloc/src/dlmalloc.c", }; @@ -1005,11 +1136,9 @@ const libc_top_half_src_files = [_][]const u8{ "wasi/libc-top-half/sources/arc4random.c", }; -const crt_src_files = &[_][]const u8{ - "wasi/libc-bottom-half/crt/crt1.c", - "wasi/libc-bottom-half/crt/crt1-command.c", - "wasi/libc-bottom-half/crt/crt1-reactor.c", -}; +const crt1_src_file = "wasi/libc-bottom-half/crt/crt1.c"; +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_process_clocks_src_files = &[_][]const u8{ "wasi/libc-bottom-half/clocks/clock.c", @@ -1025,6 +1154,11 @@ const emulated_mman_src_files = &[_][]const u8{ "wasi/libc-bottom-half/mman/mman.c", }; -const emulated_signal_src_files = &[_][]const u8{ +const emulated_signal_bottom_half_src_files = &[_][]const u8{ "wasi/libc-bottom-half/signal/signal.c", }; + +const emulated_signal_top_half_src_files = &[_][]const u8{ + "wasi/libc-top-half/musl/src/signal/psignal.c", + "wasi/libc-top-half/musl/src/string/strsignal.c", +}; |
