ghostty/src/build/LipoStep.zig
2024-01-07 12:10:48 -08:00

43 lines
1.1 KiB
Zig

//! A zig builder step that runs "lipo" on two binaries to create
//! a universal binary.
const LipoStep = @This();
const std = @import("std");
const Step = std.Build.Step;
const RunStep = std.Build.Step.Run;
const LazyPath = std.Build.LazyPath;
pub const Options = struct {
/// The name of the xcframework to create.
name: []const u8,
/// The filename (not the path) of the file to create.
out_name: []const u8,
/// Library file (dylib, a) to package.
input_a: LazyPath,
input_b: LazyPath,
};
step: *Step,
/// Resulting binary
output: LazyPath,
pub fn create(b: *std.Build, opts: Options) *LipoStep {
const self = b.allocator.create(LipoStep) catch @panic("OOM");
const run_step = RunStep.create(b, b.fmt("lipo {s}", .{opts.name}));
run_step.addArgs(&.{ "lipo", "-create", "-output" });
const output = run_step.addOutputFileArg(opts.out_name);
run_step.addFileArg(opts.input_a);
run_step.addFileArg(opts.input_b);
self.* = .{
.step = &run_step.step,
.output = output,
};
return self;
}