exfat: the service + build wiring (S4 step 4)

exfat.zig is a near-clone of fat.zig — the reuse the architecture
promised, now real: same IpcBlock DMA-bounce wrapper, same
acquire-volume-by-hello to the volume manager, same content-conditional
boot rewrites (resolve /system/configuration to decide the system
volume), all differences confined to the engine it wraps. That the
harness's Server(engine.FileSystem) compiles is the proof the exFAT
engine meets the same pub-fn contract as FAT — a comptime check, not a
hope.

The exfat package (build.zig + build.zig.zon) mirrors fat's: it ships in
production_ship, its on-disk + engine host tests run through the root
test aggregate (replacing the temporary standalone entry), and the root
zon declares it. build + zig build test + bounds all green.
This commit is contained in:
Daniel Samson
2026-08-10 03:18:00 +01:00
parent e240341bfb
commit e81a4e6f1d
5 changed files with 253 additions and 4 deletions
+2 -4
View File
@@ -122,6 +122,7 @@ fn driverArtifact(comptime package: []const u8, comptime artifact: []const u8) S
/// (docs/build-packages-plan.md).
const production_ship = [_]ShipRow{
service("fat"),
service("exfat"),
service("display"),
service("display-demo"),
service("device-manager"),
@@ -422,10 +423,6 @@ pub fn build(b: *std.Build) void {
"system/boot-handoff.zig",
"system/abi.zig",
"system/initial-ramdisk.zig", // v2 path-named entries: find/basename/magic
// The exFAT engine (S4), std-only, before its package exists — the
// engine imports on-disk.zig, so this one entry runs both files' tests.
// Moves into the `exfat` package's own test step once that lands (step 4).
"system/services/exfat/engine.zig",
}) |root| {
const mod_tests = b.addTest(.{
.root_module = b.createModule(.{
@@ -451,6 +448,7 @@ pub fn build(b: *std.Build) void {
csv_library,
xkeyboard_config_library,
b.dependency("fat", .{}),
b.dependency("exfat", .{}),
b.dependency("volume-manager", .{}),
b.dependency("display", .{}),
b.dependency("ps2-bus", .{}),