//! A zig builder step that runs "libtool" against a list of libraries //! in order to create a single combined static library. const LibtoolStep = @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 this step. name: []const u8, /// The filename (not the path) of the file to create. This will /// be placed in a unique hashed directory. Use out_path to access. out_name: []const u8, /// Library files (.a) to combine. sources: []LazyPath, }; /// The step to depend on. step: *Step, /// The output file from the libtool run. output: LazyPath, /// Run libtool against a list of library files to combine into a single /// static library. pub fn create(b: *std.Build, opts: Options) *LibtoolStep { const self = b.allocator.create(LibtoolStep) catch @panic("OOM"); const run_step = RunStep.create(b, b.fmt("libtool {s}", .{opts.name})); run_step.addArgs(&.{ "libtool", "-static", "-o" }); const output = run_step.addOutputFileArg(opts.out_name); for (opts.sources) |source| run_step.addFileArg(source); self.* = .{ .step = &run_step.step, .output = output, }; return self; }