Code generation for Wayland protocols, for use without libwayland. Generated code is NOT ABI compatible with libwayland. Users of the generated code are expected to implement Wayland wire communication handling themselves.
This generator currently only supports generating Zig code, but I plan to add an option to emit the code as a single-header C library in the future.
Note
This program currently only generates client-compatible code. Support for server-compatible codegen may come later.
The binary can be produced by invoking zig build in the project root
and protocols.zig can be generated by running the program as below:
# The program can be run with as many input protocols as you'd like
$ ./zig-out/bin/wl-protocol-codegen -o protocols.zig path/to/wayland.xml path/to/protocol1.xml path/to/protocolN.xml
This will read in all provided xml files and produce a single protocols.zig
which will include the code for each protocol.
The core wayland protocol can be found at https://gitlab.freedesktop.org/wayland/wayland and additional protocol specifications can be found at https://gitlab.freedesktop.org/wayland/wayland-protocols
You can use the zig build system to generate protocols.zig and expose it
as a module as follows:
Add this repo as a dependency. You can do this manually or by invoking:
$ zig fetch --save git+https://github.com/ptrToLiam/wl-protocol-codegenThen add some lines such as the following to your build.zig:
const wayland_protocol_specifications = [_]std.Build.LazyPath{
b.path("path/to/wayland.xml"),
b.path("path/to/protocol1.xml"),
b.path("path/to/protocolN.xml"),
...,
};
const wayland_protocols = b.dependency("wl_protocol_codegen", .{
.protocols = &wayland_protocol_specifications,
}).module("wayland-protocols");
exe.root_module.addImport("wayland-protocols", wayland_protocols);This will allow you to import the protocol code with
@import("wayland-protocols") in your executable module's source code.