const std = @import("std"); const ScanProtocolsStep = @import("deps/zig-wayland/build.zig").ScanProtocolsStep; pub fn build(b: *std.build.Builder) void { // Standard target options allows the person running `zig build` to choose // what target to build for. Here we do not override the defaults, which // means any target is allowed, and the default is native. Other options // for restricting supported target set are available. const target = b.standardTargetOptions(.{}); // Standard release options allow the person running `zig build` to select // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. const mode = b.standardReleaseOptions(); const scanner = ScanProtocolsStep.create(b); scanner.addSystemProtocol("stable/xdg-shell/xdg-shell.xml"); scanner.addSystemProtocol("unstable/xdg-output/xdg-output-unstable-v1.xml"); scanner.addProtocolPath("protocols/wlr-layer-shell-unstable-v1.xml"); // Pass the maximum version implemented by your wayland server or client. // Requests, events, enums, etc. from newer versions will not be generated, // ensuring forwards compatibility with newer protocol xml. // This will also generate code for interfaces created using the provided // global interface, in this example wl_keyboard, wl_pointer, xdg_surface, // xdg_toplevel, etc. would be generated. scanner.generate("wl_compositor", 4); scanner.generate("zxdg_output_manager_v1", 1); scanner.generate("zwlr_layer_shell_v1", 1); scanner.generate("wl_shm", 1); scanner.generate("wl_output", 3); scanner.generate("wl_seat", 2); scanner.generate("xdg_wm_base", 1); const zig_args = std.build.Pkg{ .name = "zig-args", .source = .{.path = "deps/zig-args/args.zig"}, }; const wayland = std.build.Pkg{ .name = "wayland", .source = .{ .generated = &scanner.result }, }; const exe = b.addExecutable("zlurp", "main.zig"); exe.setTarget(target); exe.setBuildMode(mode); exe.step.dependOn(&scanner.step); exe.addPackage(wayland); exe.addPackage(zig_args); exe.linkLibC(); exe.linkSystemLibrary("wayland-client"); exe.linkSystemLibrary("xkbcommon"); exe.linkSystemLibrary("cairo"); scanner.addCSource(exe); exe.install(); const run_cmd = exe.run(); run_cmd.step.dependOn(b.getInstallStep()); if (b.args) |args| { run_cmd.addArgs(args); } const run_step = b.step("run", "Run the app"); run_step.dependOn(&run_cmd.step); // TESTS const exe_tests = b.addTest("main.zig"); exe_tests.setTarget(target); exe_tests.setBuildMode(mode); exe_tests.linkLibC(); exe_tests.step.dependOn(&scanner.step); exe_tests.addPackage(wayland); exe_tests.addPackage(zig_args); exe_tests.linkSystemLibrary("wayland-client"); exe_tests.linkSystemLibrary("xkbcommon"); exe_tests.linkSystemLibrary("cairo"); scanner.addCSource(exe_tests); const test_step = b.step("test", "Run unit tests"); test_step.dependOn(&exe_tests.step); }