From 827e8bf0cade68aa97618b27bdcb5a7bc4c67fef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Gr=C3=A9goire?= Date: Mon, 30 Mar 2026 20:05:45 -0400 Subject: [PATCH] refactor: move directories around a bit --- build.zig | 26 ++++++++++++++++++----- src/{platform => arch}/amd64/cpu.zig | 0 src/arch/amd64/root.zig | 2 ++ src/arch/um/root.zig | 1 + src/{platform => }/boot/limine/entry.zig | 0 src/{platform => }/boot/limine/limine.zig | 0 src/kern/amd64/impl.zig | 2 +- src/kern/init.zig | 3 ++- src/platform/{amd64 => pc}/impl.zig | 8 ++++--- src/platform/root.zig | 2 +- src/root.zig | 1 + 11 files changed, 34 insertions(+), 11 deletions(-) rename src/{platform => arch}/amd64/cpu.zig (100%) create mode 100644 src/arch/amd64/root.zig create mode 100644 src/arch/um/root.zig rename src/{platform => }/boot/limine/entry.zig (100%) rename src/{platform => }/boot/limine/limine.zig (100%) rename src/platform/{amd64 => pc}/impl.zig (95%) diff --git a/build.zig b/build.zig index ff47028..2845827 100644 --- a/build.zig +++ b/build.zig @@ -72,7 +72,21 @@ pub fn build(b: *std.Build) void { base_module.addImport("base", base_module); - const kernel_nosym = addKernel(b, plat, optimize, config_module, empty_ksyms_module, rtl_module, base_module); + const arch = if (plat.os == .freestanding) switch (plat.arch) { + .x86_64 => "amd64", + else => @tagName(plat.arch), + } else "um"; + + const arch_module = b.createModule(.{ + .root_source_file = b.path(b.fmt("src/arch/{s}/root.zig", .{arch})), + .optimize = optimize, + .imports = &.{ + .{ .name = "config", .module = config_module }, + .{ .name = "rtl", .module = rtl_module }, + }, + }); + + const kernel_nosym = addKernel(b, plat, optimize, config_module, empty_ksyms_module, rtl_module, base_module, arch_module); b.step("kernel-nosym", "Build nosym kernel").dependOn(&kernel_nosym.step); @@ -89,7 +103,7 @@ pub fn build(b: *std.Build) void { }); // second pass - const kernel = addKernel(b, plat, optimize, config_module, ksyms_module, rtl_module, base_module); + const kernel = addKernel(b, plat, optimize, config_module, ksyms_module, rtl_module, base_module, arch_module); b.default_step.dependOn(&b.addInstallArtifact(kernel, .{}).step); @@ -167,7 +181,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, base: *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, arch: *std.Build.Module) *std.Build.Step.Compile { const target = b.resolveTargetQuery(targetQueryForPlatform(plat)); const name = b.fmt("kernel-{s}", .{@tagName(plat.arch)}); @@ -176,9 +190,11 @@ fn addKernel(b: *std.Build, plat: config.Platform, optimize: std.builtin.Optimiz switch (bl) { .Limine => "boot/limine", } - else if (plat.os == .linux) "um" else @tagName(plat.arch); + else if (plat.os == .linux) "platform/um" else @tagName(plat.arch); - const root_source_file = b.fmt("src/platform/{s}/entry.zig", .{platform_name}); + base.addImport("arch", arch); + + const root_source_file = b.fmt("src/{s}/entry.zig", .{platform_name}); const kernel = b.addExecutable(.{ .name = name, diff --git a/src/platform/amd64/cpu.zig b/src/arch/amd64/cpu.zig similarity index 100% rename from src/platform/amd64/cpu.zig rename to src/arch/amd64/cpu.zig diff --git a/src/arch/amd64/root.zig b/src/arch/amd64/root.zig new file mode 100644 index 0000000..d7bff18 --- /dev/null +++ b/src/arch/amd64/root.zig @@ -0,0 +1,2 @@ +pub const cpu = @import("cpu.zig"); +pub const name = "amd64"; diff --git a/src/arch/um/root.zig b/src/arch/um/root.zig new file mode 100644 index 0000000..98c31d3 --- /dev/null +++ b/src/arch/um/root.zig @@ -0,0 +1 @@ +pub const name = "um"; diff --git a/src/platform/boot/limine/entry.zig b/src/boot/limine/entry.zig similarity index 100% rename from src/platform/boot/limine/entry.zig rename to src/boot/limine/entry.zig diff --git a/src/platform/boot/limine/limine.zig b/src/boot/limine/limine.zig similarity index 100% rename from src/platform/boot/limine/limine.zig rename to src/boot/limine/limine.zig diff --git a/src/kern/amd64/impl.zig b/src/kern/amd64/impl.zig index 8e189fb..89817d8 100644 --- a/src/kern/amd64/impl.zig +++ b/src/kern/amd64/impl.zig @@ -1,7 +1,7 @@ const b = @import("base"); const ke = b.ke; const pl = b.pl; -const amd64 = pl.impl; +const amd64 = b.arch; const std = @import("std"); diff --git a/src/kern/init.zig b/src/kern/init.zig index 6cfae56..35dd360 100644 --- a/src/kern/init.zig +++ b/src/kern/init.zig @@ -2,6 +2,7 @@ const std = @import("std"); const b = @import("base"); const pl = b.pl; const ke = b.ke; +const arch = b.arch; const ki = ke.private; const ex = b.ex; @@ -17,7 +18,7 @@ pub fn init(boot_info: *pl.BootInfo) linksection(b.init) void { thread0.priority = 0; thread0.priority_class = .Idle; - std.log.info("Zag for {s}, cmdline is \"{?s}\"", .{ pl.name, boot_info.cmdline }); + std.log.info("Zag for {s} ({s}), cmdline is \"{?s}\"", .{ pl.name, arch.name, boot_info.cmdline }); ex.private.init(boot_info); } diff --git a/src/platform/amd64/impl.zig b/src/platform/pc/impl.zig similarity index 95% rename from src/platform/amd64/impl.zig rename to src/platform/pc/impl.zig index 108322d..38d5b16 100644 --- a/src/platform/amd64/impl.zig +++ b/src/platform/pc/impl.zig @@ -1,9 +1,11 @@ const b = @import("base"); -pub const cpu = @import("cpu.zig"); -const ki = b.ke.private; +const amd64 = b.arch; const std = @import("std"); -pub const name = "amd64"; +const ki = b.ke.private; +const cpu = amd64.cpu; + +pub const name = "PC"; const com1 = 0x3F8; diff --git a/src/platform/root.zig b/src/platform/root.zig index 11b5c7f..07d21e9 100644 --- a/src/platform/root.zig +++ b/src/platform/root.zig @@ -4,7 +4,7 @@ const config = @import("config"); pub const impl = if (@hasDecl(config, "CONFIG_ARCH_AMD64")) - @import("amd64/impl.zig") + @import("pc/impl.zig") else if (@hasDecl(config, "CONFIG_ARCH_UM")) @import("um/impl.zig") else diff --git a/src/root.zig b/src/root.zig index 0ca3bc5..ffa3850 100644 --- a/src/root.zig +++ b/src/root.zig @@ -4,6 +4,7 @@ pub const ex = @import("ex/root.zig"); pub const pl = @import("platform/root.zig"); pub const rtl = @import("rtl"); pub const ksyms = @import("ksyms"); +pub const arch = @import("arch"); pub const init = ".text.init"; pub const percpu_init = ".percpu_init_array";