aboutsummaryrefslogtreecommitdiff
path: root/vendor/libghostty-vt/pkg/apple-sdk
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-07 18:29:21 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-07 18:29:21 +0300
commitdcfe11a7588fcd42471159453810abc9b7720a57 (patch)
treec32a77266028e73ca2382b96c96f8438a5fcd621 /vendor/libghostty-vt/pkg/apple-sdk
parent2dfed860103c4e4505ac7f25def9fe37da1e1e6a (diff)
build: update libghostty-vt vendor
vendor ghostty 063ac3e and remove the musl libc++ link workaround. expose the new selection formatter and hyperlink uri apis for follow-up rendering work. add manual artifact validation for static linux builds.
Diffstat (limited to 'vendor/libghostty-vt/pkg/apple-sdk')
-rw-r--r--vendor/libghostty-vt/pkg/apple-sdk/build.zig164
1 files changed, 105 insertions, 59 deletions
diff --git a/vendor/libghostty-vt/pkg/apple-sdk/build.zig b/vendor/libghostty-vt/pkg/apple-sdk/build.zig
index c573c391..f897919f 100644
--- a/vendor/libghostty-vt/pkg/apple-sdk/build.zig
+++ b/vendor/libghostty-vt/pkg/apple-sdk/build.zig
@@ -1,4 +1,5 @@
const std = @import("std");
+const builtin = @import("builtin");
pub fn build(b: *std.Build) !void {
const target = b.standardTargetOptions(.{});
@@ -8,9 +9,9 @@ pub fn build(b: *std.Build) !void {
}
/// Setup the step to point to the proper Apple SDK for libc and
-/// frameworks. This expects and relies on the native SDK being
-/// installed on the system. Ghostty doesn't support cross-compilation
-/// for Apple platforms.
+/// frameworks. When running on a Darwin host, this uses the native
+/// SDK installed on the system via `xcrun`. When cross-compiling from
+/// a non-Darwin host, it falls back to Zig's bundled Darwin headers.
pub fn addPaths(
b: *std.Build,
step: *std.Build.Step.Compile,
@@ -25,12 +26,19 @@ pub fn addPaths(
abi: std.Target.Abi,
};
- var map: std.AutoHashMapUnmanaged(Key, ?struct {
- libc: std.Build.LazyPath,
- framework: []const u8,
- system_include: []const u8,
- library: []const u8,
- }) = .{};
+ const Value = union(enum) {
+ native: struct {
+ libc: std.Build.LazyPath,
+ framework: []const u8,
+ system_include: []const u8,
+ library: []const u8,
+ },
+ cross: struct {
+ libc: std.Build.LazyPath,
+ },
+ };
+
+ var map: std.AutoHashMapUnmanaged(Key, ?Value) = .{};
};
const target = step.rootModuleTarget();
@@ -40,54 +48,85 @@ pub fn addPaths(
.abi = target.abi,
});
- if (!gop.found_existing) {
- // Detect our SDK using the "findNative" Zig stdlib function.
- // This is really important because it forces using `xcrun` to
- // find the SDK path.
- const libc = try std.zig.LibCInstallation.findNative(.{
- .allocator = b.allocator,
- .target = &step.rootModuleTarget(),
- .verbose = false,
- });
+ if (!gop.found_existing) init: {
+ if (comptime builtin.os.tag.isDarwin()) darwin: {
+ // Detect our SDK using the "findNative" Zig stdlib function.
+ // This is really important because it forces using `xcrun` to
+ // find the SDK path.
+ const libc = std.zig.LibCInstallation.findNative(.{
+ .allocator = b.allocator,
+ .target = &step.rootModuleTarget(),
+ .verbose = false,
+ }) catch break :darwin;
- // Render the file compatible with the `--libc` Zig flag.
- var stream: std.io.Writer.Allocating = .init(b.allocator);
- defer stream.deinit();
- try libc.render(&stream.writer);
+ // Render the file compatible with the `--libc` Zig flag.
+ var stream: std.io.Writer.Allocating = .init(b.allocator);
+ defer stream.deinit();
+ try libc.render(&stream.writer);
- // Create a temporary file to store the libc path because
- // `--libc` expects a file path.
- const wf = b.addWriteFiles();
- const path = wf.add("libc.txt", stream.written());
-
- // Determine our framework path. Zig has a bug where it doesn't
- // parse this from the libc txt file for `-framework` flags:
- // https://github.com/ziglang/zig/issues/24024
- const framework_path = framework: {
- const down1 = std.fs.path.dirname(libc.sys_include_dir.?).?;
- const down2 = std.fs.path.dirname(down1).?;
- break :framework try std.fs.path.join(b.allocator, &.{
- down2,
- "System",
- "Library",
- "Frameworks",
- });
- };
+ // Create a temporary file to store the libc path because
+ // `--libc` expects a file path.
+ const wf = b.addWriteFiles();
+ const path = wf.add("libc.txt", stream.written());
- const library_path = library: {
- const down1 = std.fs.path.dirname(libc.sys_include_dir.?).?;
- break :library try std.fs.path.join(b.allocator, &.{
- down1,
- "lib",
- });
- };
+ // Determine our framework path. Zig has a bug where it doesn't
+ // parse this from the libc txt file for `-framework` flags:
+ // https://github.com/ziglang/zig/issues/24024
+ const framework_path = framework: {
+ const down1 = std.fs.path.dirname(libc.sys_include_dir.?).?;
+ const down2 = std.fs.path.dirname(down1).?;
+ break :framework try std.fs.path.join(b.allocator, &.{
+ down2,
+ "System",
+ "Library",
+ "Frameworks",
+ });
+ };
- gop.value_ptr.* = .{
- .libc = path,
- .framework = framework_path,
- .system_include = libc.sys_include_dir.?,
- .library = library_path,
- };
+ const library_path = library: {
+ const down1 = std.fs.path.dirname(libc.sys_include_dir.?).?;
+ break :library try std.fs.path.join(b.allocator, &.{
+ down1,
+ "lib",
+ });
+ };
+
+ gop.value_ptr.* = .{ .native = .{
+ .libc = path,
+ .framework = framework_path,
+ .system_include = libc.sys_include_dir.?,
+ .library = library_path,
+ } };
+
+ break :init;
+ }
+
+ // Cross-compiling to Darwin from a non-Darwin host.
+ // Zig only bundles macOS headers, so for other Apple platforms
+ // we leave the value as null to produce a descriptive error.
+ if (target.os.tag != .macos) {
+ gop.value_ptr.* = null;
+ break :init;
+ }
+
+ // Fall back to Zig's bundled Darwin headers for libc resolution.
+ const zig_lib_path = b.graph.zig_lib_directory.path.?;
+ const include_dir = b.pathJoin(&.{
+ zig_lib_path, "libc", "include", "any-macos-any",
+ });
+
+ const wf = b.addWriteFiles();
+ const path = wf.add("libc.txt", b.fmt(
+ \\include_dir={s}
+ \\sys_include_dir={s}
+ \\crt_dir=
+ \\msvc_lib_dir=
+ \\kernel32_lib_dir=
+ \\gcc_dir=
+ \\
+ , .{ include_dir, include_dir }));
+
+ gop.value_ptr.* = .{ .cross = .{ .libc = path } };
}
const value = gop.value_ptr.* orelse return switch (target.os.tag) {
@@ -101,11 +140,18 @@ pub fn addPaths(
else => error.XcodeAppleSDKNotFound,
};
- step.setLibCFile(value.libc);
+ switch (value) {
+ .native => |native| {
+ step.setLibCFile(native.libc);
- // This is only necessary until this bug is fixed:
- // https://github.com/ziglang/zig/issues/24024
- step.root_module.addSystemFrameworkPath(.{ .cwd_relative = value.framework });
- step.root_module.addSystemIncludePath(.{ .cwd_relative = value.system_include });
- step.root_module.addLibraryPath(.{ .cwd_relative = value.library });
+ // This is only necessary until this bug is fixed:
+ // https://github.com/ziglang/zig/issues/24024
+ step.root_module.addSystemFrameworkPath(.{ .cwd_relative = native.framework });
+ step.root_module.addSystemIncludePath(.{ .cwd_relative = native.system_include });
+ step.root_module.addLibraryPath(.{ .cwd_relative = native.library });
+ },
+ .cross => |cross| {
+ step.setLibCFile(cross.libc);
+ },
+ }
}