srctree

Michael Dusan parent 22fd1851 197ffff0
macos: add tbd-v3 zippered support

Support linking against tbd-v3 SDKs such as those bundled withXcode 10.3 → 11.3.1 .

  • Map target os=ios and abi=macabi to macho.PLATFORM.MACCATALYST.
  • This allows for matches against tbdv4 targets, eg. x86_64-maccatalyst.
  • When parsing old tbdv3 files with zippered platform, we append
  • [ARCH-macos, ARCH-maccatalyst] to list of "tbd" targets. This
  • enables linking for standard targets like ARCH-macos-none and
  • maccatalyst targets ARCH-ios-macabi.
  • Update mappings for macho platform and zig target macabi. While this
  • is not full maccatalyst support, a basic exe can be built as follows:
  • `
  • zig libc > libc.txt
  • zig build-exe z0.zig --libc libc.txt -target x86_64-ios-macabi
  • `
  • closes #19110
inlinesplit
src/link/MachO.zig added: 17, removed: 5, total 12
@@ -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,
 
src/link/MachO/Dylib.zig added: 17, removed: 5, total 12
@@ -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 [ '<arch>-macos', '<arch>-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;
},