represent Mac Catalyst as aarch64-maccatalyst-none rather than aarch64-ios-macabi

Apple's own headers and tbd files prefer to think of Mac Catalyst as a distinct
OS target. Earlier, when DriverKit support was added to LLVM, it was represented
a distinct OS. So why Apple decided to only represent Mac Catalyst as an ABI in
the target triple is beyond me. But this isn't the first time they've ignored
established target triple norms (see: armv7k and aarch64_32) and it probably
won't be the last.

While doing this, I also audited all Darwin OS prongs throughout the codebase
and made sure they cover all the tags.
This commit is contained in:
Alex Rønne Petersen 2025-11-13 18:05:46 +01:00
parent 2e6f7d36b9
commit 9ab7eec23e
46 changed files with 273 additions and 241 deletions

View file

@ -335,6 +335,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
.openbsd => try define(w, "__OpenBSD__"),
.dragonfly => try define(w, "__DragonFly__"),
.illumos => try defineStd(w, "sun", is_gnu),
.maccatalyst,
.macos,
.tvos,
.ios,
@ -635,7 +636,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
},
.aarch64, .aarch64_be => {
try define(w, "__aarch64__");
if (comp.target.os.tag == .macos) {
if (comp.target.os.tag.isDarwin()) {
try define(w, "__AARCH64_SIMD__");
if (ptr_width == 32) {
try define(w, "__ARM64_ARCH_8_32__");
@ -992,7 +993,7 @@ fn writeBuiltinMacros(comp: *Compilation, system_defines_mode: SystemDefinesMode
\\
);
if (comp.langopts.standard.atLeast(.c11)) switch (comp.target.os.tag) {
.openbsd, .driverkit, .ios, .macos, .tvos, .visionos, .watchos => {
.openbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => {
try w.writeAll("#define __STDC_NO_THREADS__ 1\n");
},
.ps4, .ps5 => {

View file

@ -1467,6 +1467,7 @@ pub fn getPICMode(d: *Driver, lastpic: []const u8) Compilation.Error!struct { ba
// generation, independent of the argument order.
if (kernel_or_kext and
(!(target.os.tag != .ios) or (target.os.isAtLeast(.ios, .{ .major = 6, .minor = 0, .patch = 0 }) orelse false)) and
(!(target.os.tag != .maccatalyst) or (target.os.isAtLeast(.maccatalyst, .{ .major = 6, .minor = 0, .patch = 0 }) orelse false)) and
!(target.os.tag != .watchos) and
!(target.os.tag != .driverkit))
{

View file

@ -2091,7 +2091,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType {
.xcore,
=> return .void_pointer,
.aarch64, .aarch64_be => switch (comp.target.os.tag) {
.driverkit, .ios, .macos, .tvos, .visionos, .watchos, .windows => return .char_pointer,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .windows => return .char_pointer,
else => .aarch64_va_list,
},
.arm, .armeb, .thumb, .thumbeb => .arm_va_list,

View file

@ -674,7 +674,7 @@ pub fn toLLVMTriple(target: std.Target, buf: []u8) []const u8 {
.emscripten => "emscripten",
.uefi => "windows",
.macos => "macosx",
.ios => "ios",
.ios, .maccatalyst => "ios",
.tvos => "tvos",
.watchos => "watchos",
.driverkit => "driverkit",
@ -703,7 +703,8 @@ pub fn toLLVMTriple(target: std.Target, buf: []u8) []const u8 {
writer.writeByte('-') catch unreachable;
const llvm_abi = switch (target.abi) {
.none, .ilp32 => "unknown",
.none => if (target.os.tag == .maccatalyst) "macabi" else "unknown",
.ilp32 => "unknown",
.gnu => "gnu",
.gnuabin32 => "gnuabin32",
.gnuabi64 => "gnuabi64",
@ -728,7 +729,6 @@ pub fn toLLVMTriple(target: std.Target, buf: []u8) []const u8 {
.msvc => "msvc",
.itanium => "itanium",
.simulator => "simulator",
.macabi => "macabi",
.ohos => "ohos",
.ohoseabi => "ohoseabi",
};
@ -742,6 +742,7 @@ pub fn isPIEDefault(target: std.Target) DefaultPIStatus {
return switch (target.os.tag) {
.haiku,
.maccatalyst,
.macos,
.ios,
.tvos,
@ -809,6 +810,7 @@ pub fn isPICdefault(target: std.Target) DefaultPIStatus {
return switch (target.os.tag) {
.haiku,
.maccatalyst,
.macos,
.ios,
.tvos,
@ -917,6 +919,7 @@ pub fn isPICDefaultForced(target: std.Target) DefaultPIStatus {
return if (target.cpu.arch == .x86_64) .yes else .no;
},
.maccatalyst,
.macos,
.ios,
.tvos,

View file

@ -49,7 +49,7 @@ fn clear_cache(start: usize, end: usize) callconv(.c) void {
else => false,
};
const apple = switch (os) {
.ios, .macos, .watchos, .tvos, .visionos => true,
.ios, .maccatalyst, .macos, .watchos, .tvos, .visionos => true,
else => false,
};
if (x86) {

View file

@ -538,7 +538,7 @@ pub const Manifest = struct {
// disambiguates by returning EEXIST, indicating original
// failure was a race, or ENOENT, indicating deletion of
// the directory of our open handle.
if (builtin.os.tag != .macos) {
if (!builtin.os.tag.isDarwin()) {
self.diagnostic = .{ .manifest_create = error.FileNotFound };
return error.CacheCheckFailed;
}

View file

@ -564,7 +564,7 @@ pub const Evented = switch (builtin.os.tag) {
.x86_64, .aarch64 => @import("Io/IoUring.zig"),
else => void, // context-switching code not implemented yet
},
.dragonfly, .freebsd, .netbsd, .openbsd, .macos, .ios, .tvos, .visionos, .watchos => switch (builtin.cpu.arch) {
.dragonfly, .freebsd, .netbsd, .openbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => switch (builtin.cpu.arch) {
.x86_64, .aarch64 => @import("Io/Kqueue.zig"),
else => void, // context-switching code not implemented yet
},

View file

@ -5140,11 +5140,11 @@ fn clockToPosix(clock: Io.Clock) posix.clockid_t {
return switch (clock) {
.real => posix.CLOCK.REALTIME,
.awake => switch (native_os) {
.macos, .ios, .watchos, .tvos => posix.CLOCK.UPTIME_RAW,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => posix.CLOCK.UPTIME_RAW,
else => posix.CLOCK.MONOTONIC,
},
.boot => switch (native_os) {
.macos, .ios, .watchos, .tvos => posix.CLOCK.MONOTONIC_RAW,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => posix.CLOCK.MONOTONIC_RAW,
// On freebsd derivatives, use MONOTONIC_FAST as currently there's
// no precision tradeoff.
.freebsd, .dragonfly => posix.CLOCK.MONOTONIC_FAST,
@ -5687,7 +5687,7 @@ fn futexWait(t: *Threaded, ptr: *const std.atomic.Value(u32), expect: u32) Io.Ca
else => unreachable,
};
},
.driverkit, .ios, .macos, .tvos, .visionos, .watchos => {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => {
const c = std.c;
const flags: c.UL = .{
.op = .COMPARE_AND_WAIT,
@ -5774,7 +5774,7 @@ pub fn futexWaitUncancelable(ptr: *const std.atomic.Value(u32), expect: u32) voi
else => recoverableOsBugDetected(),
}
},
.driverkit, .ios, .macos, .tvos, .visionos, .watchos => {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => {
const c = std.c;
const flags: c.UL = .{
.op = .COMPARE_AND_WAIT,
@ -5872,7 +5872,7 @@ pub fn futexWake(ptr: *const std.atomic.Value(u32), max_waiters: u32) void {
else => return recoverableOsBugDetected(), // deadlock due to operating system bug
}
},
.driverkit, .ios, .macos, .tvos, .visionos, .watchos => {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => {
const c = std.c;
const flags: c.UL = .{
.op = .COMPARE_AND_WAIT,

View file

@ -1549,11 +1549,13 @@ const have_sigwinch = switch (builtin.os.tag) {
.netbsd,
.openbsd,
.haiku,
.macos,
.driverkit,
.ios,
.watchos,
.maccatalyst,
.macos,
.tvos,
.visionos,
.watchos,
.dragonfly,
.freebsd,
.serenity,

View file

@ -39,6 +39,7 @@ pub const Os = struct {
driverkit,
ios,
maccatalyst,
macos,
tvos,
visionos,
@ -78,6 +79,7 @@ pub const Os = struct {
return switch (tag) {
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
@ -121,6 +123,7 @@ pub const Os = struct {
.windows, .uefi => ".dll",
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
@ -180,8 +183,9 @@ pub const Os = struct {
.openbsd,
.driverkit,
.macos,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
.watchos,
@ -546,7 +550,7 @@ pub const Os = struct {
.max = .{ .major = 15, .minor = 6, .patch = 0 },
},
},
.ios => .{
.ios, .maccatalyst => .{
.semver = .{
.min = .{ .major = 15, .minor = 0, .patch = 0 },
.max = .{ .major = 18, .minor = 6, .patch = 0 },
@ -759,7 +763,6 @@ pub const Abi = enum {
msvc,
itanium,
simulator,
macabi,
ohos,
ohoseabi,
@ -885,8 +888,6 @@ pub const Abi = enum {
=> .eabihf,
else => .none,
},
.ios => if (arch == .x86_64) .macabi else .none,
.tvos, .visionos, .watchos => if (arch == .x86_64) .simulator else .none,
.windows => .gnu,
.uefi => .msvc,
.@"3ds" => .eabihf,
@ -902,7 +903,12 @@ pub const Abi = enum {
.serenity,
.dragonfly,
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
.watchos,
.ps3,
.ps4,
.ps5,
@ -1018,7 +1024,7 @@ pub const ObjectFormat = enum {
pub fn default(os_tag: Os.Tag, arch: Cpu.Arch) ObjectFormat {
return switch (os_tag) {
.driverkit, .ios, .macos, .tvos, .visionos, .watchos => .macho,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => .macho,
.plan9 => .plan9,
.uefi, .windows => .coff,
else => switch (arch) {
@ -1988,7 +1994,7 @@ pub const Cpu = struct {
},
.armeb, .thumbeb => &arm.cpu.baseline,
.aarch64 => switch (os.tag) {
.driverkit, .macos => &aarch64.cpu.apple_m1,
.driverkit, .maccatalyst, .macos => &aarch64.cpu.apple_m1,
.ios, .tvos => &aarch64.cpu.apple_a7,
.visionos => &aarch64.cpu.apple_m2,
.watchos => &aarch64.cpu.apple_s4,
@ -2014,8 +2020,8 @@ pub const Cpu = struct {
.sparc => &sparc.cpu.v9, // glibc does not work with 'plain' v8.
.x86 => &x86.cpu.pentium4,
.x86_64 => switch (os.tag) {
.driverkit => &x86.cpu.nehalem,
.ios, .macos, .tvos, .visionos, .watchos => &x86.cpu.core2,
.driverkit, .maccatalyst => &x86.cpu.nehalem,
.macos => &x86.cpu.core2,
.ps4 => &x86.cpu.btver2,
.ps5 => &x86.cpu.znver2,
else => generic(arch),
@ -2112,7 +2118,7 @@ pub inline fn isMuslLibC(target: *const Target) bool {
pub inline fn isDarwinLibC(target: *const Target) bool {
return switch (target.abi) {
.none, .macabi, .simulator => target.os.tag.isDarwin(),
.none, .simulator => target.os.tag.isDarwin(),
else => false,
};
}
@ -2141,8 +2147,9 @@ pub fn requiresLibC(target: *const Target) bool {
return switch (target.os.tag) {
.illumos,
.driverkit,
.macos,
.ios,
.maccatalyst,
.macos,
.tvos,
.watchos,
.visionos,
@ -2307,6 +2314,7 @@ pub const DynamicLinker = struct {
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
@ -2722,6 +2730,7 @@ pub const DynamicLinker = struct {
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
@ -3234,6 +3243,7 @@ pub fn cTypeBitSize(target: *const Target, c_type: CType) u16 {
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,

View file

@ -156,7 +156,7 @@ impl: Impl,
pub const max_name_len = switch (native_os) {
.linux => 15,
.windows => 31,
.macos, .ios, .watchos, .tvos, .visionos => 63,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => 63,
.netbsd => 31,
.freebsd => 15,
.openbsd => 23,
@ -234,7 +234,7 @@ pub fn setName(self: Thread, name: []const u8) SetNameError!void {
else => |err| return windows.unexpectedStatus(err),
}
},
.macos, .ios, .watchos, .tvos, .visionos => if (use_pthreads) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => if (use_pthreads) {
// There doesn't seem to be a way to set the name for an arbitrary thread, only the current one.
if (self.getHandle() != std.c.pthread_self()) return error.Unsupported;
@ -351,7 +351,7 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co
else => |err| return windows.unexpectedStatus(err),
}
},
.macos, .ios, .watchos, .tvos, .visionos => if (use_pthreads) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => if (use_pthreads) {
const err = std.c.pthread_getname_np(self.getHandle(), buffer.ptr, max_name_len + 1);
switch (@as(posix.E, @enumFromInt(err))) {
.SUCCESS => return std.mem.sliceTo(buffer, 0),
@ -411,7 +411,7 @@ pub const Id = switch (native_os) {
.wasi,
.serenity,
=> u32,
.macos, .ios, .watchos, .tvos, .visionos => u64,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => u64,
.windows => windows.DWORD,
else => usize,
};
@ -741,7 +741,7 @@ const PosixThreadImpl = struct {
.linux => {
return LinuxThreadImpl.getCurrentId();
},
.macos, .ios, .watchos, .tvos, .visionos => {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => {
var thread_id: u64 = undefined;
// Pass thread=null to get the current thread ID.
assert(c.pthread_threadid_np(null, &thread_id) == 0);
@ -1734,7 +1734,7 @@ test "setName, getName" {
context.test_done_event.wait();
switch (native_os) {
.macos, .ios, .watchos, .tvos, .visionos => {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => {
const res = thread.setName("foobar");
try std.testing.expectError(error.Unsupported, res);
},

View file

@ -987,7 +987,7 @@ pub const VaList = switch (builtin.cpu.arch) {
.xcore,
=> *anyopaque,
.aarch64, .aarch64_be => switch (builtin.os.tag) {
.driverkit, .ios, .macos, .tvos, .visionos, .watchos, .windows => *u8,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .windows => *u8,
else => switch (builtin.zig_backend) {
else => VaListAarch64,
.stage2_llvm => @compileError("disabled due to miscompilations"),

View file

@ -115,7 +115,7 @@ pub const timespec = switch (native_os) {
sec: time_t,
nsec: c_long,
},
.dragonfly, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
.dragonfly, .freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
sec: isize,
nsec: isize,
},
@ -134,7 +134,7 @@ pub const dev_t = switch (native_os) {
.linux => linux.dev_t,
.emscripten => emscripten.dev_t,
.wasi => wasi.device_t,
.openbsd, .haiku, .illumos, .macos, .ios, .tvos, .watchos, .visionos => i32,
.openbsd, .haiku, .illumos, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => i32,
// https://github.com/SerenityOS/serenity/blob/b98f537f117b341788023ab82e0c11ca9ae29a57/Kernel/API/POSIX/sys/types.h#L43
.netbsd, .freebsd, .serenity => u64,
else => void,
@ -145,7 +145,7 @@ pub const mode_t = switch (native_os) {
.emscripten => emscripten.mode_t,
.openbsd, .haiku, .netbsd, .illumos, .wasi, .windows => u32,
// https://github.com/SerenityOS/serenity/blob/b98f537f117b341788023ab82e0c11ca9ae29a57/Kernel/API/POSIX/sys/types.h#L44
.freebsd, .macos, .ios, .tvos, .watchos, .visionos, .dragonfly, .serenity => u16,
.freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .dragonfly, .serenity => u16,
else => u0,
};
@ -194,7 +194,7 @@ pub const passwd = switch (native_os) {
dir: ?[*:0]const u8, // home directory
shell: ?[*:0]const u8, // shell program
},
.netbsd, .openbsd, .macos => extern struct {
.netbsd, .openbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
name: ?[*:0]const u8, // user name
passwd: ?[*:0]const u8, // encrypted password
uid: uid_t, // user uid
@ -223,7 +223,7 @@ pub const passwd = switch (native_os) {
};
pub const group = switch (native_os) {
.linux, .freebsd, .openbsd, .dragonfly, .netbsd, .macos => extern struct {
.linux, .freebsd, .openbsd, .dragonfly, .netbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
name: ?[*:0]const u8,
passwd: ?[*:0]const u8,
gid: gid_t,
@ -275,7 +275,7 @@ pub const CLOCK = clockid_t;
pub const clockid_t = switch (native_os) {
.linux, .emscripten => linux.clockid_t,
.wasi => wasi.clockid_t,
.macos, .ios, .tvos, .watchos, .visionos => enum(u32) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => enum(u32) {
REALTIME = 0,
MONOTONIC = 6,
MONOTONIC_RAW = 4,
@ -457,7 +457,7 @@ pub const E = switch (native_os) {
DQUOT = 10069,
_,
},
.macos, .ios, .tvos, .watchos, .visionos => darwin.E,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => darwin.E,
.freebsd => freebsd.E,
.illumos => enum(u16) {
/// No error occurred.
@ -833,7 +833,7 @@ pub const F = switch (native_os) {
pub const GETFL = 3;
pub const SETFL = 4;
},
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
/// duplicate file descriptor
pub const DUPFD = 0;
/// get file descriptor flags
@ -1243,7 +1243,7 @@ pub const R_OK = switch (native_os) {
pub const Flock = switch (native_os) {
.linux => linux.Flock,
.emscripten => emscripten.Flock,
.openbsd, .dragonfly, .netbsd, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
.openbsd, .dragonfly, .netbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
start: off_t,
len: off_t,
pid: pid_t,
@ -1294,7 +1294,7 @@ pub const Flock = switch (native_os) {
};
pub const HOST_NAME_MAX = switch (native_os) {
.linux => linux.HOST_NAME_MAX,
.macos, .ios, .tvos, .watchos, .visionos => 72,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => 72,
.openbsd, .haiku, .dragonfly, .netbsd, .illumos, .freebsd => 255,
// https://github.com/SerenityOS/serenity/blob/c87557e9c1865fa1a6440de34ff6ce6fc858a2b7/Kernel/API/POSIX/sys/limits.h#L22
.serenity => 64,
@ -1305,7 +1305,7 @@ pub const IOV_MAX = switch (native_os) {
.emscripten => emscripten.IOV_MAX,
// https://github.com/SerenityOS/serenity/blob/098af0f846a87b651731780ff48420205fd33754/Kernel/API/POSIX/sys/uio.h#L16
.openbsd, .haiku, .illumos, .wasi, .serenity => 1024,
.macos, .ios, .tvos, .watchos, .visionos => 16,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => 16,
.dragonfly, .netbsd, .freebsd => KERN.IOV_MAX,
else => {},
};
@ -1524,7 +1524,7 @@ pub const KERN = switch (native_os) {
pub const MADV = switch (native_os) {
.linux => linux.MADV,
.emscripten => emscripten.MADV,
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const NORMAL = 0;
pub const RANDOM = 1;
pub const SEQUENTIAL = 2;
@ -1622,7 +1622,7 @@ pub const MLOCK = switch (native_os) {
pub const MSF = switch (native_os) {
.linux => linux.MSF,
.emscripten => emscripten.MSF,
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const ASYNC = 0x1;
pub const INVALIDATE = 0x2;
/// invalidate, leave mapped
@ -1651,7 +1651,7 @@ pub const NAME_MAX = switch (native_os) {
// character, but POSIX definition says that NAME_MAX does not include the
// terminating null.
// https://github.com/SerenityOS/serenity/blob/c87557e9c1865fa1a6440de34ff6ce6fc858a2b7/Kernel/API/POSIX/sys/limits.h#L20
.haiku, .openbsd, .dragonfly, .netbsd, .illumos, .freebsd, .macos, .ios, .tvos, .watchos, .visionos, .serenity => 255,
.haiku, .openbsd, .dragonfly, .netbsd, .illumos, .freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .serenity => 255,
else => {},
};
pub const PATH_MAX = switch (native_os) {
@ -1659,7 +1659,7 @@ pub const PATH_MAX = switch (native_os) {
.emscripten => emscripten.PATH_MAX,
.wasi => 4096,
.windows => 260,
.openbsd, .haiku, .dragonfly, .netbsd, .illumos, .freebsd, .macos, .ios, .tvos, .watchos, .visionos, .serenity => 1024,
.openbsd, .haiku, .dragonfly, .netbsd, .illumos, .freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .serenity => 1024,
else => {},
};
@ -1676,7 +1676,7 @@ pub const POLL = switch (native_os) {
pub const NVAL = 0x4000;
},
.windows => ws2_32.POLL,
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const IN = 0x001;
pub const PRI = 0x002;
pub const OUT = 0x004;
@ -1823,7 +1823,7 @@ pub const PROT = switch (native_os) {
/// page can be executed
pub const EXEC = 0x4;
},
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
/// [MC2] no permissions
pub const NONE: vm_prot_t = 0x00;
/// [MC2] pages can be read
@ -1846,7 +1846,7 @@ pub const RLIM = switch (native_os) {
.linux => linux.RLIM,
.emscripten => emscripten.RLIM,
// https://github.com/SerenityOS/serenity/blob/aae106e37b48f2158e68902293df1e4bf7b80c0f/Userland/Libraries/LibC/sys/resource.h#L52
.openbsd, .haiku, .dragonfly, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos, .serenity => struct {
.openbsd, .haiku, .dragonfly, .netbsd, .freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .serenity => struct {
/// No limit
pub const INFINITY: rlim_t = (1 << 63) - 1;
@ -1903,7 +1903,7 @@ pub const S = switch (native_os) {
return m & IFMT == IFSOCK;
}
},
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const IFMT = 0o170000;
pub const IFIFO = 0o010000;
@ -2396,7 +2396,7 @@ pub const S = switch (native_os) {
pub const SA = switch (native_os) {
.linux => linux.SA,
.emscripten => emscripten.SA,
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
/// take signal on signal stack
pub const ONSTACK = 0x0001;
/// restart system on signal return
@ -2502,7 +2502,7 @@ pub const _SC = if (builtin.abi.isAndroid()) enum(c_int) {
PAGESIZE = 39,
NPROCESSORS_ONLN = 97,
} else switch (native_os) {
.driverkit, .ios, .macos, .tvos, .visionos, .watchos => enum(c_int) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => enum(c_int) {
PAGESIZE = 29,
},
.dragonfly => enum(c_int) {
@ -2562,7 +2562,7 @@ pub const SEEK = switch (native_os) {
pub const END: wasi.whence_t = .END;
},
// https://github.com/SerenityOS/serenity/blob/808ce594db1f2190e5212a250e900bde2ffe710b/Kernel/API/POSIX/stdio.h#L15-L17
.openbsd, .haiku, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos, .windows, .serenity => struct {
.openbsd, .haiku, .netbsd, .freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .windows, .serenity => struct {
pub const SET = 0;
pub const CUR = 1;
pub const END = 2;
@ -2622,7 +2622,7 @@ pub const SIG = switch (native_os) {
/// Signal error value (returned by signal call on error)
pub const ERR = -1;
},
.macos, .ios, .tvos, .watchos, .visionos => enum(u32) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => enum(u32) {
pub const ERR: ?Sigaction.handler_fn = @ptrFromInt(maxInt(usize));
pub const DFL: ?Sigaction.handler_fn = @ptrFromInt(0);
pub const IGN: ?Sigaction.handler_fn = @ptrFromInt(1);
@ -3185,7 +3185,7 @@ pub const Sigaction = switch (native_os) {
else => common_linux_Sigaction,
},
.emscripten => emscripten.Sigaction,
.netbsd, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
.netbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
pub const handler_fn = *align(1) const fn (SIG) callconv(.c) void;
pub const sigaction_fn = *const fn (SIG, *const siginfo_t, ?*anyopaque) callconv(.c) void;
@ -3273,7 +3273,7 @@ pub const Sigaction = switch (native_os) {
};
pub const T = switch (native_os) {
.linux => linux.T,
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const IOCGWINSZ = ior(0x40000000, 't', 104, @sizeOf(winsize));
fn ior(inout: u32, group_arg: usize, num: usize, len: usize) usize {
@ -3664,7 +3664,7 @@ pub const T = switch (native_os) {
};
pub const IOCPARM_MASK = switch (native_os) {
.windows => ws2_32.IOCPARM_MASK,
.macos, .ios, .tvos, .watchos, .visionos => 0x1fff,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => 0x1fff,
else => void,
};
pub const TCSA = std.posix.TCSA;
@ -3679,7 +3679,7 @@ pub const VDSO = switch (native_os) {
pub const W = switch (native_os) {
.linux => linux.W,
.emscripten => emscripten.W,
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
/// [XSI] no hang in wait/no child to reap
pub const NOHANG = 0x00000001;
/// [XSI] notify on stop, untraced child
@ -3939,7 +3939,7 @@ pub const accept_filter_arg = switch (native_os) {
// https://github.com/DragonFlyBSD/DragonFlyBSD/blob/6098912863ed4c7b3f70d7483910ce2956cf4ed3/sys/sys/socket.h#L164
// https://github.com/NetBSD/src/blob/cad5c68a8524927f65e22ad651de3905382be6e0/sys/sys/socket.h#L188
// https://github.com/apple/darwin-xnu/blob/2ff845c2e033bd0ff64b5b6aa6063a1f8f65aa32/bsd/sys/socket.h#L504
.freebsd, .dragonfly, .netbsd, .macos, .driverkit, .ios, .tvos, .watchos, .visionos => extern struct {
.freebsd, .dragonfly, .netbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
name: [16]u8,
arg: [240]u8,
},
@ -3948,7 +3948,7 @@ pub const accept_filter_arg = switch (native_os) {
pub const clock_t = switch (native_os) {
.linux => linux.clock_t,
.emscripten => emscripten.clock_t,
.macos, .ios, .tvos, .watchos, .visionos => c_ulong,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => c_ulong,
.freebsd => isize,
.openbsd, .illumos => i64,
.netbsd => u32,
@ -4034,7 +4034,7 @@ pub const in_pktinfo = switch (native_os) {
.linux => linux.in_pktinfo,
// https://github.com/illumos/illumos-gate/blob/608eb926e14f4ba4736b2d59e891335f1cba9e1e/usr/src/uts/common/netinet/in.h#L1132
// https://github.com/apple/darwin-xnu/blob/2ff845c2e033bd0ff64b5b6aa6063a1f8f65aa32/bsd/netinet/in.h#L696
.illumos, .driverkit, .ios, .macos, .tvos, .watchos, .visionos => extern struct {
.illumos, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
ifindex: u32,
spec_dst: u32,
addr: u32,
@ -4051,7 +4051,7 @@ pub const in6_pktinfo = switch (native_os) {
// https://github.com/apple/darwin-xnu/blob/2ff845c2e033bd0ff64b5b6aa6063a1f8f65aa32/bsd/netinet6/in6.h#L737
// https://github.com/haiku/haiku/blob/2aab5f5f14aeb3f34c3a3d9a9064cc3c0d914bea/headers/posix/netinet6/in6.h#L63
// https://github.com/SerenityOS/serenity/blob/5bd8af99be0bc4b2e14f361fd7d7590e6bcfa4d6/Kernel/API/POSIX/sys/socket.h#L122
.freebsd, .dragonfly, .netbsd, .openbsd, .illumos, .driverkit, .ios, .macos, .tvos, .watchos, .visionos, .haiku, .serenity => extern struct {
.freebsd, .dragonfly, .netbsd, .openbsd, .illumos, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .haiku, .serenity => extern struct {
addr: [16]u8,
ifindex: u32,
},
@ -4084,10 +4084,11 @@ pub const linger = switch (native_os) {
// https://github.com/apple/darwin-xnu/blob/2ff845c2e033bd0ff64b5b6aa6063a1f8f65aa32/bsd/sys/socket.h#L498
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.watchos,
.visionos,
.watchos,
=> extern struct {
onoff: i32, // non-zero to linger on close
linger: i32, // time to linger in seconds
@ -4104,9 +4105,10 @@ pub const msghdr = switch (native_os) {
.netbsd,
.haiku,
.illumos,
.macos,
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
.watchos,
@ -4139,9 +4141,10 @@ pub const msghdr_const = switch (native_os) {
.netbsd,
.haiku,
.illumos,
.macos,
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
.watchos,
@ -4191,9 +4194,10 @@ pub const cmsghdr = switch (native_os) {
// https://github.com/haiku/haiku/blob/b54f586058fd6623645512e4631468cede9933b9/headers/posix/sys/socket.h#L132
.haiku,
// https://github.com/apple/darwin-xnu/blob/2ff845c2e033bd0ff64b5b6aa6063a1f8f65aa32/bsd/sys/socket.h#L1041
.macos,
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
.watchos,
@ -4215,7 +4219,7 @@ pub const nfds_t = switch (native_os) {
.emscripten => emscripten.nfds_t,
.haiku, .illumos, .wasi => usize,
.windows => c_ulong,
.openbsd, .dragonfly, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => u32,
.openbsd, .dragonfly, .netbsd, .freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => u32,
// https://github.com/SerenityOS/serenity/blob/265764ff2fec038855193296588a887fc322d76a/Kernel/API/POSIX/poll.h#L32
.serenity => c_uint,
else => void,
@ -4251,7 +4255,7 @@ pub const pollfd = switch (native_os) {
pub const rlim_t = switch (native_os) {
.linux => linux.rlim_t,
.emscripten => emscripten.rlim_t,
.openbsd, .netbsd, .illumos, .macos, .ios, .tvos, .watchos, .visionos => u64,
.openbsd, .netbsd, .illumos, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => u64,
.haiku, .dragonfly, .freebsd => i64,
// https://github.com/SerenityOS/serenity/blob/aae106e37b48f2158e68902293df1e4bf7b80c0f/Userland/Libraries/LibC/sys/resource.h#L54
.serenity => usize,
@ -4271,7 +4275,7 @@ pub const rlimit = switch (native_os) {
pub const rlimit_resource = switch (native_os) {
.linux => linux.rlimit_resource,
.emscripten => emscripten.rlimit_resource,
.openbsd, .macos, .ios, .tvos, .watchos, .visionos => enum(c_int) {
.openbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => enum(c_int) {
CPU = 0,
FSIZE = 1,
DATA = 2,
@ -4378,7 +4382,7 @@ pub const rlimit_resource = switch (native_os) {
pub const rusage = switch (native_os) {
.linux => linux.rusage,
.emscripten => emscripten.rusage,
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
utime: timeval,
stime: timeval,
maxrss: isize,
@ -4449,7 +4453,7 @@ pub const rusage = switch (native_os) {
pub const siginfo_t = switch (native_os) {
.linux => linux.siginfo_t,
.emscripten => emscripten.siginfo_t,
.driverkit, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
signo: SIG,
errno: c_int,
code: c_int,
@ -4639,7 +4643,7 @@ pub const sigset_t = switch (native_os) {
.emscripten => emscripten.sigset_t,
// https://github.com/SerenityOS/serenity/blob/ec492a1a0819e6239ea44156825c4ee7234ca3db/Kernel/API/POSIX/signal.h#L19
.openbsd, .serenity => u32,
.macos, .ios, .tvos, .watchos, .visionos => darwin.sigset_t,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => darwin.sigset_t,
.dragonfly, .netbsd, .illumos, .freebsd => extern struct {
__bits: [SIG.WORDS]u32,
},
@ -4669,7 +4673,7 @@ pub const addrinfo = if (builtin.abi.isAndroid()) extern struct {
} else switch (native_os) {
.linux, .emscripten => linux.addrinfo,
.windows => ws2_32.addrinfo,
.freebsd, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
.freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
flags: AI,
family: i32,
socktype: i32,
@ -4735,7 +4739,7 @@ pub const addrinfo = if (builtin.abi.isAndroid()) extern struct {
pub const sockaddr = switch (native_os) {
.linux, .emscripten => linux.sockaddr,
.windows => ws2_32.sockaddr,
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
len: u8,
family: sa_family_t,
data: [14]u8,
@ -5077,7 +5081,7 @@ pub const in_port_t = u16;
pub const sa_family_t = switch (native_os) {
.linux, .emscripten => linux.sa_family_t,
.windows => ws2_32.ADDRESS_FAMILY,
.openbsd, .haiku, .dragonfly, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => u8,
.openbsd, .haiku, .dragonfly, .netbsd, .freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => u8,
// https://github.com/SerenityOS/serenity/blob/ac44ec5ebc707f9dd0c3d4759a1e17e91db5d74f/Kernel/API/POSIX/sys/socket.h#L66
.illumos, .serenity => u16,
else => void,
@ -5130,7 +5134,7 @@ pub const AF = if (builtin.abi.isAndroid()) struct {
} else switch (native_os) {
.linux, .emscripten => linux.AF,
.windows => ws2_32.AF,
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const UNSPEC = 0;
pub const LOCAL = 1;
pub const UNIX = LOCAL;
@ -5416,7 +5420,7 @@ pub const PF = if (builtin.abi.isAndroid()) struct {
pub const PF_MAX = AF.MAX;
} else switch (native_os) {
.linux, .emscripten => linux.PF,
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const UNSPEC = AF.UNSPEC;
pub const LOCAL = AF.LOCAL;
pub const UNIX = PF.LOCAL;
@ -5650,7 +5654,7 @@ pub const PF = if (builtin.abi.isAndroid()) struct {
pub const DT = switch (native_os) {
.linux => linux.DT,
// https://github.com/SerenityOS/serenity/blob/1262a7d1424d0d2e89d80644409721cbf056ab17/Kernel/API/POSIX/dirent.h#L16-L35
.netbsd, .freebsd, .openbsd, .macos, .ios, .tvos, .watchos, .visionos, .serenity => struct {
.netbsd, .freebsd, .openbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .serenity => struct {
pub const UNKNOWN = 0;
pub const FIFO = 1;
pub const CHR = 2;
@ -5679,7 +5683,7 @@ pub const MSG = switch (native_os) {
.linux => linux.MSG,
.emscripten => emscripten.MSG,
.windows => ws2_32.MSG,
.driverkit, .macos, .ios, .tvos, .watchos, .visionos => darwin.MSG,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => darwin.MSG,
.haiku => struct {
pub const OOB = 0x0001;
pub const PEEK = 0x0002;
@ -5796,7 +5800,7 @@ pub const SOCK = switch (native_os) {
.linux => linux.SOCK,
.emscripten => emscripten.SOCK,
.windows => ws2_32.SOCK,
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const STREAM = 1;
pub const DGRAM = 2;
pub const RAW = 3;
@ -5897,7 +5901,7 @@ pub const SOCK = switch (native_os) {
else => void,
};
pub const TCP = switch (native_os) {
.macos => darwin.TCP,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => darwin.TCP,
.linux => linux.TCP,
.emscripten => emscripten.TCP,
.windows => ws2_32.TCP,
@ -5911,7 +5915,7 @@ pub const TCP = switch (native_os) {
pub const IPPROTO = switch (native_os) {
.linux, .emscripten => linux.IPPROTO,
.windows => ws2_32.IPPROTO,
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const ICMP = 1;
pub const ICMPV6 = 58;
pub const TCP = 6;
@ -6543,7 +6547,7 @@ pub const SOL = switch (native_os) {
.linux => linux.SOL,
.emscripten => emscripten.SOL,
.windows => ws2_32.SOL,
.openbsd, .haiku, .dragonfly, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => struct {
.openbsd, .haiku, .dragonfly, .netbsd, .freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const SOCKET = 0xffff;
},
.illumos => struct {
@ -6562,7 +6566,7 @@ pub const SO = switch (native_os) {
.linux => linux.SO,
.emscripten => emscripten.SO,
.windows => ws2_32.SO,
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const DEBUG = 0x0001;
pub const ACCEPTCONN = 0x0002;
pub const REUSEADDR = 0x0004;
@ -6807,7 +6811,7 @@ pub const SOMAXCONN = switch (native_os) {
// https://github.com/NetBSD/src/blob/a673fb3f8487e974c669216064f7588207229fea/sys/sys/socket.h#L472
// https://github.com/openbsd/src/blob/8ba9cd88f10123fef7af805b8e5ccc2463ad8fa4/sys/sys/socket.h#L483
// https://github.com/apple/darwin-xnu/blob/2ff845c2e033bd0ff64b5b6aa6063a1f8f65aa32/bsd/sys/socket.h#L815
.freebsd, .dragonfly, .netbsd, .openbsd, .driverkit, .macos, .ios, .tvos, .watchos, .visionos => 128,
.freebsd, .dragonfly, .netbsd, .openbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => 128,
else => void,
};
pub const SCM = switch (native_os) {
@ -6856,7 +6860,7 @@ pub const SCM = switch (native_os) {
pub const TIMESTAMP = 0x04;
},
// https://github.com/apple/darwin-xnu/blob/2ff845c2e033bd0ff64b5b6aa6063a1f8f65aa32/bsd/sys/socket.h#L1114
.driverkit, .macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const RIGHTS = 1;
pub const TIMESTAMP = 2;
pub const CREDS = 3;
@ -6870,7 +6874,7 @@ pub const IFNAMESIZE = switch (native_os) {
.emscripten => emscripten.IFNAMESIZE,
.windows => 30,
// https://github.com/SerenityOS/serenity/blob/9882848e0bf783dfc8e8a6d887a848d70d9c58f4/Kernel/API/POSIX/net/if.h#L50
.openbsd, .dragonfly, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos, .serenity => 16,
.openbsd, .dragonfly, .netbsd, .freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .serenity => 16,
.illumos => 32,
else => {},
};
@ -6921,7 +6925,7 @@ pub const timeval = switch (native_os) {
sec: c_long,
usec: c_long,
},
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
sec: c_long,
usec: i32,
},
@ -6941,7 +6945,7 @@ pub const timeval = switch (native_os) {
pub const timezone = switch (native_os) {
.linux => linux.timezone,
.emscripten => emscripten.timezone,
.openbsd, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
.openbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
minuteswest: i32,
dsttime: i32,
},
@ -6968,7 +6972,7 @@ pub const utsname = switch (native_os) {
machine: [256:0]u8,
domainname: [256:0]u8,
},
.macos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
sysname: [255:0]u8,
nodename: [255:0]u8,
release: [255:0]u8,
@ -6999,7 +7003,7 @@ pub const _errno = switch (native_os) {
.emscripten => private.__errno_location,
.wasi, .dragonfly => private.errnoFromThreadLocal,
.windows => private._errno,
.macos, .ios, .tvos, .watchos, .visionos, .freebsd => private.__error,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .freebsd => private.__error,
.illumos => private.___errno,
.openbsd, .netbsd => private.__errno,
.haiku => haiku._errnop,
@ -7070,7 +7074,7 @@ pub const RTLD = switch (native_os) {
TRACE: bool = false,
_: u22 = 0,
},
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u32) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => packed struct(u32) {
LAZY: bool = false,
NOW: bool = false,
LOCAL: bool = false,
@ -7102,7 +7106,7 @@ pub const dirent = switch (native_os) {
type: u8,
name: [256]u8,
},
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
ino: u64,
seekoff: u64,
reclen: u16,
@ -7246,7 +7250,7 @@ pub const AI = if (builtin.abi.isAndroid()) packed struct(u32) {
ADDRCONFIG: bool = false,
_: u25 = 0,
},
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u32) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => packed struct(u32) {
PASSIVE: bool = false,
CANONNAME: bool = false,
NUMERICHOST: bool = false,
@ -7363,7 +7367,7 @@ pub const EAI = if (builtin.abi.isAndroid()) enum(c_int) {
_,
},
.haiku, .dragonfly, .netbsd, .freebsd, .macos, .ios, .tvos, .watchos, .visionos => enum(c_int) {
.haiku, .dragonfly, .netbsd, .freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => enum(c_int) {
/// address family for hostname not supported
ADDRFAMILY = 1,
/// temporary failure in name resolution
@ -7697,7 +7701,7 @@ pub const Stat = switch (native_os) {
};
}
},
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
dev: i32,
mode: u16,
nlink: u16,
@ -7940,7 +7944,7 @@ pub const pthread_mutex_t = switch (native_os) {
else => @compileError("unsupported ABI"),
};
},
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
sig: c_long = 0x32AAABA7,
data: [data_len]u8 = [_]u8{0} ** data_len,
@ -7997,7 +8001,7 @@ pub const pthread_cond_t = switch (native_os) {
.linux => extern struct {
data: [48]u8 align(@alignOf(usize)) = [_]u8{0} ** 48,
},
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
sig: c_long = 0x3CB0B1BB,
data: [data_len]u8 = [_]u8{0} ** data_len,
const data_len = if (@sizeOf(usize) == 8) 40 else 24;
@ -8056,7 +8060,7 @@ pub const pthread_rwlock_t = switch (native_os) {
data: [56]u8 align(@alignOf(usize)) = [_]u8{0} ** 56,
},
},
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
sig: c_long = 0x2DA8B3B4,
data: [192]u8 = [_]u8{0} ** 192,
},
@ -8108,7 +8112,7 @@ pub const pthread_attr_t = switch (native_os) {
__size: [56]u8,
__align: c_long,
},
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
__sig: c_long,
__opaque: [56]u8,
},
@ -8136,7 +8140,7 @@ pub const pthread_attr_t = switch (native_os) {
pub const pthread_key_t = switch (native_os) {
.linux, .emscripten => c_uint,
.macos, .ios, .tvos, .watchos, .visionos => c_ulong,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => c_ulong,
// https://github.com/SerenityOS/serenity/blob/b98f537f117b341788023ab82e0c11ca9ae29a57/Kernel/API/POSIX/sys/types.h#L65
.openbsd, .illumos, .serenity => c_int,
else => void,
@ -8169,7 +8173,7 @@ pub const sem_t = switch (native_os) {
.linux, .emscripten => extern struct {
__size: [4 * @sizeOf(usize)]u8 align(@alignOf(usize)),
},
.macos, .ios, .tvos, .watchos, .visionos => c_int,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => c_int,
.freebsd => extern struct {
_magic: u32,
_kern: extern struct {
@ -8213,7 +8217,7 @@ pub const Kevent = switch (native_os) {
data: i64,
udata: usize,
},
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
ident: usize,
filter: i16,
flags: u16,
@ -8293,7 +8297,7 @@ pub const AT = switch (native_os) {
/// Remove directory instead of unlinking file
pub const REMOVEDIR = 0x200;
},
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const FDCWD = -2;
/// Use effective ids in access check
pub const EACCESS = 0x0010;
@ -8548,7 +8552,7 @@ pub const O = switch (native_os) {
DIRECTORY: bool = false,
_: u10 = 0,
},
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u32) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => packed struct(u32) {
ACCMODE: std.posix.ACCMODE = .RDONLY,
NONBLOCK: bool = false,
APPEND: bool = false,
@ -8727,7 +8731,7 @@ pub const MAP = switch (native_os) {
NORESERVE: bool = false,
_: u27 = 0,
},
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u32) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => packed struct(u32) {
TYPE: enum(u4) {
SHARED = 0x01,
PRIVATE = 0x02,
@ -8812,7 +8816,7 @@ pub const cc_t = u8;
/// Indices into the `cc` array in the `termios` struct.
pub const V = switch (native_os) {
.linux => linux.V,
.macos, .ios, .tvos, .watchos, .visionos, .netbsd, .openbsd => enum {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .netbsd, .openbsd => enum {
EOF,
EOL,
EOL2,
@ -8932,7 +8936,7 @@ pub const V = switch (native_os) {
pub const NCCS = switch (native_os) {
.linux => linux.NCCS,
.macos, .ios, .tvos, .watchos, .visionos, .freebsd, .netbsd, .openbsd, .dragonfly => 20,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .freebsd, .netbsd, .openbsd, .dragonfly => 20,
.haiku => 11,
.illumos => 19,
// https://github.com/SerenityOS/serenity/blob/d277cdfd4c7ed21d5248a83217ae03b9f890c3c8/Kernel/API/POSIX/termios.h#L15
@ -8942,7 +8946,7 @@ pub const NCCS = switch (native_os) {
pub const termios = switch (native_os) {
.linux => linux.termios,
.macos, .ios, .tvos, .watchos, .visionos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
iflag: tc_iflag_t,
oflag: tc_oflag_t,
cflag: tc_cflag_t,
@ -8993,7 +8997,7 @@ pub const termios = switch (native_os) {
pub const tc_iflag_t = switch (native_os) {
.linux => linux.tc_iflag_t,
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u64) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => packed struct(u64) {
IGNBRK: bool = false,
BRKINT: bool = false,
IGNPAR: bool = false,
@ -9104,7 +9108,7 @@ pub const tc_iflag_t = switch (native_os) {
pub const tc_oflag_t = switch (native_os) {
.linux => linux.tc_oflag_t,
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u64) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => packed struct(u64) {
OPOST: bool = false,
ONLCR: bool = false,
OXTABS: bool = false,
@ -9202,7 +9206,7 @@ pub const CSIZE = switch (native_os) {
pub const tc_cflag_t = switch (native_os) {
.linux => linux.tc_cflag_t,
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u64) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => packed struct(u64) {
CIGNORE: bool = false,
_1: u5 = 0,
CSTOPB: bool = false,
@ -9351,7 +9355,7 @@ pub const tc_cflag_t = switch (native_os) {
pub const tc_lflag_t = switch (native_os) {
.linux => linux.tc_lflag_t,
.macos, .ios, .tvos, .watchos, .visionos => packed struct(u64) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => packed struct(u64) {
ECHOKE: bool = false,
ECHOE: bool = false,
ECHOK: bool = false,
@ -9498,7 +9502,7 @@ pub const tc_lflag_t = switch (native_os) {
pub const speed_t = switch (native_os) {
.linux => linux.speed_t,
.macos, .ios, .tvos, .watchos, .visionos, .openbsd => enum(u64) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .openbsd => enum(u64) {
B0 = 0,
B50 = 50,
B75 = 75,
@ -9693,7 +9697,7 @@ pub const NSIG = switch (native_os) {
.windows => 23,
.haiku => 65,
.netbsd, .freebsd => 32,
.macos => darwin.NSIG,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => darwin.NSIG,
.illumos => 75,
// https://github.com/SerenityOS/serenity/blob/046c23f567a17758d762a33bdf04bacbfd088f9f/Kernel/API/POSIX/signal_numbers.h#L42
.openbsd, .serenity => 33,
@ -9701,7 +9705,7 @@ pub const NSIG = switch (native_os) {
};
pub const MINSIGSTKSZ = switch (native_os) {
.macos, .ios, .tvos, .watchos, .visionos => 32768,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => 32768,
.freebsd => switch (builtin.cpu.arch) {
.powerpc64, .powerpc64le, .x86, .x86_64 => 2048,
.arm, .aarch64, .riscv64 => 4096,
@ -9715,7 +9719,7 @@ pub const MINSIGSTKSZ = switch (native_os) {
else => {},
};
pub const SIGSTKSZ = switch (native_os) {
.macos, .ios, .tvos, .watchos, .visionos => 131072,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => 131072,
.netbsd, .freebsd => MINSIGSTKSZ + 32768,
.illumos => 8192,
.haiku => 16384,
@ -9726,7 +9730,7 @@ pub const SIGSTKSZ = switch (native_os) {
};
pub const SS = switch (native_os) {
.linux => linux.SS,
.openbsd, .macos, .ios, .tvos, .watchos, .visionos, .netbsd, .freebsd => struct {
.openbsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .netbsd, .freebsd => struct {
pub const ONSTACK = 1;
pub const DISABLE = 4;
},
@ -9739,7 +9743,7 @@ pub const SS = switch (native_os) {
};
pub const EV = switch (native_os) {
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
/// add event to kq (implies enable)
pub const ADD = 0x0001;
/// delete event from kq
@ -9879,7 +9883,7 @@ pub const EV = switch (native_os) {
};
pub const EVFILT = switch (native_os) {
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
pub const READ = -1;
pub const WRITE = -2;
/// attached to aio requests
@ -10002,7 +10006,7 @@ pub const EVFILT = switch (native_os) {
};
pub const NOTE = switch (native_os) {
.macos, .ios, .tvos, .watchos, .visionos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => struct {
/// On input, TRIGGER causes the event to be triggered for output.
pub const TRIGGER = 0x01000000;
/// ignore input fflags
@ -10293,7 +10297,7 @@ pub extern "c" fn sigwait(set: ?*sigset_t, sig: ?*c_int) c_int;
pub extern "c" fn alarm(seconds: c_uint) c_uint;
pub const close = switch (native_os) {
.macos, .ios, .tvos, .watchos, .visionos => darwin.@"close$NOCANCEL",
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => darwin.@"close$NOCANCEL",
else => private.close,
};
@ -10308,7 +10312,7 @@ pub const clock_gettime = switch (native_os) {
};
pub const fstat = switch (native_os) {
.macos => switch (native_arch) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => switch (native_arch) {
.x86_64 => private.@"fstat$INODE64",
else => private.fstat,
},
@ -10317,7 +10321,7 @@ pub const fstat = switch (native_os) {
};
pub const fstatat = switch (native_os) {
.macos => switch (native_arch) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => switch (native_arch) {
.x86_64 => private.@"fstatat$INODE64",
else => private.fstatat,
},
@ -10351,7 +10355,7 @@ pub extern "c" fn setrlimit64(resource: rlimit_resource, rlim: *const rlimit) c_
pub const arc4random_buf = switch (native_os) {
.linux => if (builtin.abi.isAndroid()) private.arc4random_buf else {},
.dragonfly, .netbsd, .freebsd, .illumos, .openbsd, .serenity, .macos, .ios, .tvos, .watchos, .visionos => private.arc4random_buf,
.dragonfly, .netbsd, .freebsd, .illumos, .openbsd, .serenity, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => private.arc4random_buf,
else => {},
};
pub const getentropy = switch (native_os) {
@ -10404,7 +10408,7 @@ pub extern "c" fn ftruncate64(fd: c_int, length: off_t) c_int;
pub extern "c" fn fallocate(fd: fd_t, mode: c_int, offset: off_t, len: off_t) c_int;
pub const sendfile = switch (native_os) {
.freebsd => freebsd.sendfile,
.macos, .ios, .tvos, .watchos, .visionos => darwin.sendfile,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => darwin.sendfile,
.linux => private.sendfile,
else => {},
};
@ -10445,7 +10449,7 @@ pub extern "c" fn madvise(
) c_int;
pub const getdirentries = switch (native_os) {
.macos, .ios, .tvos, .watchos, .visionos => private.__getdirentries64,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => private.__getdirentries64,
else => private.getdirentries,
};
@ -10500,7 +10504,7 @@ pub const nanosleep = switch (native_os) {
};
pub const readdir = switch (native_os) {
.macos => switch (native_arch) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => switch (native_arch) {
.x86_64 => private.@"readdir$INODE64",
else => private.readdir,
},
@ -10509,7 +10513,7 @@ pub const readdir = switch (native_os) {
};
pub const realpath = switch (native_os) {
.macos, .ios, .tvos, .watchos, .visionos => private.@"realpath$DARWIN_EXTSN",
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => private.@"realpath$DARWIN_EXTSN",
else => private.realpath,
};
@ -10573,7 +10577,7 @@ pub const socketpair = switch (native_os) {
};
pub const stat = switch (native_os) {
.macos => switch (native_arch) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => switch (native_arch) {
.x86_64 => private.@"stat$INODE64",
else => private.stat,
},
@ -10585,7 +10589,7 @@ pub const _msize = switch (native_os) {
else => {},
};
pub const malloc_size = switch (native_os) {
.macos, .ios, .tvos, .watchos, .visionos, .serenity => private.malloc_size,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .serenity => private.malloc_size,
else => {},
};
pub const malloc_usable_size = switch (native_os) {
@ -10593,7 +10597,7 @@ pub const malloc_usable_size = switch (native_os) {
else => {},
};
pub const posix_memalign = switch (native_os) {
.dragonfly, .netbsd, .freebsd, .illumos, .openbsd, .linux, .macos, .ios, .tvos, .watchos, .visionos, .serenity => private.posix_memalign,
.dragonfly, .netbsd, .freebsd, .illumos, .openbsd, .linux, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .serenity => private.posix_memalign,
else => {},
};
pub const sysconf = switch (native_os) {
@ -10602,7 +10606,7 @@ pub const sysconf = switch (native_os) {
};
pub const sf_hdtr = switch (native_os) {
.freebsd, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
.freebsd, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => extern struct {
headers: ?[*]const iovec_const,
hdr_cnt: c_int,
trailers: ?[*]const iovec_const,
@ -10661,15 +10665,17 @@ pub extern "c" fn wait4(pid: pid_t, status: ?*c_int, options: c_int, ru: ?*rusag
pub const fork = switch (native_os) {
.dragonfly,
.freebsd,
.ios,
.linux,
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
.watchos,
.netbsd,
.openbsd,
.illumos,
.tvos,
.watchos,
.visionos,
.haiku,
.serenity,
=> private.fork,
@ -10813,7 +10819,7 @@ pub extern "c" fn pthread_getspecific(key: pthread_key_t) ?*anyopaque;
pub extern "c" fn pthread_setspecific(key: pthread_key_t, value: ?*anyopaque) c_int;
pub extern "c" fn pthread_sigmask(how: c_int, set: *const sigset_t, oldset: *sigset_t) c_int;
pub const pthread_setname_np = switch (native_os) {
.macos, .ios, .tvos, .watchos, .visionos => darwin.pthread_setname_np,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => darwin.pthread_setname_np,
.illumos => illumos.pthread_setname_np,
.netbsd => netbsd.pthread_setname_np,
else => private.pthread_setname_np,
@ -10823,7 +10829,7 @@ pub extern "c" fn pthread_getname_np(thread: pthread_t, name: [*:0]u8, len: usiz
pub extern "c" fn pthread_kill(pthread_t, signal: SIG) c_int;
pub const pthread_threadid_np = switch (native_os) {
.macos, .ios, .tvos, .watchos, .visionos => private.pthread_threadid_np,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => private.pthread_threadid_np,
else => {},
};
@ -10831,7 +10837,7 @@ pub const caddr_t = ?[*]u8;
pub const ptrace = switch (native_os) {
.linux, .serenity => private.ptrace,
.macos, .ios, .tvos, .watchos, .visionos => darwin.ptrace,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => darwin.ptrace,
.dragonfly => dragonfly.ptrace,
.freebsd => freebsd.ptrace,
.netbsd => netbsd.ptrace,
@ -10850,7 +10856,7 @@ pub extern "c" fn sem_timedwait(sem: *sem_t, abs_timeout: *const timespec) c_int
pub extern "c" fn sem_getvalue(sem: *sem_t, sval: *c_int) c_int;
pub const shm_open = switch (native_os) {
.driverkit, .macos, .ios, .tvos, .watchos, .visionos => darwin.shm_open,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => darwin.shm_open,
else => private.shm_open,
};
pub extern "c" fn shm_unlink(name: [*:0]const u8) c_int;

View file

@ -73,7 +73,7 @@ pub const RescanError = RescanLinuxError || RescanMacError || RescanWithPathErro
pub fn rescan(cb: *Bundle, gpa: Allocator, io: Io, now: Io.Timestamp) RescanError!void {
switch (builtin.os.tag) {
.linux => return rescanLinux(cb, gpa, io, now),
.macos => return rescanMac(cb, gpa, io, now),
.maccatalyst, .macos => return rescanMac(cb, gpa, io, now),
.freebsd, .openbsd => return rescanWithPath(cb, gpa, io, now, "/etc/ssl/cert.pem"),
.netbsd => return rescanWithPath(cb, gpa, io, now, "/etc/openssl/certs/ca-certificates.crt"),
.dragonfly => return rescanWithPath(cb, gpa, io, now, "/usr/local/etc/ssl/cert.pem"),

View file

@ -1392,6 +1392,7 @@ pub const have_segfault_handling_support = switch (native_os) {
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
@ -1487,6 +1488,7 @@ fn handleSegfaultPosix(sig: posix.SIG, info: *const posix.siginfo_t, ctx_ptr: ?*
.freebsd,
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,

View file

@ -2131,7 +2131,7 @@ const signal_ucontext_t = switch (native_os) {
},
},
// https://github.com/ziglang/zig/blob/60be67d3c0ba6ae15fa7115596734ab1e74fbcd3/lib/libc/include/any-macos-any/sys/_types/_ucontext.h
.driverkit, .macos, .ios, .tvos, .watchos, .visionos => extern struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .watchos, .visionos => extern struct {
_onstack: i32,
_sigmask: std.c.sigset_t,
_stack: std.c.stack_t,

View file

@ -16,7 +16,7 @@ pub const DynLib = struct {
else
DlDynLib,
.windows => WindowsDynLib,
.macos, .tvos, .watchos, .ios, .visionos, .freebsd, .netbsd, .openbsd, .dragonfly, .illumos => DlDynLib,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .freebsd, .netbsd, .openbsd, .dragonfly, .illumos => DlDynLib,
else => struct {
const open = @compileError("unsupported platform");
const openZ = @compileError("unsupported platform");
@ -675,7 +675,7 @@ test "dynamic_library" {
const libname = switch (native_os) {
.linux, .freebsd, .openbsd, .illumos => "invalid_so.so",
.windows => "invalid_dll.dll",
.macos, .tvos, .watchos, .ios, .visionos => "invalid_dylib.dylib",
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => "invalid_dylib.dylib",
else => return error.SkipZigTest,
};

View file

@ -52,7 +52,7 @@ pub const GetAppDataDirError = @import("fs/get_app_data_dir.zig").GetAppDataDirE
/// * On other platforms, `[]u8` file paths are opaque sequences of bytes with
/// no particular encoding.
pub const max_path_bytes = switch (native_os) {
.linux, .macos, .ios, .freebsd, .openbsd, .netbsd, .dragonfly, .haiku, .illumos, .plan9, .emscripten, .wasi, .serenity => posix.PATH_MAX,
.linux, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .freebsd, .openbsd, .netbsd, .dragonfly, .haiku, .illumos, .plan9, .emscripten, .wasi, .serenity => posix.PATH_MAX,
// Each WTF-16LE code unit may be expanded to 3 WTF-8 bytes.
// If it would require 4 WTF-8 bytes, then there would be a surrogate
// pair in the WTF-16LE, and we (over)account 3 bytes for it that way.
@ -73,7 +73,7 @@ pub const max_path_bytes = switch (native_os) {
/// On WASI, file name components are encoded as valid UTF-8.
/// On other platforms, `[]u8` components are an opaque sequence of bytes with no particular encoding.
pub const max_name_bytes = switch (native_os) {
.linux, .macos, .ios, .freebsd, .openbsd, .netbsd, .dragonfly, .illumos, .serenity => posix.NAME_MAX,
.linux, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .freebsd, .openbsd, .netbsd, .dragonfly, .illumos, .serenity => posix.NAME_MAX,
// Haiku's NAME_MAX includes the null terminator, so subtract one.
.haiku => posix.NAME_MAX - 1,
// Each WTF-16LE character may be expanded to 3 WTF-8 bytes.

View file

@ -39,7 +39,7 @@ const IteratorError = error{
} || posix.UnexpectedError;
pub const Iterator = switch (native_os) {
.macos, .ios, .freebsd, .netbsd, .dragonfly, .openbsd, .illumos => struct {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .freebsd, .netbsd, .dragonfly, .openbsd, .illumos => struct {
dir: Dir,
seek: i64,
buf: [1024]u8 align(@alignOf(posix.system.dirent)),
@ -55,7 +55,7 @@ pub const Iterator = switch (native_os) {
/// with subsequent calls to `next`, as well as when this `Dir` is deinitialized.
pub fn next(self: *Self) Error!?Entry {
switch (native_os) {
.macos, .ios => return self.nextDarwin(),
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => return self.nextDarwin(),
.freebsd, .netbsd, .dragonfly, .openbsd => return self.nextBsd(),
.illumos => return self.nextIllumos(),
else => @compileError("unimplemented"),
@ -612,8 +612,13 @@ pub fn iterateAssumeFirstIteration(self: Dir) Iterator {
fn iterateImpl(self: Dir, first_iter_start_value: bool) Iterator {
switch (native_os) {
.macos,
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
.watchos,
.freebsd,
.netbsd,
.dragonfly,
@ -1103,7 +1108,7 @@ pub fn deleteFileZ(self: Dir, sub_path_c: [*:0]const u8) DeleteFileError!void {
error.AccessDenied, error.PermissionDenied => |e| switch (native_os) {
// non-Linux POSIX systems return permission errors when trying to delete a
// directory, so we need to handle that case specifically and translate the error
.macos, .ios, .freebsd, .netbsd, .dragonfly, .openbsd, .illumos => {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .freebsd, .netbsd, .dragonfly, .openbsd, .illumos => {
// Don't follow symlinks to match unlinkat (which acts on symlinks rather than follows them)
const fstat = posix.fstatatZ(self.fd, sub_path_c, posix.AT.SYMLINK_NOFOLLOW) catch return e;
const is_dir = fstat.mode & posix.S.IFMT == posix.S.IFDIR;

View file

@ -23,7 +23,7 @@ pub fn getAppDataDir(allocator: mem.Allocator, appname: []const u8) GetAppDataDi
defer allocator.free(local_app_data_dir);
return fs.path.join(allocator, &[_][]const u8{ local_app_data_dir, appname });
},
.macos => {
.maccatalyst, .macos => {
const home_dir = posix.getenv("HOME") orelse {
// TODO look in /etc/passwd
return error.AppDataDirUnavailable;

View file

@ -83,7 +83,7 @@ pub fn defaultQueryPageSize() usize {
@max(std.c.sysconf(@intFromEnum(std.c._SC.PAGESIZE)), 0)
else
std.os.linux.getauxval(std.elf.AT_PAGESZ),
.driverkit, .ios, .macos, .tvos, .visionos, .watchos => {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => {
const task_port = std.c.mach_task_self();
// mach_task_self may fail "if there are any resource failures or other errors".
if (task_port == std.c.TASK.NULL) break :size 0;
@ -155,7 +155,7 @@ const CAllocator = struct {
else {};
pub const supports_posix_memalign = switch (builtin.os.tag) {
.dragonfly, .netbsd, .freebsd, .illumos, .openbsd, .linux, .macos, .ios, .tvos, .watchos, .visionos, .serenity => true,
.dragonfly, .netbsd, .freebsd, .illumos, .openbsd, .linux, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .serenity => true,
else => false,
};
@ -703,7 +703,7 @@ pub fn testAllocatorAlignedShrink(base_allocator: mem.Allocator) !void {
}
const page_size_min_default: ?usize = switch (builtin.os.tag) {
.driverkit, .ios, .macos, .tvos, .visionos, .watchos => switch (builtin.cpu.arch) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => switch (builtin.cpu.arch) {
.x86_64 => 4 << 10,
.aarch64 => 16 << 10,
else => null,
@ -862,7 +862,7 @@ const page_size_min_default: ?usize = switch (builtin.os.tag) {
};
const page_size_max_default: ?usize = switch (builtin.os.tag) {
.driverkit, .ios, .macos, .tvos, .visionos, .watchos => switch (builtin.cpu.arch) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => switch (builtin.cpu.arch) {
.x86_64 => 4 << 10,
.aarch64 => 16 << 10,
else => null,

View file

@ -85,7 +85,7 @@ fn ModfTests(comptime T: type) type {
try expectApproxEqAbs(expected_c, r.fpart, epsilon);
}
test "vector" {
if (builtin.os.tag == .macos and builtin.cpu.arch == .aarch64) return error.SkipZigTest;
if (builtin.os.tag.isDarwin() and builtin.cpu.arch == .aarch64) return error.SkipZigTest;
if (builtin.cpu.arch == .s390x) return error.SkipZigTest;
if (comptime builtin.cpu.has(.loongarch, .lsx)) return error.SkipZigTest; // https://github.com/llvm/llvm-project/issues/159529

View file

@ -74,11 +74,13 @@ pub fn accessW(path: [*:0]const u16) windows.GetFileAttributesError!void {
pub fn isGetFdPathSupportedOnTarget(os: std.Target.Os) bool {
return switch (os.tag) {
.windows,
.macos,
.driverkit,
.ios,
.watchos,
.maccatalyst,
.macos,
.tvos,
.visionos,
.watchos,
.linux,
.illumos,
.freebsd,
@ -113,7 +115,7 @@ pub fn getFdPath(fd: std.posix.fd_t, out_buffer: *[max_path_bytes]u8) std.posix.
const end_index = std.unicode.wtf16LeToWtf8(out_buffer, wide_slice);
return out_buffer[0..end_index];
},
.macos, .ios, .watchos, .tvos, .visionos => {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => {
// On macOS, we can use F.GETPATH fcntl command to query the OS for
// the path to the file descriptor.
@memset(out_buffer[0..max_path_bytes], 0);

View file

@ -861,7 +861,7 @@ pub fn read(fd: fd_t, buf: []u8) ReadError!usize {
// Prevents EINVAL.
const max_count = switch (native_os) {
.linux => 0x7ffff000,
.macos, .ios, .watchos, .tvos, .visionos => maxInt(i32),
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => maxInt(i32),
else => maxInt(isize),
};
while (true) {
@ -1002,7 +1002,7 @@ pub fn pread(fd: fd_t, buf: []u8, offset: u64) PReadError!usize {
// Prevent EINVAL.
const max_count = switch (native_os) {
.linux => 0x7ffff000,
.macos, .ios, .watchos, .tvos, .visionos => maxInt(i32),
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => maxInt(i32),
else => maxInt(isize),
};
@ -1115,7 +1115,7 @@ pub fn ftruncate(fd: fd_t, length: u64) TruncateError!void {
/// On these systems, the read races with concurrent writes to the same file descriptor.
pub fn preadv(fd: fd_t, iov: []const iovec, offset: u64) PReadError!usize {
const have_pread_but_not_preadv = switch (native_os) {
.windows, .macos, .ios, .watchos, .tvos, .visionos, .haiku => true,
.windows, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .haiku => true,
else => false,
};
if (have_pread_but_not_preadv) {
@ -1269,7 +1269,7 @@ pub fn write(fd: fd_t, bytes: []const u8) WriteError!usize {
const max_count = switch (native_os) {
.linux => 0x7ffff000,
.macos, .ios, .watchos, .tvos, .visionos => maxInt(i32),
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => maxInt(i32),
else => maxInt(isize),
};
while (true) {
@ -1433,7 +1433,7 @@ pub fn pwrite(fd: fd_t, bytes: []const u8, offset: u64) PWriteError!usize {
// Prevent EINVAL.
const max_count = switch (native_os) {
.linux => 0x7ffff000,
.macos, .ios, .watchos, .tvos, .visionos => maxInt(i32),
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => maxInt(i32),
else => maxInt(isize),
};
@ -1487,7 +1487,7 @@ pub fn pwrite(fd: fd_t, bytes: []const u8, offset: u64) PWriteError!usize {
/// If `iov.len` is larger than `IOV_MAX`, a partial write will occur.
pub fn pwritev(fd: fd_t, iov: []const iovec_const, offset: u64) PWriteError!usize {
const have_pwrite_but_not_pwritev = switch (native_os) {
.windows, .macos, .ios, .watchos, .tvos, .visionos, .haiku => true,
.windows, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos, .haiku => true,
else => false,
};
@ -1747,7 +1747,7 @@ pub fn execveZ(
.NOTDIR => return error.NotDir,
.TXTBSY => return error.FileBusy,
else => |err| switch (native_os) {
.macos, .ios, .tvos, .watchos, .visionos => switch (err) {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => switch (err) {
.BADEXEC => return error.InvalidExe,
.BADARCH => return error.InvalidExe,
else => return unexpectedErrno(err),
@ -6570,7 +6570,7 @@ pub fn ptrace(request: u32, pid: pid_t, addr: usize, data: usize) PtraceError!vo
else => |err| return unexpectedErrno(err),
},
.macos, .ios, .tvos, .watchos, .visionos => switch (errno(std.c.ptrace(
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => switch (errno(std.c.ptrace(
@enumFromInt(request),
pid,
@ptrFromInt(addr),

View file

@ -521,7 +521,7 @@ test "getrlimit and setrlimit" {
}
test "sigrtmin/max" {
if (native_os == .wasi or native_os == .windows or native_os == .macos) {
if (native_os == .wasi or native_os == .windows or native_os.isDarwin()) {
return error.SkipZigTest;
}
@ -550,7 +550,7 @@ test "sigset empty/full" {
// Some signals (i.e., 32 - 34 on glibc/musl) are not allowed to be added to a
// sigset by the C library, so avoid testing them.
fn reserved_signo(i: usize) bool {
if (native_os == .macos) return false;
if (native_os.isDarwin()) return false;
if (!builtin.link_libc) return false;
const max = if (native_os == .netbsd) 32 else 31;
return i > max and i < posix.sigrtmin();

View file

@ -1530,11 +1530,13 @@ pub const UserInfo = struct {
pub fn getUserInfo(name: []const u8) !UserInfo {
return switch (native_os) {
.linux,
.macos,
.watchos,
.visionos,
.tvos,
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
.watchos,
.freebsd,
.netbsd,
.openbsd,
@ -1666,7 +1668,7 @@ pub fn getBaseAddress() usize {
else => {},
} else unreachable;
},
.driverkit, .ios, .macos, .tvos, .visionos, .watchos => {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => {
return @intFromPtr(&std.c._mh_execute_header);
},
.windows => return @intFromPtr(windows.kernel32.GetModuleHandleW(null)),
@ -1682,7 +1684,7 @@ pub const can_execv = switch (native_os) {
/// Tells whether spawning child processes is supported (e.g. via Child)
pub const can_spawn = switch (native_os) {
.wasi, .watchos, .tvos, .visionos => false,
.wasi, .ios, .tvos, .visionos, .watchos => false,
else => true,
};
@ -1770,7 +1772,7 @@ pub fn totalSystemMemory() TotalSystemMemoryError!u64 {
return @as(u64, @intCast(physmem));
},
// whole Darwin family
.driverkit, .ios, .macos, .tvos, .visionos, .watchos => {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => {
// "hw.memsize" returns uint64_t
var physmem: u64 = undefined;
var len: usize = @sizeOf(u64);

View file

@ -136,7 +136,7 @@ pub const ResourceUsageStatistics = struct {
return null;
}
},
.macos, .ios => {
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => {
if (rus.rusage) |ru| {
// Darwin oddly reports in bytes instead of kilobytes.
return @as(usize, @intCast(ru.maxrss));
@ -149,7 +149,7 @@ pub const ResourceUsageStatistics = struct {
}
const rusage_init = switch (native_os) {
.linux, .macos, .ios => @as(?posix.rusage, null),
.linux, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => @as(?posix.rusage, null),
.windows => @as(?windows.VM_COUNTERS, null),
else => {},
};
@ -486,7 +486,7 @@ fn waitUnwrappedPosix(self: *ChildProcess) void {
const res: posix.WaitPidResult = res: {
if (self.request_resource_usage_statistics) {
switch (native_os) {
.linux, .macos, .ios => {
.linux, .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => {
var ru: posix.rusage = undefined;
const res = posix.wait4(self.id, 0, &ru);
self.resource_usage_statistics.rusage = ru;

View file

@ -76,7 +76,7 @@ pub const Instant = struct {
},
// On darwin, use UPTIME_RAW instead of MONOTONIC as it ticks while
// suspended.
.macos, .ios, .tvos, .watchos, .visionos => posix.CLOCK.UPTIME_RAW,
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => posix.CLOCK.UPTIME_RAW,
// On freebsd derivatives, use MONOTONIC_FAST as currently there's
// no precision tradeoff.
.freebsd, .dragonfly => posix.CLOCK.MONOTONIC_FAST,

View file

@ -227,7 +227,7 @@ pub fn detectFromBuilding(
fn libCGenericName(target: *const std.Target) [:0]const u8 {
switch (target.os.tag) {
.windows => return "mingw",
.macos, .ios, .tvos, .watchos, .visionos => return "darwin",
.driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => return "darwin",
.freebsd => return "freebsd",
.netbsd => return "netbsd",
else => {},
@ -263,7 +263,6 @@ fn libCGenericName(target: *const std.Target) [:0]const u8 {
.msvc,
.itanium,
.simulator,
.macabi,
=> unreachable,
}
}

View file

@ -81,7 +81,7 @@ pub fn getExternalExecutor(
// If the OS match and OS is macOS and CPU is arm64, we can use Rosetta 2
// to emulate the foreign architecture.
if (options.allow_rosetta and os_match and
host.os.tag == .macos and host.cpu.arch == .aarch64)
(host.os.tag == .maccatalyst or host.os.tag == .macos) and host.cpu.arch == .aarch64)
{
switch (candidate.cpu.arch) {
.x86_64 => return .rosetta,

View file

@ -37,13 +37,9 @@ pub fn isSdkInstalled(allocator: Allocator) bool {
pub fn getSdk(allocator: Allocator, target: *const Target) ?[]const u8 {
const is_simulator_abi = target.abi == .simulator;
const sdk = switch (target.os.tag) {
.ios => switch (target.abi) {
.macabi => "macosx",
.simulator => "iphonesimulator",
else => "iphoneos",
},
.driverkit => "driverkit",
.macos => "macosx",
.ios => if (is_simulator_abi) "iphonesimulator" else "iphoneos",
.maccatalyst, .macos => "macosx",
.tvos => if (is_simulator_abi) "appletvsimulator" else "appletvos",
.visionos => if (is_simulator_abi) "xrsimulator" else "xros",
.watchos => if (is_simulator_abi) "watchsimulator" else "watchos",

View file

@ -6761,12 +6761,15 @@ fn addCommonCCArgs(
}
switch (target.os.tag) {
.ios, .macos, .tvos, .watchos => |os| if (is_clang) {
.ios, .maccatalyst, .macos, .tvos, .watchos => |os| if (is_clang) {
try argv.ensureUnusedCapacity(2);
// Pass the proper -m<os>-version-min argument for darwin.
const ver = target.os.version_range.semver.min;
argv.appendAssumeCapacity(try std.fmt.allocPrint(arena, "-m{s}{s}-version-min={d}.{d}.{d}", .{
@tagName(os),
switch (os) {
.maccatalyst => "ios",
else => @tagName(os),
},
switch (target.abi) {
.simulator => "-simulator",
else => "",

View file

@ -369,7 +369,7 @@ pub fn resolve(options: Options) ResolveError!Config {
// load_dynamic_library standalone test not passing on this combination
// https://github.com/ziglang/zig/issues/24080
if (target.os.tag == .macos and is_dyn_lib) break :b true;
if (target.os.tag.isDarwin() and is_dyn_lib) break :b true;
// At this point we would prefer to use our own self-hosted backend,
// because the compilation speed is better than LLVM. But only do it if

View file

@ -189,7 +189,7 @@ pub fn updateFile(
// disambiguates by returning EEXIST, indicating original
// failure was a race, or ENOENT, indicating deletion of the
// directory of our open handle.
if (builtin.os.tag != .macos) {
if (!builtin.os.tag.isDarwin()) {
std.process.fatal("cache directory '{f}' unexpectedly removed during compiler execution", .{
cache_directory,
});

View file

@ -183,6 +183,7 @@ pub fn targetTriple(allocator: Allocator, target: *const std.Target) ![]const u8
try llvm_triple.appendSlice(switch (target.os.tag) {
.driverkit,
.ios,
.maccatalyst,
.macos,
.tvos,
.visionos,
@ -204,7 +205,6 @@ pub fn targetTriple(allocator: Allocator, target: *const std.Target) ![]const u8
try llvm_triple.append('-');
const llvm_os = switch (target.os.tag) {
.freestanding => "unknown",
.dragonfly => "dragonfly",
.freebsd => "freebsd",
.fuchsia => "fuchsia",
@ -218,11 +218,9 @@ pub fn targetTriple(allocator: Allocator, target: *const std.Target) ![]const u8
.cuda => "cuda",
.nvcl => "nvcl",
.amdhsa => "amdhsa",
.opencl => "unknown", // https://llvm.org/docs/SPIRVUsage.html#target-triples
.ps3 => "lv2",
.ps4 => "ps4",
.ps5 => "ps5",
.vita => "unknown", // LLVM doesn't know about this target
.mesa3d => "mesa3d",
.amdpal => "amdpal",
.hermit => "hermit",
@ -230,7 +228,7 @@ pub fn targetTriple(allocator: Allocator, target: *const std.Target) ![]const u8
.wasi => "wasi",
.emscripten => "emscripten",
.macos => "macosx",
.ios => "ios",
.ios, .maccatalyst => "ios",
.tvos => "tvos",
.watchos => "watchos",
.driverkit => "driverkit",
@ -240,10 +238,13 @@ pub fn targetTriple(allocator: Allocator, target: *const std.Target) ![]const u8
.managarm => "managarm",
.@"3ds",
.opengl,
.plan9,
.contiki,
.freestanding,
.opencl, // https://llvm.org/docs/SPIRVUsage.html#target-triples
.opengl,
.other,
.plan9,
.vita,
=> "unknown",
};
try llvm_triple.appendSlice(llvm_os);
@ -266,7 +267,7 @@ pub fn targetTriple(allocator: Allocator, target: *const std.Target) ![]const u8
try llvm_triple.append('-');
const llvm_abi = switch (target.abi) {
.none, .ilp32 => "unknown",
.none => if (target.os.tag == .maccatalyst) "macabi" else "unknown",
.gnu => "gnu",
.gnuabin32 => "gnuabin32",
.gnuabi64 => "gnuabi64",
@ -275,6 +276,7 @@ pub fn targetTriple(allocator: Allocator, target: *const std.Target) ![]const u8
.gnuf32 => "gnuf32",
.gnusf => "gnusf",
.gnux32 => "gnux32",
.ilp32 => "unknown",
.code16 => "code16",
.eabi => "eabi",
.eabihf => "eabihf",
@ -296,7 +298,6 @@ pub fn targetTriple(allocator: Allocator, target: *const std.Target) ![]const u8
.msvc => "msvc",
.itanium => "itanium",
.simulator => "simulator",
.macabi => "macabi",
.ohos, .ohoseabi => "ohos",
};
try llvm_triple.appendSlice(llvm_abi);
@ -12595,7 +12596,7 @@ fn ccAbiPromoteInt(cc: std.builtin.CallingConvention, zcu: *Zcu, ty: Type) ?std.
else => return null,
};
return switch (target.os.tag) {
.macos, .ios, .watchos, .tvos, .visionos => switch (int_info.bits) {
.driverkit, .ios, .maccatalyst, .macos, .watchos, .tvos, .visionos => switch (int_info.bits) {
0...16 => int_info.signedness,
else => null,
},

View file

@ -30,7 +30,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
const root_name = switch (target.os.tag) {
// On Apple platforms, we use the same name as LLVM because the
// TSAN library implementation hard-codes a check for these names.
.driverkit, .macos => "clang_rt.tsan_osx_dynamic",
.driverkit, .maccatalyst, .macos => "clang_rt.tsan_osx_dynamic",
.ios => if (target.abi == .simulator) "clang_rt.tsan_iossim_dynamic" else "clang_rt.tsan_ios_dynamic",
.tvos => if (target.abi == .simulator) "clang_rt.tsan_tvossim_dynamic" else "clang_rt.tsan_tvos_dynamic",
.visionos => if (target.abi == .simulator) "clang_rt.tsan_xrossim_dynamic" else "clang_rt.tsan_xros_dynamic",
@ -134,7 +134,7 @@ pub fn buildTsan(comp: *Compilation, prog_node: std.Progress.Node) BuildError!vo
}
const platform_tsan_sources = switch (target.os.tag) {
.ios, .macos, .watchos, .tvos, .visionos => &darwin_tsan_sources,
.driverkit, .ios, .maccatalyst, .macos, .watchos, .tvos, .visionos => &darwin_tsan_sources,
.windows => &windows_tsan_sources,
else => &unix_tsan_sources,
};

View file

@ -620,7 +620,7 @@ pub const File = struct {
.linux => std.posix.ptrace(std.os.linux.PTRACE.ATTACH, pid, 0, 0) catch |err| {
log.warn("ptrace failure: {s}", .{@errorName(err)});
},
.macos => {
.maccatalyst, .macos => {
const macho_file = base.cast(.macho).?;
macho_file.ptraceAttach(pid) catch |err| {
log.warn("attaching failed with error: {s}", .{@errorName(err)});
@ -700,7 +700,7 @@ pub const File = struct {
if (base.child_pid) |pid| {
switch (builtin.os.tag) {
.macos => {
.maccatalyst, .macos => {
const macho_file = base.cast(.macho).?;
macho_file.ptraceDetach(pid) catch |err| {
log.warn("detaching failed with error: {s}", .{@errorName(err)});

View file

@ -3596,7 +3596,7 @@ pub fn requiresCodeSig(self: MachO) bool {
const target = self.getTarget();
return switch (target.cpu.arch) {
.aarch64 => switch (target.os.tag) {
.driverkit, .macos => true,
.driverkit, .maccatalyst, .macos => true,
.ios, .tvos, .visionos, .watchos => target.abi == .simulator,
else => false,
},
@ -4032,7 +4032,7 @@ fn formatSectType(tt: u8, w: *Writer) Writer.Error!void {
}
const is_hot_update_compatible = switch (builtin.target.os.tag) {
.macos => true,
.maccatalyst, .macos => true,
else => false,
};
@ -4174,7 +4174,7 @@ pub const Platform = struct {
.os_tag = switch (cmd.platform) {
.DRIVERKIT => .driverkit,
.IOS, .IOSSIMULATOR => .ios,
.MACCATALYST => .ios,
.MACCATALYST => .maccatalyst,
.MACOS => .macos,
.TVOS, .TVOSSIMULATOR => .tvos,
.VISIONOS, .VISIONOSSIMULATOR => .visionos,
@ -4182,7 +4182,6 @@ pub const Platform = struct {
else => @panic("TODO"),
},
.abi = switch (cmd.platform) {
.MACCATALYST => .macabi,
.IOSSIMULATOR,
.TVOSSIMULATOR,
.VISIONOSSIMULATOR,
@ -4198,6 +4197,7 @@ pub const Platform = struct {
.VERSION_MIN_TVOS,
.VERSION_MIN_WATCHOS,
=> {
// We can't distinguish Mac Catalyst here, but this is legacy stuff anyway.
const cmd = lc.cast(macho.version_min_command).?;
return .{
.os_tag = switch (lc.cmd()) {
@ -4230,11 +4230,8 @@ pub const Platform = struct {
pub fn toApplePlatform(plat: Platform) macho.PLATFORM {
return switch (plat.os_tag) {
.driverkit => .DRIVERKIT,
.ios => switch (plat.abi) {
.macabi => .MACCATALYST,
.simulator => .IOSSIMULATOR,
else => .IOS,
},
.ios => if (plat.abi == .simulator) .IOSSIMULATOR else .IOS,
.maccatalyst => .MACCATALYST,
.macos => .MACOS,
.tvos => if (plat.abi == .simulator) .TVOSSIMULATOR else .TVOS,
.visionos => if (plat.abi == .simulator) .VISIONOSSIMULATOR else .VISIONOS,
@ -4300,17 +4297,17 @@ const SupportedPlatforms = struct {
// Source: https://github.com/apple-oss-distributions/ld64/blob/59a99ab60399c5e6c49e6945a9e1049c42b71135/src/ld/PlatformSupport.cpp#L52
// zig fmt: off
const supported_platforms = [_]SupportedPlatforms{
.{ .driverkit, .none, 0x130000, 0x130000 },
.{ .ios, .none, 0x0C0000, 0x070000 },
.{ .ios, .macabi, 0x0D0000, 0x0D0000 },
.{ .ios, .simulator, 0x0D0000, 0x080000 },
.{ .macos, .none, 0x0A0E00, 0x0A0800 },
.{ .tvos, .none, 0x0C0000, 0x070000 },
.{ .tvos, .simulator, 0x0D0000, 0x080000 },
.{ .visionos, .none, 0x010000, 0x010000 },
.{ .visionos, .simulator, 0x010000, 0x010000 },
.{ .watchos, .none, 0x050000, 0x020000 },
.{ .watchos, .simulator, 0x060000, 0x020000 },
.{ .driverkit, .none, 0x130000, 0x130000 },
.{ .ios, .none, 0x0C0000, 0x070000 },
.{ .ios, .simulator, 0x0D0000, 0x080000 },
.{ .maccatalyst, .none, 0x0D0000, 0x0D0000 },
.{ .macos, .none, 0x0A0E00, 0x0A0800 },
.{ .tvos, .none, 0x0C0000, 0x070000 },
.{ .tvos, .simulator, 0x0D0000, 0x080000 },
.{ .visionos, .none, 0x010000, 0x010000 },
.{ .visionos, .simulator, 0x010000, 0x010000 },
.{ .watchos, .none, 0x050000, 0x020000 },
.{ .watchos, .simulator, 0x060000, 0x020000 },
};
// zig fmt: on

View file

@ -281,7 +281,7 @@ pub fn writeRpathLC(rpath: []const u8, writer: *Writer) !void {
pub fn writeVersionMinLC(platform: MachO.Platform, sdk_version: ?std.SemanticVersion, writer: *Writer) !void {
const cmd: macho.LC = switch (platform.os_tag) {
.macos => .VERSION_MIN_MACOSX,
.ios => .VERSION_MIN_IPHONEOS,
.ios, .maccatalyst => .VERSION_MIN_IPHONEOS,
.tvos => .VERSION_MIN_TVOS,
.watchos => .VERSION_MIN_WATCHOS,
else => unreachable,

View file

@ -4487,7 +4487,7 @@ fn runOrTestHotSwap(
}
switch (builtin.target.os.tag) {
.macos, .ios, .tvos, .watchos, .visionos => {
.macos => {
const PosixSpawn = @import("DarwinPosixSpawn.zig");
var attr = try PosixSpawn.Attr.init();

View file

@ -29,6 +29,7 @@ pub fn libCNeedsLibUnwind(target: *const std.Target, link_mode: std.builtin.Link
pub fn libCxxNeedsLibUnwind(target: *const std.Target) bool {
return switch (target.os.tag) {
.maccatalyst,
.macos,
.ios,
.watchos,

View file

@ -1398,7 +1398,7 @@ test "allocation and looping over 3-byte integer" {
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag == .macos) {
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag.isDarwin()) {
return error.SkipZigTest; // TODO
}
if (builtin.cpu.arch == .s390x and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest; // TODO

View file

@ -9,7 +9,7 @@ test "thread local variable" {
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_x86_64 and builtin.os.tag == .macos) {
if (builtin.zig_backend == .stage2_x86_64 and builtin.os.tag.isDarwin()) {
// Fails due to register hazards.
return error.SkipZigTest;
}

View file

@ -97,7 +97,7 @@ test "simple variadic function" {
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag != .macos and builtin.cpu.arch.isAARCH64()) {
if (builtin.zig_backend == .stage2_llvm and !builtin.os.tag.isDarwin() and builtin.cpu.arch.isAARCH64()) {
// https://github.com/ziglang/zig/issues/14096
return error.SkipZigTest;
}
@ -159,7 +159,7 @@ test "coerce reference to var arg" {
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag != .macos and builtin.cpu.arch.isAARCH64()) {
if (builtin.zig_backend == .stage2_llvm and !builtin.os.tag.isDarwin() and builtin.cpu.arch.isAARCH64()) {
// https://github.com/ziglang/zig/issues/14096
return error.SkipZigTest;
}
@ -191,7 +191,7 @@ test "variadic functions" {
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag != .macos and builtin.cpu.arch.isAARCH64()) {
if (builtin.zig_backend == .stage2_llvm and !builtin.os.tag.isDarwin() and builtin.cpu.arch.isAARCH64()) {
// https://github.com/ziglang/zig/issues/14096
return error.SkipZigTest;
}
@ -244,7 +244,7 @@ test "copy VaList" {
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag != .macos and builtin.cpu.arch.isAARCH64()) {
if (builtin.zig_backend == .stage2_llvm and !builtin.os.tag.isDarwin() and builtin.cpu.arch.isAARCH64()) {
// https://github.com/ziglang/zig/issues/14096
return error.SkipZigTest;
}
@ -279,7 +279,7 @@ test "unused VaList arg" {
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_llvm and builtin.os.tag != .macos and builtin.cpu.arch.isAARCH64()) {
if (builtin.zig_backend == .stage2_llvm and !builtin.os.tag.isDarwin() and builtin.cpu.arch.isAARCH64()) {
// https://github.com/ziglang/zig/issues/14096
return error.SkipZigTest;
}

View file

@ -1157,7 +1157,7 @@ test "big simd vector" {
if (builtin.cpu.arch.isMIPS64() and builtin.mode != .Debug) return error.SkipZigTest;
if (builtin.cpu.arch.isPowerPC64()) return error.SkipZigTest;
if (builtin.cpu.arch.isLoongArch()) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .x86_64 and builtin.os.tag == .macos and builtin.mode != .Debug) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .x86_64 and builtin.os.tag.isDarwin() and builtin.mode != .Debug) return error.SkipZigTest;
c_big_vec(.{ 1, 2, 3, 4, 5, 6, 7, 8 });

View file

@ -9,7 +9,6 @@ const targets = [_]std.Target.Query{
.{ .cpu_arch = .aarch64, .os_tag = .haiku, .abi = .none },
.{ .cpu_arch = .aarch64, .os_tag = .hermit, .abi = .none },
.{ .cpu_arch = .aarch64, .os_tag = .hurd, .abi = .gnu },
.{ .cpu_arch = .aarch64, .os_tag = .ios, .abi = .macabi },
.{ .cpu_arch = .aarch64, .os_tag = .ios, .abi = .none },
.{ .cpu_arch = .aarch64, .os_tag = .ios, .abi = .simulator },
.{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .android },
@ -17,6 +16,7 @@ const targets = [_]std.Target.Query{
.{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .musl },
.{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .none },
.{ .cpu_arch = .aarch64, .os_tag = .linux, .abi = .ohos },
.{ .cpu_arch = .aarch64, .os_tag = .maccatalyst, .abi = .none },
.{ .cpu_arch = .aarch64, .os_tag = .macos, .abi = .none },
.{ .cpu_arch = .aarch64, .os_tag = .netbsd, .abi = .none },
.{ .cpu_arch = .aarch64, .os_tag = .openbsd, .abi = .none },
@ -326,6 +326,7 @@ const targets = [_]std.Target.Query{
.{ .cpu_arch = .x86_64, .os_tag = .linux, .abi = .muslx32 },
.{ .cpu_arch = .x86_64, .os_tag = .linux, .abi = .none },
.{ .cpu_arch = .x86_64, .os_tag = .linux, .abi = .ohos },
.{ .cpu_arch = .x86_64, .os_tag = .maccatalyst, .abi = .none },
.{ .cpu_arch = .x86_64, .os_tag = .macos, .abi = .none },
.{ .cpu_arch = .x86_64, .os_tag = .netbsd, .abi = .none },
.{ .cpu_arch = .x86_64, .os_tag = .openbsd, .abi = .none },