ghostty/src/build/GhosttyXCFramework.zig
2025-03-13 07:13:13 -07:00

76 lines
2.3 KiB
Zig

const GhosttyXCFramework = @This();
const std = @import("std");
const Config = @import("Config.zig");
const SharedDeps = @import("SharedDeps.zig");
const GhosttyLib = @import("GhosttyLib.zig");
const XCFrameworkStep = @import("XCFrameworkStep.zig");
xcframework: *XCFrameworkStep,
macos: GhosttyLib,
pub fn init(b: *std.Build, deps: *const SharedDeps) !GhosttyXCFramework {
// Create our universal macOS static library.
const macos = try GhosttyLib.initMacOSUniversal(b, deps);
// iOS
const ios = try GhosttyLib.initStatic(b, &try deps.retarget(
b,
b.resolveTargetQuery(.{
.cpu_arch = .aarch64,
.os_tag = .ios,
.os_version_min = Config.osVersionMin(.ios),
.abi = null,
}),
));
// iOS Simulator
const ios_sim = try GhosttyLib.initStatic(b, &try deps.retarget(
b,
b.resolveTargetQuery(.{
.cpu_arch = .aarch64,
.os_tag = .ios,
.os_version_min = Config.osVersionMin(.ios),
.abi = .simulator,
// We force the Apple CPU model because the simulator
// doesn't support the generic CPU model as of Zig 0.14 due
// to missing "altnzcv" instructions, which is false. This
// surely can't be right but we can fix this if/when we get
// back to running simulator builds.
.cpu_model = .{ .explicit = &std.Target.aarch64.cpu.apple_a17 },
}),
));
// The xcframework wraps our ghostty library so that we can link
// it to the final app built with Swift.
const xcframework = XCFrameworkStep.create(b, .{
.name = "GhosttyKit",
.out_path = "macos/GhosttyKit.xcframework",
.libraries = &.{
.{
.library = macos.output,
.headers = b.path("include"),
},
.{
.library = ios.output,
.headers = b.path("include"),
},
.{
.library = ios_sim.output,
.headers = b.path("include"),
},
},
});
return .{
.xcframework = xcframework,
.macos = macos,
};
}
pub fn install(self: *const GhosttyXCFramework) void {
const b = self.xcframework.step.owner;
b.getInstallStep().dependOn(self.xcframework.step);
}