From 4f540af34d7a88547d60bed7bd28850e6d0e18ab Mon Sep 17 00:00:00 2001 From: hachem Date: Sat, 12 Sep 2026 04:08:33 +0200 Subject: feat: BAREEE METTALLLLLL REVOOOOO --- build.zig | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'build.zig') diff --git a/build.zig b/build.zig index f49eb58..ea919b7 100644 --- a/build.zig +++ b/build.zig @@ -26,11 +26,13 @@ pub fn build(b: *std.Build) void { query.cpu_features_sub.addFeature(@intFromEnum(Feature.avx2)); query.cpu_features_add.addFeature(@intFromEnum(Feature.soft_float)); + const target = b.resolveTargetQuery(query); + const kernel = b.addExecutable(.{ .name = "revel", .root_module = b.createModule(.{ .root_source_file = b.path("boot/boot.zig"), - .target = b.resolveTargetQuery(query), + .target = target, .optimize = optimize, .code_model = .kernel, .red_zone = false, @@ -42,5 +44,40 @@ pub fn build(b: *std.Build) void { kernel.pie = false; kernel.setLinkerScript(b.path("boot/linker.ld")); + // the big guns + const revo_dep = b.dependency("revo", .{ .target = target, .optimize = optimize }); + const revo_mod = revo_dep.module("revo"); + + var visited: std.AutoHashMap(*std.Build.Module, void) = .init(b.allocator); + defer visited.deinit(); + kernelize(revo_mod, &visited); + + // the thin guns + const bridge_mod = b.createModule(.{ + .root_source_file = b.path("bridge/bridge.zig"), + .target = target, + .optimize = optimize, + .code_model = .kernel, + .red_zone = false, + .single_threaded = true, + .link_libc = false, + }); + bridge_mod.addImport("revo", revo_mod); + + kernel.root_module.addImport("bridge", bridge_mod); + b.installArtifact(kernel); } + +// force a module and everything it imports to the kernel's codegen settings +fn kernelize(mod: *std.Build.Module, visited: *std.AutoHashMap(*std.Build.Module, void)) void { + if (visited.contains(mod)) return; + visited.put(mod, {}) catch @panic("OOM building module graph"); + + mod.code_model = .kernel; + mod.red_zone = false; + mod.single_threaded = true; + + var it = mod.import_table.iterator(); + while (it.next()) |entry| kernelize(entry.value_ptr.*, visited); +} -- cgit v1.3