summaryrefslogtreecommitdiff
path: root/vere/ext/wslay/build.zig
blob: 91dd3b746dfc40d76b4320f54a5b6a1f0fdf71dc (plain)
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
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);
}