mirror of
https://github.com/zoriya/zig-wayland.git
synced 2025-12-06 07:06:12 +00:00
72 lines
2.3 KiB
Markdown
72 lines
2.3 KiB
Markdown
# zig-wayland
|
|
|
|
Zig 0.11 bindings and protocol scanner for libwayland.
|
|
|
|
## Usage
|
|
|
|
A `Scanner` interface is provided which you may integrate with your `build.zig`:
|
|
|
|
```zig
|
|
const std = @import("std");
|
|
|
|
const Scanner = @import("deps/zig-wayland/build.zig").Scanner;
|
|
|
|
pub fn build(b: *std.build.Builder) void {
|
|
const target = b.standardTargetOptions(.{});
|
|
const optimize = b.standardOptimizeOption(.{});
|
|
|
|
const scanner = Scanner.create(b, .{});
|
|
|
|
const wayland = b.createModule(.{ .source_file = scanner.result });
|
|
|
|
scanner.addSystemProtocol("stable/xdg-shell/xdg-shell.xml");
|
|
scanner.addSystemProtocol("staging/ext-session-lock/ext-session-lock-v1.xml");
|
|
scanner.addCustomProtocol("protocol/private_foobar.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 as well.
|
|
scanner.generate("wl_seat", 4);
|
|
scanner.generate("xdg_wm_base", 3);
|
|
scanner.generate("ext_session_lock_manager_v1", 1);
|
|
scanner.generate("private_foobar_manager", 1);
|
|
|
|
const exe = b.addExecutable(.{
|
|
.name = "foobar",
|
|
.root_source_file = .{ .path = "foobar.zig" },
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
|
|
exe.addModule("wayland", wayland);
|
|
exe.linkLibC();
|
|
exe.linkSystemLibrary("wayland-client");
|
|
|
|
// TODO: remove when https://github.com/ziglang/zig/issues/131 is implemented
|
|
scanner.addCSource(exe);
|
|
|
|
b.installArtifact(exe);
|
|
}
|
|
```
|
|
|
|
Then, you may import the provided module in your project:
|
|
|
|
```zig
|
|
const wayland = @import("wayland");
|
|
const wl = wayland.client.wl;
|
|
```
|
|
|
|
There is an example project using zig-wayland here:
|
|
[hello-zig-wayland](https://github.com/ifreund/hello-zig-wayland).
|
|
|
|
Note that zig-wayland does not currently do extensive verification of Wayland
|
|
protocol xml or provide good error messages if protocol xml is invalid. It is
|
|
recommend to use `wayland-scanner --strict` to debug protocol xml instead.
|
|
|
|
## License
|
|
|
|
zig-wayland is released under the MIT (expat) license.
|