authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-03-13 16:10:39 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2023-03-13 16:10:39 -07:00
loga992472bc3c73c6b49839eb67eb23ce470c6dc22
treea4fe9f36f297f992c38ce6b39b825c52e5291522
parent2e4d31c2a7082a02c7f83db2c16d01ada53a9ba5

cmd/fetch: only call b.createModule() once per package


1 files changed, 26 insertions(+), 19 deletions(-)

src/cmd/fetch.zig+26-19
......@@ -52,7 +52,7 @@ pub fn create_depszig(alloc: std.mem.Allocator, cachepath: string, dir: std.fs.D
5252 \\ const b = exe.builder;
5353 \\ @setEvalBranchQuota(1_000_000);
5454 \\ for (packages) |pkg| {
55 \\ const moddep = pkg.pkg.?.zp(exe.builder);
55 \\ const moddep = pkg.zp(b);
5656 \\ exe.addModule(moddep.name, moddep.module);
5757 \\ }
5858 \\ var llc = false;
......@@ -91,28 +91,35 @@ pub fn create_depszig(alloc: std.mem.Allocator, cachepath: string, dir: std.fs.D
9191 \\ system_libs: []const string = &.{},
9292 \\ frameworks: []const string = &.{},
9393 \\ vcpkg: bool = false,
94 \\};
95 \\
96 \\pub const Pkg = struct {
97 \\ name: string,
98 \\ source: std.build.FileSource,
99 \\ dependencies: []const Pkg,
94 \\ module: ?ModuleDependency = null,
10095 \\
101 \\ pub fn zp(self: *const Pkg, b: *std.build.Builder) ModuleDependency {
96 \\ pub fn zp(self: *Package, b: *std.build.Builder) ModuleDependency {
10297 \\ var temp: [100]ModuleDependency = undefined;
103 \\ for (self.dependencies) |item, i| {
98 \\ const pkg = self.pkg.?;
99 \\ for (pkg.dependencies, 0..) |item, i| {
104100 \\ temp[i] = item.zp(b);
105101 \\ }
106 \\ return .{
107 \\ .name = self.name,
102 \\ if (self.module) |mod| {
103 \\ return mod;
104 \\ }
105 \\ const result = ModuleDependency{
106 \\ .name = pkg.name,
108107 \\ .module = b.createModule(.{
109 \\ .source_file = self.source,
110 \\ .dependencies = b.allocator.dupe(ModuleDependency, temp[0..self.dependencies.len]) catch @panic("oom"),
108 \\ .source_file = pkg.source,
109 \\ .dependencies = b.allocator.dupe(ModuleDependency, temp[0..pkg.dependencies.len]) catch @panic("oom"),
111110 \\ }),
112111 \\ };
112 \\ self.module = result;
113 \\ return result;
113114 \\ }
114115 \\};
115116 \\
117 \\pub const Pkg = struct {
118 \\ name: string,
119 \\ source: std.build.FileSource,
120 \\ dependencies: []const *Package,
121 \\};
122 \\
116123 \\
117124 );
118125
......@@ -277,7 +284,7 @@ fn print_dirs(w: std.fs.File.Writer, list: []const zigmod.Module) !void {
277284}
278285
279286fn print_deps(w: std.fs.File.Writer, m: zigmod.Module) !void {
280 try w.writeAll("&[_]Package{\n");
287 try w.writeAll("&[_]*Package{\n");
281288 for (m.deps) |d| {
282289 if (d.main.len == 0) {
283290 continue;
......@@ -285,7 +292,7 @@ fn print_deps(w: std.fs.File.Writer, m: zigmod.Module) !void {
285292 if (d.for_build) {
286293 continue;
287294 }
288 try w.print(" package_data._{s},\n", .{d.id[0..12]});
295 try w.print(" &package_data._{s},\n", .{d.id[0..12]});
289296 }
290297 try w.writeAll("}");
291298}
......@@ -293,10 +300,10 @@ fn print_deps(w: std.fs.File.Writer, m: zigmod.Module) !void {
293300fn print_pkg_data_to(w: std.fs.File.Writer, notdone: *std.ArrayList(zigmod.Module), done: *std.ArrayList(zigmod.Module)) !void {
294301 var len: usize = notdone.items.len;
295302 while (notdone.items.len > 0) {
296 for (notdone.items) |mod, i| {
303 for (notdone.items, 0..) |mod, i| {
297304 if (contains_all(mod.deps, done.items)) {
298305 try w.print(
299 \\ pub const _{s} = Package{{
306 \\ pub var _{s} = Package{{
300307 \\ .directory = dirs._{s},
301308 \\
302309 , .{
......@@ -317,7 +324,7 @@ fn print_pkg_data_to(w: std.fs.File.Writer, notdone: *std.ArrayList(zigmod.Modul
317324 try w.writeAll(" &.{");
318325 for (mod.deps, 0..) |moddep, j| {
319326 if (moddep.main.len == 0) continue;
320 try w.print(" _{s}.pkg.?", .{moddep.id[0..12]});
327 try w.print(" &_{s}", .{moddep.id[0..12]});
321328 if (j != mod.deps.len - 1) try w.writeAll(",");
322329 }
323330 try w.writeAll(" } },\n");
......@@ -402,7 +409,7 @@ fn print_pkgs(alloc: std.mem.Allocator, w: std.fs.File.Writer, m: zigmod.Module)
402409 continue;
403410 }
404411 const ident = try zig_name_from_pkg_name(alloc, d.name);
405 try w.print(" pub const {s} = package_data._{s};\n", .{ ident, d.id[0..12] });
412 try w.print(" pub const {s} = &package_data._{s};\n", .{ ident, d.id[0..12] });
406413 }
407414 try w.writeAll("}");
408415}