summaryrefslogtreecommitdiff
path: root/vere/ext/wslay/build.zig
diff options
context:
space:
mode:
Diffstat (limited to 'vere/ext/wslay/build.zig')
-rw-r--r--vere/ext/wslay/build.zig60
1 files changed, 60 insertions, 0 deletions
diff --git a/vere/ext/wslay/build.zig b/vere/ext/wslay/build.zig
new file mode 100644
index 0000000..91dd3b7
--- /dev/null
+++ b/vere/ext/wslay/build.zig
@@ -0,0 +1,60 @@
+const std = @import("std");
+
+const wslay_version = "1.1.1";
+
+pub fn build(b: *std.Build) !void {
+ const target = b.standardTargetOptions(.{});
+ const optimize = b.standardOptimizeOption(.{});
+ const t = target.result;
+
+ const wslay_src = b.dependency("wslay", .{
+ .target = target,
+ .optimize = optimize,
+ });
+
+ const lib = b.addStaticLibrary(.{
+ .name = "wslay",
+ .target = target,
+ .optimize = optimize,
+ });
+
+ lib.linkLibC();
+
+ lib.addIncludePath(wslay_src.path("lib"));
+ lib.addIncludePath(wslay_src.path("lib/includes"));
+
+ var flags = std.ArrayList([]const u8).init(b.allocator);
+ defer flags.deinit();
+
+ try flags.append("-fno-sanitize=all");
+ try flags.append(b.fmt("-DWSLAY_VERSION=\\\"{s}\\\"", .{wslay_version}));
+
+ if (t.os.tag == .windows) {
+ try flags.append("-DHAVE_WINSOCK2_H=1");
+ } else {
+ try flags.append("-DHAVE_ARPA_INET_H=1");
+ try flags.append("-DHAVE_NETINET_IN_H=1");
+ }
+
+ if (t.cpu.arch.endian() == .big) {
+ try flags.append("-DWORDS_BIGENDIAN=1");
+ }
+
+ lib.addCSourceFiles(.{
+ .root = wslay_src.path("lib"),
+ .files = &.{
+ "wslay_event.c",
+ "wslay_frame.c",
+ "wslay_net.c",
+ "wslay_queue.c",
+ "wslay_stack.c",
+ },
+ .flags = flags.items,
+ });
+
+ lib.installHeadersDirectory(wslay_src.path("lib/includes"), "", .{
+ .include_extensions = &.{".h"},
+ });
+
+ b.installArtifact(lib);
+}