summaryrefslogtreecommitdiff
path: root/vere/ext/sigsegv/build.zig
blob: d7f885967bcde17e8d344d3c01642a9db45d0834 (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
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
const std = @import("std");

pub fn build(b: *std.Build) void {
    const target = b.standardTargetOptions(.{});
    const optimize = b.standardOptimizeOption(.{});
    const t = target.result;

    const dep_c = b.dependency("sigsegv", .{
        .target = target,
        .optimize = optimize,
    });

    const lib = b.addStaticLibrary(.{
        .name = "sigsegv",
        .target = target,
        .optimize = optimize,
    });

    if (target.result.os.tag.isDarwin() and !target.query.isNative()) {
        const macos_sdk = b.lazyDependency("macos_sdk", .{
            .target = target,
            .optimize = optimize,
        });
        if (macos_sdk != null) {
            lib.addSystemIncludePath(macos_sdk.?.path("usr/include"));
            lib.addLibraryPath(macos_sdk.?.path("usr/lib"));
            lib.addFrameworkPath(macos_sdk.?.path("System/Library/Frameworks"));
        }
    }

    lib.linkLibC();

    lib.root_module.addCMacro("HAVE_CONFIG_H", &[_]u8{});

    const config_h = b.addConfigHeader(.{
        .style = .{
            .autoconf = dep_c.path("config.h.in"),
        },
        .include_path = "config.h",
    }, .{
        .ENABLE_EFAULT = null,
        .HAVE_DLFCN_H = 1,
        .HAVE_EFAULT_SUPPORT = null,
        .HAVE_GETPAGESIZE = 1,
        .HAVE_GETRLIMIT = 1,
        .HAVE_INTTYPES_H = 1,
        .HAVE_MINCORE = 1,
        .HAVE_MMAP_ANON = 1,
        .HAVE_MMAP_ANONYMOUS = 1,
        .HAVE_MMAP_DEVZERO = null,
        .HAVE_MQUERY = null,
        .HAVE_PAGESIZE = null,
        .HAVE_SETRLIMIT = 1,
        .HAVE_SIGALTSTACK = 1,
        .HAVE_STACKVMA = @intFromBool(!(t.os.tag == .linux)),
        .HAVE_STDINT_H = 1,
        .HAVE_STDIO_H = 1,
        .HAVE_STDLIB_H = 1,
        .HAVE_STRINGS_H = 1,
        .HAVE_STRING_H = 1,
        .HAVE_SYSCONF_PAGESIZE = null,
        .HAVE_SYS_SIGNAL_H = 1,
        .HAVE_SYS_STAT_H = 1,
        .HAVE_SYS_TYPES_H = 1,
        .HAVE_UCONTEXT_H = null,
        .HAVE_UINTPTR_T = 1,
        .HAVE_UNISTD_H = 1,
        .HAVE_WORKING_SIGALTSTACK = 1,
        .LT_OBJDIR = null,
        .OLD_CYGWIN_WORKAROUND = null,
        .PACKAGE = null,
        .PACKAGE_BUGREPORT = null,
        .PACKAGE_NAME = null,
        .PACKAGE_STRING = null,
        .PACKAGE_TARNAME = null,
        .PACKAGE_URL = null,
        .PACKAGE_VERSION = null,
        .SIGALTSTACK_SS_REVERSED = null,
        .STACK_DIRECTION = -1,
        .STDC_HEADERS = 1,
        .VERSION = null,
        .stack_t = null,
        .uintptr_t = null,
    });

    if ((t.os.tag == .macos)) {
        config_h.addValues(.{
            .CFG_FAULT = if (t.cpu.arch == .aarch64)
                "fault-macos-arm64.h"
            else
                "fault-macos-i386.h",
            .CFG_HANDLER = "handler-unix.c",
            .CFG_LEAVE = "leave-nop.c",
            .CFG_MACHFAULT = "fault-none.h",
            .CFG_SIGNALS = "signals-macos.h",
            .CFG_STACKVMA = "stackvma-mach.c",
        });
    }

    if ((t.os.tag == .linux)) {
        config_h.addValues(.{
            .CFG_FAULT = if (t.cpu.arch == .aarch64)
                "fault-linux-arm.h"
            else
                "fault-linux-i386.h",
            .CFG_HANDLER = "handler-unix.c",
            .CFG_LEAVE = "leave-nop.c",
            .CFG_MACHFAULT = "fault-none.h",
            .CFG_SIGNALS = "signals.h",
            .CFG_STACKVMA = "stackvma-none.c",
        });
    }

    const sigsegv_h = b.addConfigHeader(.{
        .style = .{
            .cmake = dep_c.path("src/sigsegv.h.in"),
        },
        .include_path = "sigsegv.h",
    }, .{
        .FAULT_CONTEXT = "ucontext_t",
        .FAULT_CONTEXT_INCLUDE = if (t.os.tag == .macos)
            "#include <sys/ucontext.h>"
        else
            "#include <ucontext.h>",
        .HAVE_SIGSEGV_RECOVERY = 1,
        .HAVE_STACK_OVERFLOW_RECOVERY = 1,
    });

    lib.addIncludePath(dep_c.path("src"));
    lib.addConfigHeader(config_h);
    lib.addConfigHeader(sigsegv_h);

    lib.addCSourceFiles(.{
        .root = dep_c.path("src"),
        .files = &.{
            "dispatcher.c",
            "handler.c",
            "leave.c",
            "stackvma.c",
            "version.c",
        },
        .flags = &.{
            "-O2",
            "-fno-sanitize=all",
        },
    });

    lib.installConfigHeader(sigsegv_h);

    b.installArtifact(lib);
}