diff options
Diffstat (limited to 'src/Compilation.zig')
| -rw-r--r-- | src/Compilation.zig | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/Compilation.zig b/src/Compilation.zig index 890100b996..4e6bede26b 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -724,7 +724,7 @@ pub const InitOptions = struct { test_name_prefix: ?[]const u8 = null, subsystem: ?std.Target.SubSystem = null, /// WASI-only. Type of WASI execution model ("command" or "reactor"). - wasi_exec_model: ?wasi_libc.CRTFile = null, + wasi_exec_model: ?std.builtin.WasiExecModel = null, }; fn addPackageTableToCacheHash( @@ -790,6 +790,9 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation { const needs_c_symbols = !options.skip_linker_dependencies and is_exe_or_dyn_lib; + // WASI-only. Resolve the optinal exec-model option, defaults to command. + const wasi_exec_model = if (options.target.os.tag != .wasi) undefined else options.wasi_exec_model orelse .command; + const comp: *Compilation = comp: { // For allocations that have the same lifetime as Compilation. This arena is used only during this // initialization and then is freed in deinit(). @@ -1340,7 +1343,7 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation { .disable_lld_caching = options.disable_lld_caching, .subsystem = options.subsystem, .is_test = options.is_test, - .wasi_exec_model = options.wasi_exec_model, + .wasi_exec_model = wasi_exec_model, }); errdefer bin_file.destroy(); comp.* = .{ @@ -1442,7 +1445,7 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation { }); } comp.work_queue.writeAssumeCapacity(&[_]Job{ - .{ .wasi_libc_crt_file = comp.bin_file.options.wasi_exec_model orelse .crt1_o }, + .{ .wasi_libc_crt_file = wasi_libc.execModelCrtFile(wasi_exec_model) }, .{ .wasi_libc_crt_file = .libc_a }, }); } @@ -3650,6 +3653,14 @@ pub fn generateBuiltinZigSource(comp: *Compilation, allocator: *Allocator) Alloc std.zig.fmtId(@tagName(comp.bin_file.options.machine_code_model)), }); + if (target.os.tag == .wasi) { + const wasi_exec_model_fmt = std.zig.fmtId(@tagName(comp.bin_file.options.wasi_exec_model)); + try buffer.writer().print( + \\pub const wasi_exec_model = std.builtin.WasiExecModel.{}; + \\ + , .{wasi_exec_model_fmt}); + } + if (comp.bin_file.options.is_test) { try buffer.appendSlice( \\pub var test_functions: []std.builtin.TestFn = undefined; // overwritten later |
