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:
| M | build.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 {