diff options
author | polwex <polwex@sortug.com> | 2025-10-05 21:56:51 +0700 |
---|---|---|
committer | polwex <polwex@sortug.com> | 2025-10-05 21:56:51 +0700 |
commit | fcedfddf00b3f994e4f4e40332ac7fc192c63244 (patch) | |
tree | 51d38e62c7bdfcc5f9a5e9435fe820c93cfc9a3d /vere/ext/sigsegv |
claude is gud
Diffstat (limited to 'vere/ext/sigsegv')
-rw-r--r-- | vere/ext/sigsegv/build.zig | 151 | ||||
-rw-r--r-- | vere/ext/sigsegv/build.zig.zon | 18 |
2 files changed, 169 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); +} diff --git a/vere/ext/sigsegv/build.zig.zon b/vere/ext/sigsegv/build.zig.zon new file mode 100644 index 0000000..39f2c58 --- /dev/null +++ b/vere/ext/sigsegv/build.zig.zon @@ -0,0 +1,18 @@ +.{ + .name = "sigsegv", + .version = "0.0.1", + .dependencies = .{ + .macos_sdk = .{ + .url = "https://github.com/joseluisq/macosx-sdks/releases/download/14.5/MacOSX14.5.sdk.tar.xz", + .hash = "N-V-__8AAKtK4FMzqcFsY_ZrpMg9bGH0h7BqZDXtVyAerMtM", + .lazy = true, + }, + .sigsegv = .{ + .url = "https://ftp.fr.openbsd.org/pub/OpenBSD/distfiles/libsigsegv-2.14.tar.gz", + .hash = "N-V-__8AAHQhHwCCMyKUtQhO0AMsY182In-wQIwXVhenOql5", + }, + }, + .paths = .{ + "", + }, +} |