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...@@ -52,7 +52,7 @@ pub fn create_depszig(alloc: std.mem.Allocator, cachepath: string, dir: std.fs.D
52 \\ const b = exe.builder;52 \\ const b = exe.builder;
53 \\ @setEvalBranchQuota(1_000_000);53 \\ @setEvalBranchQuota(1_000_000);
54 \\ for (packages) |pkg| {54 \\ for (packages) |pkg| {
55 \\ const moddep = pkg.pkg.?.zp(exe.builder);55 \\ const moddep = pkg.zp(b);
56 \\ exe.addModule(moddep.name, moddep.module);56 \\ exe.addModule(moddep.name, moddep.module);
57 \\ }57 \\ }
58 \\ var llc = false;58 \\ var llc = false;
...@@ -91,28 +91,35 @@ pub fn create_depszig(alloc: std.mem.Allocator, cachepath: string, dir: std.fs.D...@@ -91,28 +91,35 @@ pub fn create_depszig(alloc: std.mem.Allocator, cachepath: string, dir: std.fs.D
91 \\ system_libs: []const string = &.{},91 \\ system_libs: []const string = &.{},
92 \\ frameworks: []const string = &.{},92 \\ frameworks: []const string = &.{},
93 \\ vcpkg: bool = false,93 \\ vcpkg: bool = false,
94 \\};94 \\ module: ?ModuleDependency = null,
95 \\
96 \\pub const Pkg = struct {
97 \\ name: string,
98 \\ source: std.build.FileSource,
99 \\ dependencies: []const Pkg,
100 \\95 \\
101 \\ pub fn zp(self: *const Pkg, b: *std.build.Builder) ModuleDependency {96 \\ pub fn zp(self: *Package, b: *std.build.Builder) ModuleDependency {
102 \\ var temp: [100]ModuleDependency = undefined;97 \\ var temp: [100]ModuleDependency = undefined;
103 \\ for (self.dependencies) |item, i| {98 \\ const pkg = self.pkg.?;
99 \\ for (pkg.dependencies, 0..) |item, i| {
104 \\ temp[i] = item.zp(b);100 \\ temp[i] = item.zp(b);
105 \\ }101 \\ }
106 \\ return .{102 \\ if (self.module) |mod| {
107 \\ .name = self.name,103 \\ return mod;
104 \\ }
105 \\ const result = ModuleDependency{
106 \\ .name = pkg.name,
108 \\ .module = b.createModule(.{107 \\ .module = b.createModule(.{
109 \\ .source_file = self.source,108 \\ .source_file = pkg.source,
110 \\ .dependencies = b.allocator.dupe(ModuleDependency, temp[0..self.dependencies.len]) catch @panic("oom"),109 \\ .dependencies = b.allocator.dupe(ModuleDependency, temp[0..pkg.dependencies.len]) catch @panic("oom"),
111 \\ }),110 \\ }),
112 \\ };111 \\ };
112 \\ self.module = result;
113 \\ return result;
113 \\ }114 \\ }
114 \\};115 \\};
115 \\116 \\
117 \\pub const Pkg = struct {
118 \\ name: string,
119 \\ source: std.build.FileSource,
120 \\ dependencies: []const *Package,
121 \\};
122 \\
116 \\123 \\
117 );124 );
118125
...@@ -277,7 +284,7 @@ fn print_dirs(w: std.fs.File.Writer, list: []const zigmod.Module) !void {...@@ -277,7 +284,7 @@ fn print_dirs(w: std.fs.File.Writer, list: []const zigmod.Module) !void {
277}284}
278285
279fn print_deps(w: std.fs.File.Writer, m: zigmod.Module) !void {286fn print_deps(w: std.fs.File.Writer, m: zigmod.Module) !void {
280 try w.writeAll("&[_]Package{\n");287 try w.writeAll("&[_]*Package{\n");
281 for (m.deps) |d| {288 for (m.deps) |d| {
282 if (d.main.len == 0) {289 if (d.main.len == 0) {
283 continue;290 continue;
...@@ -285,7 +292,7 @@ fn print_deps(w: std.fs.File.Writer, m: zigmod.Module) !void {...@@ -285,7 +292,7 @@ fn print_deps(w: std.fs.File.Writer, m: zigmod.Module) !void {
285 if (d.for_build) {292 if (d.for_build) {
286 continue;293 continue;
287 }294 }
288 try w.print(" package_data._{s},\n", .{d.id[0..12]});295 try w.print(" &package_data._{s},\n", .{d.id[0..12]});
289 }296 }
290 try w.writeAll("}");297 try w.writeAll("}");
291}298}
...@@ -293,10 +300,10 @@ fn print_deps(w: std.fs.File.Writer, m: zigmod.Module) !void {...@@ -293,10 +300,10 @@ fn print_deps(w: std.fs.File.Writer, m: zigmod.Module) !void {
293fn print_pkg_data_to(w: std.fs.File.Writer, notdone: *std.ArrayList(zigmod.Module), done: *std.ArrayList(zigmod.Module)) !void {300fn print_pkg_data_to(w: std.fs.File.Writer, notdone: *std.ArrayList(zigmod.Module), done: *std.ArrayList(zigmod.Module)) !void {
294 var len: usize = notdone.items.len;301 var len: usize = notdone.items.len;
295 while (notdone.items.len > 0) {302 while (notdone.items.len > 0) {
296 for (notdone.items) |mod, i| {303 for (notdone.items, 0..) |mod, i| {
297 if (contains_all(mod.deps, done.items)) {304 if (contains_all(mod.deps, done.items)) {
298 try w.print(305 try w.print(
299 \\ pub const _{s} = Package{{306 \\ pub var _{s} = Package{{
300 \\ .directory = dirs._{s},307 \\ .directory = dirs._{s},
301 \\308 \\
302 , .{309 , .{
...@@ -317,7 +324,7 @@ fn print_pkg_data_to(w: std.fs.File.Writer, notdone: *std.ArrayList(zigmod.Modul...@@ -317,7 +324,7 @@ fn print_pkg_data_to(w: std.fs.File.Writer, notdone: *std.ArrayList(zigmod.Modul
317 try w.writeAll(" &.{");324 try w.writeAll(" &.{");
318 for (mod.deps, 0..) |moddep, j| {325 for (mod.deps, 0..) |moddep, j| {
319 if (moddep.main.len == 0) continue;326 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]});
321 if (j != mod.deps.len - 1) try w.writeAll(",");328 if (j != mod.deps.len - 1) try w.writeAll(",");
322 }329 }
323 try w.writeAll(" } },\n");330 try w.writeAll(" } },\n");
...@@ -402,7 +409,7 @@ fn print_pkgs(alloc: std.mem.Allocator, w: std.fs.File.Writer, m: zigmod.Module)...@@ -402,7 +409,7 @@ fn print_pkgs(alloc: std.mem.Allocator, w: std.fs.File.Writer, m: zigmod.Module)
402 continue;409 continue;
403 }410 }
404 const ident = try zig_name_from_pkg_name(alloc, d.name);411 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] });
406 }413 }
407 try w.writeAll("}");414 try w.writeAll("}");
408}415}