main build.zig
 1const std = @import("std");
 2
 3pub fn build(b: *std.Build) void {
 4    const target = b.standardTargetOptions(.{});
 5    const optimize = b.standardOptimizeOption(.{});
 6
 7    // --- Wire protocol module ---
 8    const wire_mod = b.createModule(.{
 9        .root_source_file = b.path("compositor/src/wire.zig"),
10        .target = target,
11        .optimize = optimize,
12    });
13
14    // --- Protocol scanner ---
15    const scanner_mod = b.createModule(.{
16        .root_source_file = b.path("tools/scanner.zig"),
17        .target = target,
18        .optimize = optimize,
19    });
20    scanner_mod.addImport("panthera", b.dependency("panthera", .{
21        .target = target,
22        .optimize = optimize,
23    }).module("panthera"));
24    const scanner_exe = b.addExecutable(.{
25        .name = "protocol-scanner",
26        .root_module = scanner_mod,
27    });
28
29    const run_scanner = b.addRunArtifact(scanner_exe);
30    run_scanner.addArg("protocol");
31    run_scanner.addArg("compositor/src/protocol.zig");
32
33    const scan_step = b.step("scan-protocols", "Scan Wayland protocol XML and regenerate protocol.zig");
34    scan_step.dependOn(&run_scanner.step);
35
36    // --- Tests ---
37    const wire_test = b.addTest(.{ .root_module = wire_mod });
38    const test_step = b.step("test", "Run all tests");
39    test_step.dependOn(&b.addRunArtifact(wire_test).step);
40}