diff --git a/src/link/MachO.zig b/src/link/MachO.zig index cc488b7541..475bd02b24 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -4376,9 +4376,11 @@ pub const Platform = struct { .IOS, .IOSSIMULATOR => .ios, .TVOS, .TVOSSIMULATOR => .tvos, .WATCHOS, .WATCHOSSIMULATOR => .watchos, + .MACCATALYST => .ios, else => @panic("TODO"), }, .abi = switch (cmd.platform) { + .MACCATALYST => .macabi, .IOSSIMULATOR, .TVOSSIMULATOR, .WATCHOSSIMULATOR, @@ -4425,7 +4427,11 @@ pub const Platform = struct { pub fn toApplePlatform(plat: Platform) macho.PLATFORM { return switch (plat.os_tag) { .macos => .MACOS, - .ios => if (plat.abi == .simulator) .IOSSIMULATOR else .IOS, + .ios => switch (plat.abi) { + .simulator => .IOSSIMULATOR, + .macabi => .MACCATALYST, + else => .IOS, + }, .tvos => if (plat.abi == .simulator) .TVOSSIMULATOR else .TVOS, .watchos => if (plat.abi == .simulator) .WATCHOSSIMULATOR else .WATCHOS, else => unreachable, diff --git a/src/link/MachO/Dylib.zig b/src/link/MachO/Dylib.zig index 9da3456c6c..6acfb2080c 100644 --- a/src/link/MachO/Dylib.zig +++ b/src/link/MachO/Dylib.zig @@ -751,8 +751,14 @@ pub const TargetMatcher = struct { .v3 => |v3| blk: { var targets = std.ArrayList([]const u8).init(arena.allocator()); for (v3.archs) |arch| { - const target = try std.fmt.allocPrint(arena.allocator(), "{s}-{s}", .{ arch, v3.platform }); - try targets.append(target); + if (mem.eql(u8, v3.platform, "zippered")) { + // From Xcode 10.3 → 11.3.1, macos SDK .tbd files specify platform as 'zippered' + // which should map to [ '-macos', '-maccatalyst' ] + try targets.append(try std.fmt.allocPrint(arena.allocator(), "{s}-macos", .{arch})); + try targets.append(try std.fmt.allocPrint(arena.allocator(), "{s}-maccatalyst", .{arch})); + } else { + try targets.append(try std.fmt.allocPrint(arena.allocator(), "{s}-{s}", .{ arch, v3.platform })); + } } break :blk targets.items; },