aboutsummaryrefslogtreecommitdiff
path: root/src/Compilation.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/Compilation.zig')
-rw-r--r--src/Compilation.zig19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/Compilation.zig b/src/Compilation.zig
index 371bcdaf18..e90c635808 100644
--- a/src/Compilation.zig
+++ b/src/Compilation.zig
@@ -603,6 +603,11 @@ pub const ClangPreprocessorMode = enum {
stdout,
};
+pub const WasiExecModel = enum {
+ command,
+ reactor,
+};
+
pub const InitOptions = struct {
zig_lib_directory: Directory,
local_cache_directory: Directory,
@@ -725,6 +730,8 @@ pub const InitOptions = struct {
test_filter: ?[]const u8 = null,
test_name_prefix: ?[]const u8 = null,
subsystem: ?std.Target.SubSystem = null,
+ /// WASI-only. Type of WASI execution model ("command" or "reactor").
+ wasi_exec_model: ?WasiExecModel = null,
};
fn addPackageTableToCacheHash(
@@ -1340,6 +1347,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,
});
errdefer bin_file.destroy();
comp.* = .{
@@ -1441,9 +1449,14 @@ pub fn create(gpa: *Allocator, options: InitOptions) !*Compilation {
.wasi_libc_crt_file = crt_file,
});
}
- // TODO add logic deciding which crt1 we want here.
+ const crt_file: wasi_libc.CRTFile = if (comp.bin_file.options.wasi_exec_model) |exec_model| crt_file: {
+ switch (exec_model) {
+ .command => break :crt_file wasi_libc.CRTFile.crt1_command_o,
+ .reactor => break :crt_file wasi_libc.CRTFile.crt1_reactor_o,
+ }
+ } else .crt1_o;
comp.work_queue.writeAssumeCapacity(&[_]Job{
- .{ .wasi_libc_crt_file = .crt1_o },
+ .{ .wasi_libc_crt_file = crt_file },
.{ .wasi_libc_crt_file = .libc_a },
});
}
@@ -1868,7 +1881,7 @@ pub fn getAllErrorsAlloc(self: *Compilation) !AllErrors {
for (keys[1..]) |key, i| {
err_msg.notes[i] = .{
- .src_loc = key.nodeOffsetSrcLoc(values[i+1]),
+ .src_loc = key.nodeOffsetSrcLoc(values[i + 1]),
.msg = "also here",
};
}