Skip to content

Commit

Permalink
Fixes zig build that was broken on #3863 (#3891)
Browse files Browse the repository at this point in the history
* Fixes zig build that was broken on #3863

* Make this work with wayland
  • Loading branch information
ProIcons committed Mar 30, 2024
1 parent 7c75746 commit d374457
Showing 1 changed file with 54 additions and 1 deletion.
55 changes: 54 additions & 1 deletion src/build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,34 @@ pub fn addRaylib(b: *std.Build, target: anytype, optimize: std.builtin.OptimizeM
raylib.linkSystemLibrary("rt");
raylib.linkSystemLibrary("dl");
raylib.linkSystemLibrary("m");
raylib.linkSystemLibrary("X11");

raylib.addLibraryPath(.{ .path = "/usr/lib" });
raylib.addIncludePath(.{ .path = "/usr/include" });

switch (options.linux_display_backend) {
.X11 => {
raylib.defineCMacro("_GLFW_X11", null);
raylib.linkSystemLibrary("X11");
},
.Wayland => {
raylib.defineCMacro("_GLFW_WAYLAND", null);
raylib.linkSystemLibrary("wayland-client");
raylib.linkSystemLibrary("wayland-cursor");
raylib.linkSystemLibrary("wayland-egl");
raylib.linkSystemLibrary("xkbcommon");
raylib.addIncludePath(.{ .path = srcdir });
try waylandGenerate(gpa, "wayland.xml", "wayland-client-protocol");
try waylandGenerate(gpa, "xdg-shell.xml", "xdg-shell-client-protocol");
try waylandGenerate(gpa, "xdg-decoration-unstable-v1.xml", "xdg-decoration-unstable-v1-client-protocol");
try waylandGenerate(gpa, "viewporter.xml", "viewporter-client-protocol");
try waylandGenerate(gpa, "relative-pointer-unstable-v1.xml", "relative-pointer-unstable-v1-client-protocol");
try waylandGenerate(gpa, "pointer-constraints-unstable-v1.xml", "pointer-constraints-unstable-v1-client-protocol");
try waylandGenerate(gpa, "fractional-scale-v1.xml", "fractional-scale-v1-client-protocol");
try waylandGenerate(gpa, "xdg-activation-v1.xml", "xdg-activation-v1-client-protocol");
try waylandGenerate(gpa, "idle-inhibit-unstable-v1.xml", "idle-inhibit-unstable-v1-client-protocol");
},
}

raylib.defineCMacro("PLATFORM_DESKTOP", null);
} else {
raylib.linkSystemLibrary("GLESv2");
Expand Down Expand Up @@ -201,6 +225,12 @@ pub const Options = struct {
raygui: bool = false,
platform_drm: bool = false,
shared: bool = false,
linux_display_backend: LinuxDisplayBackend = .X11,
};

pub const LinuxDisplayBackend = enum {
X11,
Wayland,
};

pub fn build(b: *std.Build) !void {
Expand Down Expand Up @@ -245,6 +275,8 @@ const srcdir = struct {
}
}.getSrcDir();

const waylandDir = srcdir ++ "/external/glfw/deps/wayland";

fn getOsTagVersioned(target: anytype) std.Target.Os.Tag {
if (comptime builtin.zig_version.minor >= 12) {
return target.result.os.tag;
Expand Down Expand Up @@ -273,6 +305,27 @@ fn addCSourceFilesVersioned(
}
}

fn waylandGenerate(allocator: std.mem.Allocator, comptime protocol: []const u8, comptime basename: []const u8) !void {
_ = try std.process.Child.run(.{
.allocator = allocator,
.argv = &[_][]const u8{
"wayland-scanner",
"client-header",
waylandDir ++ "/" ++ protocol,
srcdir ++ "/" ++ basename ++ ".h",
},
});
_ = try std.process.Child.run(.{
.allocator = allocator,
.argv = &[_][]const u8{
"wayland-scanner",
"private-code",
waylandDir ++ "/" ++ protocol,
srcdir ++ "/" ++ basename ++ "-code.h",
},
});
}

fn join2(allocator: std.mem.Allocator, path1: []const u8, path2: []const u8) ![]u8 {
const joinedPath = try std.fs.path.join(allocator, &[_][]const u8{ path1, path2 });
return joinedPath;
Expand Down

0 comments on commit d374457

Please sign in to comment.