aboutsummaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
authorLuuk de Gram <luuk@degram.dev>2023-06-26 19:10:34 +0200
committerLuuk de Gram <luuk@degram.dev>2023-06-26 20:00:58 +0200
commit87b8a0567b0f54415aeecd879d3f1a4e12014d22 (patch)
tree77cea5728d61fd701009a40e6ac0c70ce282c69a /src/main.zig
parente06ab1b0107e8a6a1720703a6df0f61f535b5e5a (diff)
downloadzig-87b8a0567b0f54415aeecd879d3f1a4e12014d22.tar.gz
zig-87b8a0567b0f54415aeecd879d3f1a4e12014d22.zip
default to single-threaded for WebAssembly
When targeting WebAssembly, we default to building a single-threaded build as threads are still experimental. The user however can enable a multi- threaded build by specifying '-fno-single-threaded'. It's a compile-error to enable this flag, but not also enable shared-memory.
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/main.zig b/src/main.zig
index 4726d3e308..1b4a93eb45 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -2428,15 +2428,28 @@ fn buildOutputType(
link_libcpp = true;
}
- if (target_info.target.cpu.arch.isWasm() and linker_shared_memory) {
- if (output_mode == .Obj) {
- fatal("shared memory is not allowed in object files", .{});
+ if (target_info.target.cpu.arch.isWasm()) blk: {
+ if (single_threaded == null) {
+ single_threaded = true;
}
+ if (linker_shared_memory) {
+ if (output_mode == .Obj) {
+ fatal("shared memory is not allowed in object files", .{});
+ }
- if (!target_info.target.cpu.features.isEnabled(@intFromEnum(std.Target.wasm.Feature.atomics)) or
- !target_info.target.cpu.features.isEnabled(@intFromEnum(std.Target.wasm.Feature.bulk_memory)))
- {
- fatal("'atomics' and 'bulk-memory' features must be enabled to use shared memory", .{});
+ if (!target_info.target.cpu.features.isEnabled(@intFromEnum(std.Target.wasm.Feature.atomics)) or
+ !target_info.target.cpu.features.isEnabled(@intFromEnum(std.Target.wasm.Feature.bulk_memory)))
+ {
+ fatal("'atomics' and 'bulk-memory' features must be enabled to use shared memory", .{});
+ }
+ break :blk;
+ }
+
+ // Single-threaded is the default for WebAssembly, so only when the user specified `-fno_single-threaded`
+ // can they enable multithreaded WebAssembly builds.
+ const is_single_threaded = single_threaded.?;
+ if (!is_single_threaded) {
+ fatal("'-fno-single-threaded' requires the linker feature shared-memory to be enabled using '--shared-memory'", .{});
}
}