diff options
| author | Luuk de Gram <luuk@degram.dev> | 2023-06-26 19:10:34 +0200 |
|---|---|---|
| committer | Luuk de Gram <luuk@degram.dev> | 2023-06-26 20:00:58 +0200 |
| commit | 87b8a0567b0f54415aeecd879d3f1a4e12014d22 (patch) | |
| tree | 77cea5728d61fd701009a40e6ac0c70ce282c69a /src/main.zig | |
| parent | e06ab1b0107e8a6a1720703a6df0f61f535b5e5a (diff) | |
| download | zig-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.zig | 27 |
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'", .{}); } } |
