summaryrefslogtreecommitdiff
path: root/vere/ext/sigsegv/build.zig
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-10-05 21:56:51 +0700
committerpolwex <polwex@sortug.com>2025-10-05 21:56:51 +0700
commitfcedfddf00b3f994e4f4e40332ac7fc192c63244 (patch)
tree51d38e62c7bdfcc5f9a5e9435fe820c93cfc9a3d /vere/ext/sigsegv/build.zig
claude is gud
Diffstat (limited to 'vere/ext/sigsegv/build.zig')
-rw-r--r--vere/ext/sigsegv/build.zig151
1 files changed, 151 insertions, 0 deletions
diff --git a/vere/ext/sigsegv/build.zig b/vere/ext/sigsegv/build.zig
new file mode 100644
index 0000000..d7f8859
--- /dev/null
+++ b/vere/ext/sigsegv/build.zig
@@ -0,0 +1,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);
+}