Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 18 additions & 14 deletions lib/compiler/build_runner.zig
Original file line number Diff line number Diff line change
Expand Up @@ -340,9 +340,10 @@ pub fn main() !void {
}
}

if (webui_listen != null and watch) fatal(
\\the build system does not yet support combining '--webui' and '--watch'; consider omitting '--watch' in favour of the web UI "Rebuild" button
, .{});
if (webui_listen != null) {
if (watch) fatal("using '--webui' and '--watch' together is not yet supported; consider omitting '--watch' in favour of the web UI \"Rebuild\" button", .{});
if (builtin.single_threaded) fatal("'--webui' is not yet supported on single-threaded hosts", .{});
}

const stderr: std.fs.File = .stderr();
const ttyconf = get_tty_conf(color, stderr);
Expand Down Expand Up @@ -449,16 +450,19 @@ pub fn main() !void {
try run.thread_pool.init(thread_pool_options);
defer run.thread_pool.deinit();

run.web_server = if (webui_listen) |listen_address| .init(.{
.gpa = gpa,
.thread_pool = &run.thread_pool,
.graph = &graph,
.all_steps = run.step_stack.keys(),
.ttyconf = run.ttyconf,
.root_prog_node = main_progress_node,
.watch = watch,
.listen_address = listen_address,
}) else null;
run.web_server = if (webui_listen) |listen_address| ws: {
if (builtin.single_threaded) unreachable; // `fatal` above
break :ws .init(.{
.gpa = gpa,
.thread_pool = &run.thread_pool,
.graph = &graph,
.all_steps = run.step_stack.keys(),
.ttyconf = run.ttyconf,
.root_prog_node = main_progress_node,
.watch = watch,
.listen_address = listen_address,
});
} else null;

if (run.web_server) |*ws| {
ws.start() catch |err| fatal("failed to start web server: {s}", .{@errorName(err)});
Expand Down Expand Up @@ -562,7 +566,7 @@ const Run = struct {
max_rss_mutex: std.Thread.Mutex,
skip_oom_steps: bool,
watch: bool,
web_server: ?WebServer,
web_server: if (!builtin.single_threaded) ?WebServer else ?noreturn,
/// Allocated into `gpa`.
memory_blocked_steps: std.ArrayListUnmanaged(*Step),
/// Allocated into `gpa`.
Expand Down
8 changes: 3 additions & 5 deletions lib/std/Build/WebServer.zig
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,9 @@ pub const Options = struct {
listen_address: std.net.Address,
};
pub fn init(opts: Options) WebServer {
if (builtin.single_threaded) {
// The upcoming `std.Io` interface should allow us to use `Io.async` and `Io.concurrent`
// instead of threads, so that the web server can function in single-threaded builds.
std.process.fatal("--webui not yet implemented for single-threaded builds", .{});
}
// The upcoming `std.Io` interface should allow us to use `Io.async` and `Io.concurrent`
// instead of threads, so that the web server can function in single-threaded builds.
comptime assert(!builtin.single_threaded);

const all_steps = opts.all_steps;

Expand Down