Skip to content

ptrToLiam/wayland-protocol-codegen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

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

I wrote this to use in my own projects to avoid the callback-heavy interface provided by libwayland and the standard wayland-scanner.

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

I'll probably also give this all a cleanup pass soon. This code was all written rather quickly and probably can be tidied up.

Note

This program currently only generates client-compatible code. Support for server-compatible codegen may come later if I feel like it.

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/wayland-protocol-generator -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/wayland-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("wayland_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.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors