authorgravatar for thejoshwolfe@gmail.comJosh Wolfe <thejoshwolfe@gmail.com> 2018-07-08 00:00:05-04:00
committergravatar for thejoshwolfe@gmail.comJosh Wolfe <thejoshwolfe@gmail.com> 2018-07-08 00:00:05-04:00
log410b4d9bdf8abb8dad2ac2e11038fe492b8be869
tree75b4103c5d61a0c3095fade671d784439b419a2a
parentced3aae3b2371479c01b4abba42c751697185d7b

builder.addBuildOption


1 files changed, 18 insertions(+), 0 deletions(-)

std/build.zig+18
...@@ -814,6 +814,7 @@ pub const LibExeObjStep = struct {...@@ -814,6 +814,7 @@ pub const LibExeObjStep = struct {
814 out_h_filename: []const u8,814 out_h_filename: []const u8,
815 assembly_files: ArrayList([]const u8),815 assembly_files: ArrayList([]const u8),
816 packages: ArrayList(Pkg),816 packages: ArrayList(Pkg),
817 build_options_contents: std.Buffer,
817818
818 // C only stuff819 // C only stuff
819 source_files: ArrayList([]const u8),820 source_files: ArrayList([]const u8),
...@@ -905,6 +906,7 @@ pub const LibExeObjStep = struct {...@@ -905,6 +906,7 @@ pub const LibExeObjStep = struct {
905 .lib_paths = ArrayList([]const u8).init(builder.allocator),906 .lib_paths = ArrayList([]const u8).init(builder.allocator),
906 .object_src = undefined,907 .object_src = undefined,
907 .disable_libc = true,908 .disable_libc = true,
909 .build_options_contents = std.Buffer.initSize(builder.allocator, 0) catch unreachable,
908 };910 };
909 self.computeOutFileNames();911 self.computeOutFileNames();
910 return self;912 return self;
...@@ -945,6 +947,7 @@ pub const LibExeObjStep = struct {...@@ -945,6 +947,7 @@ pub const LibExeObjStep = struct {
945 .out_h_filename = undefined,947 .out_h_filename = undefined,
946 .assembly_files = undefined,948 .assembly_files = undefined,
947 .packages = undefined,949 .packages = undefined,
950 .build_options_contents = undefined,
948 };951 };
949 self.computeOutFileNames();952 self.computeOutFileNames();
950 return self;953 return self;
...@@ -1096,6 +1099,12 @@ pub const LibExeObjStep = struct {...@@ -1096,6 +1099,12 @@ pub const LibExeObjStep = struct {
1096 self.include_dirs.append(self.builder.cache_root) catch unreachable;1099 self.include_dirs.append(self.builder.cache_root) catch unreachable;
1097 }1100 }
10981101
1102 pub fn addBuildOption(self: *LibExeObjStep, comptime T: type, name: []const u8, value: T) void {
1103 assert(self.is_zig);
1104 const out = &std.io.BufferOutStream.init(&self.build_options_contents).stream;
1105 out.print("pub const {} = {};\n", name, value) catch unreachable;
1106 }
1107
1099 pub fn addIncludeDir(self: *LibExeObjStep, path: []const u8) void {1108 pub fn addIncludeDir(self: *LibExeObjStep, path: []const u8) void {
1100 self.include_dirs.append(path) catch unreachable;1109 self.include_dirs.append(path) catch unreachable;
1101 }1110 }
...@@ -1155,6 +1164,15 @@ pub const LibExeObjStep = struct {...@@ -1155,6 +1164,15 @@ pub const LibExeObjStep = struct {
1155 zig_args.append(builder.pathFromRoot(root_src)) catch unreachable;1164 zig_args.append(builder.pathFromRoot(root_src)) catch unreachable;
1156 }1165 }
11571166
1167 if (self.build_options_contents.len() > 0) {
1168 const build_options_file = try os.path.join(builder.allocator, builder.cache_root, builder.fmt("{}_build_options.zig", self.name));
1169 try std.io.writeFile(builder.allocator, build_options_file, self.build_options_contents.toSliceConst());
1170 try zig_args.append("--pkg-begin");
1171 try zig_args.append("build_options");
1172 try zig_args.append(builder.pathFromRoot(build_options_file));
1173 try zig_args.append("--pkg-end");
1174 }
1175
1158 for (self.object_files.toSliceConst()) |object_file| {1176 for (self.object_files.toSliceConst()) |object_file| {
1159 zig_args.append("--object") catch unreachable;1177 zig_args.append("--object") catch unreachable;
1160 zig_args.append(builder.pathFromRoot(object_file)) catch unreachable;1178 zig_args.append(builder.pathFromRoot(object_file)) catch unreachable;