| author | |
| committer | |
| log | b82d6422ac5c0a68b812319f689b66b52b0eaf59 |
| tree | 77d72cbf28a637f523ac27ccbc0a2499a75a501a |
| parent | e8e305b67ce4993a3789e0e3e8baa6064de45114 |
The only allowed system libraries that we can link are libraries
that are part of the sysroot such as libc or WASI emulated
subcomponents. This is required as Wasm allows to defer symbol
resolution until load time.
For example, the following import in Zig
```zig
extern "wasi_snapshot_preview1" fn proc_exit() void;
```
would normally result in appending `-lwasi_snapshot_preview1` flag
to the linker line. However, for Wasm/WASI, the symbol is provided
at load rather than link time, therefore, the linker should not be
concerned with resolving the symbol. As a result, we should not
consider system libs by the Wasm linker.1 files changed, 0 insertions(+), 11 deletions(-)
src/link/Wasm.zig-11| ... | ... | @@ -701,17 +701,6 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void { |
| 701 | 701 | const is_exe_or_dyn_lib = self.base.options.output_mode == .Exe or |
| 702 | 702 | (self.base.options.output_mode == .Lib and self.base.options.link_mode == .Dynamic); |
| 703 | 703 | if (is_exe_or_dyn_lib) { |
| 704 | const system_libs = self.base.options.system_libs.keys(); | |
| 705 | ||
| 706 | for (system_libs) |link_lib| { | |
| 707 | if (mem.eql(u8, "wasi_snapshot_preview1", link_lib)) { | |
| 708 | // Any referenced symbol from this lib, will be undefined until | |
| 709 | // runtime as this lib is provided directly by the runtime. | |
| 710 | continue; | |
| 711 | } | |
| 712 | try argv.append(try std.fmt.allocPrint(arena, "-l{s}", .{link_lib})); | |
| 713 | } | |
| 714 | ||
| 715 | 704 | const wasi_emulated_libs = self.base.options.wasi_emulated_libs; |
| 716 | 705 | for (wasi_emulated_libs) |crt_file| { |
| 717 | 706 | try argv.append(try comp.get_libc_crt_file( |