1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
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 = "xcb-zig",
.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;
}
|