build runner: fix single-threaded build

Resolves: #24723
This commit is contained in:
mlugg 2025-08-13 13:01:20 +01:00 committed by Matthew Lugg
parent 4f639ff880
commit e304a478c0
2 changed files with 21 additions and 19 deletions

View File

@ -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);
@ -449,7 +450,9 @@ 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(.{
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,
@ -458,7 +461,8 @@ pub fn main() !void {
.root_prog_node = main_progress_node,
.watch = watch,
.listen_address = listen_address,
}) else null;
});
} else null;
if (run.web_server) |*ws| {
ws.start() catch |err| fatal("failed to start web server: {s}", .{@errorName(err)});
@ -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`.

View File

@ -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", .{});
}
comptime assert(!builtin.single_threaded);
const all_steps = opts.all_steps;