1const std = @import("std");
2
3const Scanner = @import("wayland").Scanner;
4
5pub fn build(b: *std.Build) void {
6 const target = b.standardTargetOptions(.{});
7 const optimize = b.standardOptimizeOption(.{});
8 const pie = b.option(bool, "pie", "Build a position-independent executable") orelse false;
9
10 const scanner = Scanner.create(b, .{});
11
12 scanner.addSystemProtocol("stable/xdg-shell/xdg-shell.xml");
13 scanner.addSystemProtocol("stable/viewporter/viewporter.xml");
14 scanner.addSystemProtocol("staging/single-pixel-buffer/single-pixel-buffer-v1.xml");
15 scanner.addCustomProtocol(b.path("protocol/wlr-layer-shell-unstable-v1.xml"));
16 scanner.addCustomProtocol(b.path("protocol/river-status-unstable-v1.xml"));
17 scanner.addCustomProtocol(b.path("protocol/river-control-unstable-v1.xml"));
18
19 scanner.generate("wl_compositor", 4);
20 scanner.generate("wl_subcompositor", 1);
21 scanner.generate("wl_shm", 1);
22 scanner.generate("wl_output", 3);
23 scanner.generate("wl_seat", 5);
24 scanner.generate("wp_single_pixel_buffer_manager_v1", 1);
25 scanner.generate("wp_viewporter", 1);
26 scanner.generate("zwlr_layer_shell_v1", 1);
27 scanner.generate("zriver_status_manager_v1", 2);
28 scanner.generate("zriver_control_v1", 1);
29
30 const wayland = b.createModule(.{ .root_source_file = scanner.result });
31 const pixman = b.dependency("pixman", .{}).module("pixman");
32 const fcft = b.dependency("fcft", .{}).module("fcft");
33
34 const exe = b.addExecutable(.{
35 .name = "creek",
36 .root_source_file = b.path("src/main.zig"),
37 .target = target,
38 .optimize = optimize,
39 });
40 exe.pie = pie;
41
42 exe.linkLibC();
43 exe.root_module.addImport("wayland", wayland);
44 exe.linkSystemLibrary("wayland-client");
45
46 exe.root_module.addImport("pixman", pixman);
47 exe.linkSystemLibrary("pixman-1");
48
49 exe.root_module.addImport("fcft", fcft);
50 exe.linkSystemLibrary("fcft");
51
52 b.installArtifact(exe);
53
54 const run = b.addRunArtifact(exe);
55 run.step.dependOn(b.getInstallStep());
56 if (b.args) |args| {
57 run.addArgs(args);
58 }
59
60 const run_step = b.step("run", "Run creek");
61 run_step.dependOn(&run.step);
62}