Added support for passing write file args as build options (#7909)

* Added support for passing write file args as build options

* Fix missing fmtEscapes and unused format

* Actually fixed now, must be formatted

* remove addPathBuildOption
This commit is contained in:
Ryan Greenblatt
2021-02-21 05:26:46 -05:00
committed by GitHub
parent 9712e89265
commit 36178caf3e

View File

@@ -1308,6 +1308,12 @@ const BuildOptionArtifactArg = struct {
artifact: *LibExeObjStep,
};
const BuildOptionWriteFileArg = struct {
name: []const u8,
write_file: *WriteFileStep,
basename: []const u8,
};
pub const LibExeObjStep = struct {
step: Step,
builder: *Builder,
@@ -1355,6 +1361,7 @@ pub const LibExeObjStep = struct {
packages: ArrayList(Pkg),
build_options_contents: std.ArrayList(u8),
build_options_artifact_args: std.ArrayList(BuildOptionArtifactArg),
build_options_write_file_args: std.ArrayList(BuildOptionWriteFileArg),
object_src: []const u8,
@@ -1515,6 +1522,7 @@ pub const LibExeObjStep = struct {
.object_src = undefined,
.build_options_contents = std.ArrayList(u8).init(builder.allocator),
.build_options_artifact_args = std.ArrayList(BuildOptionArtifactArg).init(builder.allocator),
.build_options_write_file_args = std.ArrayList(BuildOptionWriteFileArg).init(builder.allocator),
.c_std = Builder.CStd.C99,
.override_lib_dir = null,
.main_pkg_path = null,
@@ -2008,6 +2016,23 @@ pub const LibExeObjStep = struct {
self.step.dependOn(&artifact.step);
}
/// The value is the path in the cache dir.
/// Adds a dependency automatically.
/// basename refers to the basename of the WriteFileStep
pub fn addBuildOptionWriteFile(
self: *LibExeObjStep,
name: []const u8,
write_file: *WriteFileStep,
basename: []const u8,
) void {
self.build_options_write_file_args.append(.{
.name = name,
.write_file = write_file,
.basename = basename,
}) catch unreachable;
self.step.dependOn(&write_file.step);
}
pub fn addSystemIncludeDir(self: *LibExeObjStep, path: []const u8) void {
self.include_dirs.append(IncludeDir{ .RawPathSystem = self.builder.dupe(path) }) catch unreachable;
}
@@ -2228,11 +2253,27 @@ pub const LibExeObjStep = struct {
}
}
if (self.build_options_contents.items.len > 0 or self.build_options_artifact_args.items.len > 0) {
// Render build artifact options at the last minute, now that the path is known.
if (self.build_options_contents.items.len > 0 or
self.build_options_artifact_args.items.len > 0 or
self.build_options_write_file_args.items.len > 0)
{
// Render build artifact and write file options at the last minute, now that the path is known.
//
// Note that pathFromRoot uses resolve path, so this will have
// correct behavior even if getOutputPath is already absolute.
for (self.build_options_artifact_args.items) |item| {
const out = self.build_options_contents.writer();
out.print("pub const {s}: []const u8 = \"{}\";\n", .{ item.name, std.zig.fmtEscapes(item.artifact.getOutputPath()) }) catch unreachable;
self.addBuildOption(
[]const u8,
item.name,
self.builder.pathFromRoot(item.artifact.getOutputPath()),
);
}
for (self.build_options_write_file_args.items) |item| {
self.addBuildOption(
[]const u8,
item.name,
self.builder.pathFromRoot(item.write_file.getOutputPath(item.basename)),
);
}
const build_options_file = try fs.path.join(