sylveos

Toy Operating System
Log | Files | Refs

commit 5c5f944979e33e81bfc9a60d0b50f88a63820ebc
parent 70afc5c707eaecefe3327b19d72fe099752671ad
Author: Sylvia Ivory <git@sivory.net>
Date:   Sat, 31 Jan 2026 10:36:17 -0800

Build all programs by default for ZLS

Diffstat:
Mbuild.zig | 52++++++++++++++++++++++++++++++++++++++++------------
1 file changed, 40 insertions(+), 12 deletions(-)

diff --git a/build.zig b/build.zig @@ -30,13 +30,21 @@ fn pi_module_opts(target: std.Build.ResolvedTarget, optimize: std.builtin.Optimi }; } -fn build_pi(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, name: []const u8, program_path: std.Build.LazyPath) !void { - const BinaryMode = enum { - Bootloader, - Standalone, - Bootable, - }; - const mode = b.option(BinaryMode, "mode", "specify binary output mode") orelse .Bootable; +const BinaryMode = enum { + Bootloader, + Standalone, + Bootable, +}; + +fn build_pi( + b: *std.Build, + target: std.Build.ResolvedTarget, + optimize: std.builtin.OptimizeMode, + name: []const u8, + program_path: std.Build.LazyPath, + default_mode: ?BinaryMode, +) !void { + const mode = default_mode orelse b.option(BinaryMode, "mode", "specify binary output mode") orelse .Bootable; const shared = b.createModule(pi_module_opts(target, optimize, b.path("shared/root.zig"))); @@ -93,16 +101,36 @@ fn build_pi(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.built b.getInstallStep().dependOn(&install_bin.step); } +fn build_program_inner(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, program: []const u8, mode: ?BinaryMode) !void { + const program_name = try std.fmt.allocPrint(b.allocator, "programs/{s}.zig", .{program}); + defer b.allocator.free(program_name); + + try build_pi(b, target, optimize, program, b.path(program_name), mode); +} + fn build_program(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode) !void { const program = b.option([]const u8, "program", "specify pi program") orelse { - // Only building pi-install + // Build all programs + + const path = try b.path("programs").getPath3(b, null).toString(b.allocator); + defer b.allocator.free(path); + + var dir = try std.fs.openDirAbsolute(path, .{ .access_sub_paths = false, .iterate = true }); + defer dir.close(); + + var iter = dir.iterate(); + while (try iter.next()) |entry| { + if (entry.kind != .file) continue; + if (!std.mem.endsWith(u8, entry.name, ".zig")) continue; + const name = entry.name[0..(entry.name.len - 4)]; + + try build_program_inner(b, target, optimize, name, .Bootable); + } + return; }; - const program_name = try std.fmt.allocPrint(b.allocator, "programs/{s}.zig", .{program}); - defer b.allocator.free(program_name); - - try build_pi(b, target, optimize, program, b.path(program_name)); + try build_program_inner(b, target, optimize, program, null); } fn build_installer(b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode) !void {