Skip to content

ptrToLiam/wl-protocol-codegen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wayland Protocol Code Generator

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.

Usage

CLI

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

Generation Via Build.zig

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-codegen

Then 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.

About

Tool for generating Zig code to interact with wayland protocols.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors