From f62a65006daf83a0a7d7fa6d8a1c242f7d65d28d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Gr=C3=A9goire?= Date: Sun, 22 Mar 2026 09:44:34 -0400 Subject: [PATCH] feat(build): allow for docs to be built properly --- build.zig | 54 ++++++++++++++++++++++++++++----------- build/ksyms.py | 3 ++- src/main.zig | 1 + src/platform/um/entry.zig | 2 ++ 4 files changed, 44 insertions(+), 16 deletions(-) diff --git a/build.zig b/build.zig index c5015fa..0b681c7 100644 --- a/build.zig +++ b/build.zig @@ -58,7 +58,17 @@ pub fn build(b: *std.Build) void { rtl_module.addImport("rtl", rtl_module); - const kernel_nosym = addKernel(b, plat, optimize, config_module, empty_ksyms_module, rtl_module); + const base_module = b.createModule(.{ + .root_source_file = b.path("src/root.zig"), + .imports = &.{ + .{ .name = "config", .module = config_module }, + .{ .name = "rtl", .module = rtl_module }, + }, + }); + + base_module.addImport("base", base_module); + + const kernel_nosym = addKernel(b, plat, optimize, config_module, empty_ksyms_module, rtl_module, base_module); b.step("kernel-nosym", "Build nosym kernel").dependOn(&kernel_nosym.step); @@ -74,10 +84,35 @@ pub fn build(b: *std.Build) void { }); // second pass - const kernel = addKernel(b, plat, optimize, config_module, ksyms_module, rtl_module); + const kernel = addKernel(b, plat, optimize, config_module, ksyms_module, rtl_module, base_module); b.default_step.dependOn(&b.addInstallArtifact(kernel, .{}).step); + const docs_module = b.createModule(.{ + .root_source_file = b.path("src/root.zig"), + .target = b.graph.host, + .imports = &.{ + .{ .name = "config", .module = config_module }, + .{ .name = "ksyms", .module = ksyms_module }, + .{ .name = "rtl", .module = rtl_module }, + }, + }); + docs_module.addImport("base", docs_module); + + const docs_obj = b.addObject(.{ + .name = "kernel_docs", + .root_module = docs_module, + }); + + const install_docs = b.addInstallDirectory(.{ + .source_dir = docs_obj.getEmittedDocs(), + .install_dir = .prefix, + .install_subdir = "docs", + }); + + const docs_step = b.step("docs", "Generate and install documentation"); + docs_step.dependOn(&install_docs.step); + const iso_step = b.step("iso", "Build the ISO image"); const result = image.addIso(b, plat.arch, "myos", kernel, b.dependency("limine", .{})); iso_step.dependOn(result.step); @@ -124,7 +159,7 @@ fn targetQueryForPlatform(plat: config.Platform) std.Target.Query { return q; } -fn addKernel(b: *std.Build, plat: config.Platform, optimize: std.builtin.OptimizeMode, config_module: *std.Build.Module, ksyms_module: *std.Build.Module, rtl: *std.Build.Module) *std.Build.Step.Compile { +fn addKernel(b: *std.Build, plat: config.Platform, optimize: std.builtin.OptimizeMode, config_module: *std.Build.Module, ksyms_module: *std.Build.Module, rtl: *std.Build.Module, base: *std.Build.Module) *std.Build.Step.Compile { const target = b.resolveTargetQuery(targetQueryForPlatform(plat)); const name = b.fmt("kernel-{s}", .{@tagName(plat.arch)}); @@ -140,20 +175,9 @@ fn addKernel(b: *std.Build, plat: config.Platform, optimize: std.builtin.Optimiz }), }); - const base_module = b.createModule(.{ - .root_source_file = b.path("src/root.zig"), - .imports = &.{ - .{ .name = "config", .module = config_module }, - .{ .name = "ksyms", .module = ksyms_module }, - .{ .name = "rtl", .module = rtl }, - }, - }); - - base_module.addImport("base", base_module); - kernel.root_module.addImport("config", config_module); kernel.root_module.addImport("ksyms", ksyms_module); - kernel.root_module.addImport("base", base_module); + kernel.root_module.addImport("base", base); kernel.root_module.addImport("rtl", rtl); kernel.use_llvm = true; diff --git a/build/ksyms.py b/build/ksyms.py index 69062c5..70b39ac 100755 --- a/build/ksyms.py +++ b/build/ksyms.py @@ -62,5 +62,6 @@ with open(args.output, 'w') as f: f.write("pub const KSym = struct {\n addr: u64,\n name: []const u8,\n};\n\n") f.write("pub const ksyms: []const KSym = &.{\n") for addr, name in symbols: - f.write(f" .{{ .addr = 0x{addr:016x}, .name = \"{name}\" }},\n") + escaped = name.replace('\\', '\\\\').replace('"', '\\"') + f.write(f" .{{ .addr = 0x{addr:016x}, .name = \"{escaped}\" }},\n") f.write("};\n") diff --git a/src/main.zig b/src/main.zig index c03ca18..9193797 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1,6 +1,7 @@ const std = @import("std"); const ksyms = @import("ksyms"); const pl = @import("base").pl; +pub const rtl = @import("rtl"); const DebugWriter = struct { pub const Error = error{}; diff --git a/src/platform/um/entry.zig b/src/platform/um/entry.zig index 53e4a4f..2c704a4 100644 --- a/src/platform/um/entry.zig +++ b/src/platform/um/entry.zig @@ -2,6 +2,8 @@ const b = @import("base"); pub const std_options = b.std_options; +pub const rtl = @import("rtl"); + const std = @import("std"); const ke = b.ke; const pl = b.pl;