From 8b0d914ddce6e26f0c6d7e56b0e50d5f30359d5c Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 23 Apr 2022 14:00:21 -0700 Subject: [PATCH] improve building on darwin --- build.zig | 2 ++ src/libuv/build.zig | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/build.zig b/build.zig index f8922712d..a25336a48 100644 --- a/build.zig +++ b/build.zig @@ -4,6 +4,7 @@ const LibExeObjStep = std.build.LibExeObjStep; const glfw = @import("vendor/mach/glfw/build.zig"); const ft = @import("src/freetype/build.zig"); const uv = @import("src/libuv/build.zig"); +const system_sdk = @import("vendor/mach/glfw/system_sdk.zig"); pub fn build(b: *std.build.Builder) !void { const target = b.standardTargetOptions(.{}); @@ -26,6 +27,7 @@ pub fn build(b: *std.build.Builder) !void { ftlib.link(exe); const libuv = try uv.create(b, target, mode); + system_sdk.include(b, libuv.step, .{}); libuv.link(exe); // stb if we need it diff --git a/src/libuv/build.zig b/src/libuv/build.zig index c2d4411e8..c4d4e88bd 100644 --- a/src/libuv/build.zig +++ b/src/libuv/build.zig @@ -50,6 +50,13 @@ pub fn create( }); } + if (target.isDarwin()) { + try flags.appendSlice(&.{ + "-D_DARWIN_UNLIMITED_SELECT=1", + "-D_DARWIN_USE_64_BIT_INODE=1", + }); + } + // C files common to all platforms ret.addCSourceFiles(&.{ root() ++ "src/fs-poll.c", @@ -106,6 +113,32 @@ pub fn create( }, flags.items); } + if (target.isDarwin() or + target.isOpenBSD() or + target.isNetBSD() or + target.isFreeBSD() or + target.isDragonFlyBSD()) + { + ret.addCSourceFiles(&.{ + root() ++ "src/unix/bsd-ifaddrs.c", + root() ++ "src/unix/kqueue.c", + }, flags.items); + } + + if (target.isDarwin() or target.isOpenBSD()) { + ret.addCSourceFiles(&.{ + root() ++ "src/unix/random-getentropy.c", + }, flags.items); + } + + if (target.isDarwin()) { + ret.addCSourceFiles(&.{ + root() ++ "src/unix/darwin-proctitle.c", + root() ++ "src/unix/darwin.c", + root() ++ "src/unix/fsevents.c", + }, flags.items); + } + ret.addIncludeDir(include_dir); ret.addIncludeDir(root() ++ "src"); if (target.isWindows()) {