build: use caching for Libtool and Lipo steps

This commit is contained in:
Mitchell Hashimoto
2023-02-15 14:49:09 -08:00
parent f30d80cabe
commit 8673b90299
3 changed files with 34 additions and 52 deletions

View File

@ -46,26 +46,20 @@ pub fn create(builder: *std.Build, opts: Options) *LibtoolStep {
fn make(step: *Step) !void { fn make(step: *Step) !void {
const self = @fieldParentPtr(LibtoolStep, "step", step); const self = @fieldParentPtr(LibtoolStep, "step", step);
// TODO: use the zig cache system when it is in the stdlib
// https://github.com/ziglang/zig/pull/14571
const output_path = try self.builder.cache_root.join(
self.builder.allocator,
&.{self.out_name},
);
// We use a RunStep here to ease our configuration. // We use a RunStep here to ease our configuration.
{
const run = std.build.RunStep.create(self.builder, self.builder.fmt( const run = std.build.RunStep.create(self.builder, self.builder.fmt(
"libtool {s}", "libtool {s}",
.{self.name}, .{self.name},
)); ));
run.condition = .always; run.addArgs(&.{
run.addArgs(&.{ "libtool", "-static", "-o", output_path }); "libtool",
for (self.sources) |source| { "-static",
run.addArg(source.getPath(self.builder)); "-o",
} });
try run.argv.append(.{ .output = .{
.generated_file = &self.out_path,
.basename = self.out_name,
} });
for (self.sources) |source| run.addFileSourceArg(source);
try run.step.make(); try run.step.make();
} }
self.out_path.path = output_path;
}

View File

@ -48,30 +48,17 @@ pub fn create(builder: *std.build.Builder, opts: Options) *LipoStep {
fn make(step: *Step) !void { fn make(step: *Step) !void {
const self = @fieldParentPtr(LipoStep, "step", step); const self = @fieldParentPtr(LipoStep, "step", step);
// TODO: use the zig cache system when it is in the stdlib
// https://github.com/ziglang/zig/pull/14571
const output_path = try self.builder.cache_root.join(
self.builder.allocator,
&.{self.out_name},
);
// We use a RunStep here to ease our configuration. // We use a RunStep here to ease our configuration.
{
const run = std.build.RunStep.create(self.builder, self.builder.fmt( const run = std.build.RunStep.create(self.builder, self.builder.fmt(
"lipo {s}", "lipo {s}",
.{self.name}, .{self.name},
)); ));
run.condition = .always; run.addArgs(&.{ "lipo", "-create", "-output" });
run.addArgs(&.{ try run.argv.append(.{ .output = .{
"lipo", .generated_file = &self.out_path,
"-create", .basename = self.out_name,
"-output", } });
output_path, run.addFileSourceArg(self.input_a);
self.input_a.getPath(self.builder), run.addFileSourceArg(self.input_b);
self.input_b.getPath(self.builder),
});
try run.step.make(); try run.step.make();
} }
self.out_path.path = output_path;
}

View File

@ -69,12 +69,13 @@ fn make(step: *Step) !void {
.{self.name}, .{self.name},
)); ));
run.condition = .always; run.condition = .always;
run.addArgs(&.{ run.addArgs(&.{ "xcodebuild", "-create-xcframework" });
"xcodebuild", "-create-xcframework", run.addArg("-library");
"-library", self.library.getPath(self.builder), run.addFileSourceArg(self.library);
"-headers", self.headers.getPath(self.builder), run.addArg("-headers");
"-output", output_path, run.addFileSourceArg(self.headers);
}); run.addArg("-output");
run.addArg(output_path);
try run.step.make(); try run.step.make();
} }
} }