aboutsummaryrefslogtreecommitdiff
path: root/build.zig
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2023-08-19 23:50:04 +0200
committerdec05eba <dec05eba@protonmail.com>2023-08-19 23:50:04 +0200
commit80ab0233688c9df9fd48265b6f9e7ab7cd589dbc (patch)
treef02de812a0450b99af41678245b008cf065d8c16 /build.zig
Initial commit
Diffstat (limited to 'build.zig')
-rw-r--r--build.zig184
1 files changed, 184 insertions, 0 deletions
diff --git a/build.zig b/build.zig
new file mode 100644
index 0000000..0eaabc7
--- /dev/null
+++ b/build.zig
@@ -0,0 +1,184 @@
+const std = @import("std");
+
+pub fn build(b: *std.Build) void {
+ const target = b.standardTargetOptions(.{});
+ const optimize = b.standardOptimizeOption(.{});
+
+ const lib = b.addStaticLibrary(.{
+ .name = "zig-xcb",
+ .target = target,
+ .optimize = optimize,
+ });
+
+ const single_threaded = true;
+ const libXcb = buildXcb(b, &target, optimize, single_threaded);
+
+ lib.linkLibrary(libXcb);
+ lib.addIncludePath(.{ .path = "depends/libxcb/include" });
+ lib.addIncludePath(.{ .path = "depends/libxcb-keysyms" });
+ lib.addIncludePath(.{ .path = "depends/libxcb/depends/xorgproto/include" });
+ lib.addIncludePath(.{ .path = "depends/libxcb-render-util" });
+ lib.linkLibC();
+ lib.strip = optimize != std.builtin.OptimizeMode.Debug;
+ lib.want_lto = optimize != std.builtin.OptimizeMode.Debug;
+ lib.single_threaded = single_threaded;
+
+ lib.installHeadersDirectory("depends/libxcb/include", ".");
+ lib.installHeadersDirectoryOptions(.{
+ .source_dir = .{ .path = "depends/libxcb-keysyms" },
+ .install_dir = .header,
+ .install_subdir = ".",
+ .exclude_extensions = &.{ ".c" },
+ });
+ lib.installHeadersDirectoryOptions(.{
+ .source_dir = .{ .path = "depends/libxcb-render-util" },
+ .install_dir = .header,
+ .install_subdir = ".",
+ .exclude_extensions = &.{ ".c" },
+ });
+ lib.installHeadersDirectory("depends/libxcb/depends/xorgproto/include", ".");
+ b.installArtifact(lib);
+}
+
+fn buildXau(b: *std.Build, target: *const std.zig.CrossTarget, optimize: std.builtin.OptimizeMode, single_threaded: bool) *std.Build.Step.Compile {
+ const lib = b.addStaticLibrary(.{
+ .name = "libxau",
+ .target = target.*,
+ .optimize = optimize,
+ });
+
+ lib.addCSourceFiles(&[_][]const u8{
+ "depends/libxcb/depends/libxau/AuDispose.c",
+ "depends/libxcb/depends/libxau/AuFileName.c",
+ "depends/libxcb/depends/libxau/AuGetAddr.c",
+ "depends/libxcb/depends/libxau/AuGetBest.c",
+ "depends/libxcb/depends/libxau/AuLock.c",
+ "depends/libxcb/depends/libxau/AuRead.c",
+ "depends/libxcb/depends/libxau/AuUnlock.c",
+ "depends/libxcb/depends/libxau/AuWrite.c",
+ }, &[_][]const u8{
+ "-DHAVE_CONFIG_H",
+ });
+
+ lib.addIncludePath(.{ .path = "depends/libxcb/depends/libxau" });
+ lib.addIncludePath(.{ .path = "depends/libxcb/depends/libxau/include" });
+ lib.addIncludePath(.{ .path = "depends/libxcb/depends/libxdmcp/include" });
+ lib.addIncludePath(.{ .path = "depends/libxcb/depends/xorgproto/include" });
+ lib.linkLibC();
+ lib.strip = optimize != std.builtin.OptimizeMode.Debug;
+ lib.want_lto = optimize != std.builtin.OptimizeMode.Debug;
+ lib.single_threaded = single_threaded;
+
+ return lib;
+}
+
+fn buildXdmcp(b: *std.Build, target: *const std.zig.CrossTarget, optimize: std.builtin.OptimizeMode, single_threaded: bool) *std.Build.Step.Compile {
+ const lib = b.addStaticLibrary(.{
+ .name = "libxdmcp",
+ .target = target.*,
+ .optimize = optimize,
+ });
+
+ var flags = std.ArrayList([]const u8).init(b.allocator);
+ flags.append("-DHAVE_CONFIG_H") catch @panic("OOM");
+ if (target.abi) |abi| {
+ if (abi.isMusl()) {
+ flags.append("-D__MUSL__") catch @panic("OOM");
+ }
+ }
+
+ lib.addCSourceFiles(&[_][]const u8{
+ "depends/libxcb/depends/libxdmcp/Array.c",
+ "depends/libxcb/depends/libxdmcp/Fill.c",
+ "depends/libxcb/depends/libxdmcp/Flush.c",
+ "depends/libxcb/depends/libxdmcp/Key.c",
+ "depends/libxcb/depends/libxdmcp/Read.c",
+ "depends/libxcb/depends/libxdmcp/Unwrap.c",
+ "depends/libxcb/depends/libxdmcp/Wrap.c",
+ "depends/libxcb/depends/libxdmcp/Wraphelp.c",
+ "depends/libxcb/depends/libxdmcp/Write.c",
+ }, flags.items);
+
+ lib.addIncludePath(.{ .path = "depends/libxcb/depends/libxdmcp" });
+ lib.addIncludePath(.{ .path = "depends/libxcb/depends/libxdmcp/include" });
+ lib.addIncludePath(.{ .path = "depends/libxcb/depends/xorgproto/include" });
+ lib.linkLibC();
+ lib.strip = optimize != std.builtin.OptimizeMode.Debug;
+ lib.want_lto = optimize != std.builtin.OptimizeMode.Debug;
+ lib.single_threaded = single_threaded;
+
+ return lib;
+}
+
+fn buildXcb(b: *std.Build, target: *const std.zig.CrossTarget, optimize: std.builtin.OptimizeMode, single_threaded: bool) *std.Build.Step.Compile {
+ const libXau = buildXau(b, target, optimize, single_threaded);
+ const libXdmcp = buildXdmcp(b, target, optimize, single_threaded);
+
+ const libXcb = b.addStaticLibrary(.{
+ .name = "libxcb",
+ .target = target.*,
+ .optimize = optimize,
+ });
+
+ libXcb.linkLibrary(libXau);
+ libXcb.linkLibrary(libXdmcp);
+
+ libXcb.addCSourceFiles(&[_][]const u8{
+ "depends/libxcb/src/bigreq.c",
+ "depends/libxcb/src/composite.c",
+ "depends/libxcb/src/damage.c",
+ "depends/libxcb/src/dpms.c",
+ "depends/libxcb/src/dri2.c",
+ "depends/libxcb/src/dri3.c",
+ "depends/libxcb/src/ge.c",
+ "depends/libxcb/src/glx.c",
+ "depends/libxcb/src/present.c",
+ "depends/libxcb/src/randr.c",
+ "depends/libxcb/src/record.c",
+ "depends/libxcb/src/render.c",
+ "depends/libxcb/src/res.c",
+ "depends/libxcb/src/screensaver.c",
+ "depends/libxcb/src/shape.c",
+ "depends/libxcb/src/shm.c",
+ "depends/libxcb/src/sync.c",
+ "depends/libxcb/src/xcb_auth.c",
+ "depends/libxcb/src/xcb_conn.c",
+ "depends/libxcb/src/xcb_ext.c",
+ "depends/libxcb/src/xcb_in.c",
+ "depends/libxcb/src/xcb_list.c",
+ "depends/libxcb/src/xcb_out.c",
+ "depends/libxcb/src/xcb_util.c",
+ "depends/libxcb/src/xcb_xid.c",
+ "depends/libxcb/src/xc_misc.c",
+ "depends/libxcb/src/xevie.c",
+ "depends/libxcb/src/xf86dri.c",
+ "depends/libxcb/src/xfixes.c",
+ "depends/libxcb/src/xinerama.c",
+ "depends/libxcb/src/xinput.c",
+ "depends/libxcb/src/xkb.c",
+ "depends/libxcb/src/xprint.c",
+ "depends/libxcb/src/xproto.c",
+ "depends/libxcb/src/xselinux.c",
+ "depends/libxcb/src/xtest.c",
+ "depends/libxcb/src/xv.c",
+ "depends/libxcb/src/xvmc.c",
+
+ // libxcb-keysyms
+ "depends/libxcb-keysyms/xcb/keysyms.c",
+ }, &[_][]const u8{
+ "-DHAVE_CONFIG_H",
+ });
+
+ libXcb.addIncludePath(.{ .path = "depends/libxcb/src" });
+ libXcb.addIncludePath(.{ .path = "depends/libxcb/depends/libxau/include" });
+ libXcb.addIncludePath(.{ .path = "depends/libxcb/depends/libxdmcp/include" });
+ libXcb.addIncludePath(.{ .path = "depends/libxcb/depends/xorgproto/include" });
+ libXcb.addIncludePath(.{ .path = "depends/libxcb/include/xcb" });
+ libXcb.addIncludePath(.{ .path = "depends/libxcb/include" });
+ libXcb.linkLibC();
+ libXcb.strip = optimize != std.builtin.OptimizeMode.Debug;
+ libXcb.want_lto = optimize != std.builtin.OptimizeMode.Debug;
+ libXcb.single_threaded = single_threaded;
+
+ return libXcb;
+}