diff options
| author | hachem <im@hachem.wtf> | 2026-09-12 04:08:33 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-09-12 04:09:21 +0200 |
| commit | 4f540af34d7a88547d60bed7bd28850e6d0e18ab (patch) | |
| tree | 2b98bc0010a00822169459ef0d37f2ddda6f3b99 /build.zig | |
| parent | c34524767c9eac650f16dbe9059c24af2acd1397 (diff) | |
feat: BAREEE METTALLLLLL REVOOOOO
Diffstat (limited to 'build.zig')
| -rw-r--r-- | build.zig | 39 |
1 files changed, 38 insertions, 1 deletions
@@ -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); +} |
