refactor(build.zig): move dependency loading to one place
This commit is contained in:
		
							parent
							
								
									68a77db6d9
								
							
						
					
					
						commit
						a420528a59
					
				
					 1 changed files with 53 additions and 62 deletions
				
			
		
							
								
								
									
										115
									
								
								build.zig
									
										
									
									
									
								
							
							
						
						
									
										115
									
								
								build.zig
									
										
									
									
									
								
							|  | @ -40,23 +40,20 @@ pub fn build(b: *Builder) !void { | |||
|         "Skip tests that do not match any of the specified filters", | ||||
|     ) orelse &.{}; | ||||
| 
 | ||||
|     // TODO: Embed the current git version in the code. We can do this | ||||
|     // by looking for .git/HEAD (if it exists, follow the ref to /ref/heads/whatevs, | ||||
|     // grab that commit, and use b.addOptions/exe.addOptions to generate the | ||||
|     // Options file. See https://github.com/ziglang/zig/issues/14979 for usage | ||||
|     // example. | ||||
|     // | ||||
|     // From there, I'm not sure what the generated file looks like or quite how | ||||
|     // to use, but that should be easy. It may also give some ideas on the | ||||
|     // code gen piece itself, though it might be nice to leave as a seperate | ||||
|     // executable | ||||
|     // TODO: This executable should not be built when importing as a package. | ||||
|     // It relies on code gen and is all fouled up when getting imported | ||||
|     const dep_mods = try getDependencyModules(b, .{ | ||||
|         .target = target, | ||||
|         .optimize = optimize, | ||||
|     }); | ||||
| 
 | ||||
|     const mod_exe = b.createModule(.{ | ||||
|         .root_source_file = b.path("src/main.zig"), | ||||
|         .target = target, | ||||
|         .optimize = optimize, | ||||
|     }); | ||||
|     mod_exe.addImport("smithy", dep_mods.get("smithy").?); | ||||
|     mod_exe.addImport("zeit", dep_mods.get("zeit").?); | ||||
|     mod_exe.addImport("json", dep_mods.get("json").?); | ||||
|     mod_exe.addImport("date", dep_mods.get("date").?); | ||||
| 
 | ||||
|     const exe = b.addExecutable(.{ | ||||
|         .name = "demo", | ||||
|  | @ -64,38 +61,6 @@ pub fn build(b: *Builder) !void { | |||
|         .use_llvm = !no_llvm, | ||||
|     }); | ||||
| 
 | ||||
|     // External dependencies | ||||
|     const dep_smithy = b.dependency("smithy", .{ | ||||
|         .target = target, | ||||
|         .optimize = optimize, | ||||
|     }); | ||||
|     const mod_smithy = dep_smithy.module("smithy"); | ||||
|     mod_exe.addImport("smithy", mod_smithy); // not sure this should be here... | ||||
| 
 | ||||
|     const dep_zeit = b.dependency("zeit", .{ | ||||
|         .target = target, | ||||
|         .optimize = optimize, | ||||
|     }); | ||||
|     const mod_zeit = dep_zeit.module("zeit"); | ||||
|     mod_exe.addImport("zeit", mod_zeit); | ||||
|     // End External dependencies | ||||
| 
 | ||||
|     // Private modules/dependencies | ||||
|     const dep_json = b.dependency("json", .{ | ||||
|         .target = target, | ||||
|         .optimize = optimize, | ||||
|     }); | ||||
|     const mod_json = dep_json.module("json"); | ||||
|     mod_exe.addImport("json", mod_json); | ||||
| 
 | ||||
|     const dep_date = b.dependency("date", .{ | ||||
|         .target = target, | ||||
|         .optimize = optimize, | ||||
|     }); | ||||
|     const mod_date = dep_date.module("date"); | ||||
|     mod_exe.addImport("date", mod_date); | ||||
|     // End private modules/dependencies | ||||
| 
 | ||||
|     const run_cmd = b.addRunArtifact(exe); | ||||
|     run_cmd.step.dependOn(b.getInstallStep()); | ||||
|     if (b.args) |args| { | ||||
|  | @ -113,9 +78,9 @@ pub fn build(b: *Builder) !void { | |||
|         .target = b.graph.host, | ||||
|         .optimize = if (b.verbose) .Debug else .ReleaseSafe, | ||||
|     }); | ||||
|     cg_mod.addImport("smithy", mod_smithy); | ||||
|     cg_mod.addImport("date", mod_date); | ||||
|     cg_mod.addImport("json", mod_json); | ||||
|     cg_mod.addImport("smithy", dep_mods.get("smithy").?); | ||||
|     cg_mod.addImport("date", dep_mods.get("date").?); | ||||
|     cg_mod.addImport("json", dep_mods.get("json").?); | ||||
| 
 | ||||
|     const cg_exe = b.addExecutable(.{ | ||||
|         .name = "codegen", | ||||
|  | @ -160,10 +125,10 @@ pub fn build(b: *Builder) !void { | |||
|         .target = target, | ||||
|         .optimize = optimize, | ||||
|     }); | ||||
|     service_manifest_module.addImport("smithy", mod_smithy); | ||||
|     service_manifest_module.addImport("date", mod_date); | ||||
|     service_manifest_module.addImport("json", mod_json); | ||||
|     service_manifest_module.addImport("zeit", mod_zeit); | ||||
|     service_manifest_module.addImport("smithy", dep_mods.get("smithy").?); | ||||
|     service_manifest_module.addImport("date", dep_mods.get("date").?); | ||||
|     service_manifest_module.addImport("json", dep_mods.get("json").?); | ||||
|     service_manifest_module.addImport("zeit", dep_mods.get("zeit").?); | ||||
| 
 | ||||
|     mod_exe.addImport("service_manifest", service_manifest_module); | ||||
| 
 | ||||
|  | @ -173,19 +138,19 @@ pub fn build(b: *Builder) !void { | |||
|         .target = target, | ||||
|         .optimize = optimize, | ||||
|     }); | ||||
|     mod_aws.addImport("smithy", mod_smithy); | ||||
|     mod_aws.addImport("smithy", dep_mods.get("smithy").?); | ||||
|     mod_aws.addImport("service_manifest", service_manifest_module); | ||||
|     mod_aws.addImport("date", mod_date); | ||||
|     mod_aws.addImport("json", mod_json); | ||||
|     mod_aws.addImport("zeit", mod_zeit); | ||||
|     mod_aws.addImport("date", dep_mods.get("date").?); | ||||
|     mod_aws.addImport("json", dep_mods.get("json").?); | ||||
|     mod_aws.addImport("zeit", dep_mods.get("zeit").?); | ||||
| 
 | ||||
|     // Expose module to others | ||||
|     const mod_aws_signing = b.addModule("aws-signing", .{ | ||||
|         .root_source_file = b.path("src/aws_signing.zig"), | ||||
|     }); | ||||
|     mod_aws_signing.addImport("date", mod_date); | ||||
|     mod_aws_signing.addImport("smithy", mod_smithy); | ||||
|     mod_aws_signing.addImport("json", mod_json); | ||||
|     mod_aws_signing.addImport("date", dep_mods.get("date").?); | ||||
|     mod_aws_signing.addImport("smithy", dep_mods.get("smithy").?); | ||||
|     mod_aws_signing.addImport("json", dep_mods.get("json").?); | ||||
| 
 | ||||
|     // Similar to creating the run step earlier, this exposes a `test` step to | ||||
|     // the `zig build --help` menu, providing a way for the user to request | ||||
|  | @ -214,11 +179,11 @@ pub fn build(b: *Builder) !void { | |||
|             .target = b.resolveTargetQuery(t), | ||||
|             .optimize = optimize, | ||||
|         }); | ||||
|         mod_unit_tests.addImport("smithy", mod_smithy); | ||||
|         mod_unit_tests.addImport("smithy", dep_mods.get("smithy").?); | ||||
|         mod_unit_tests.addImport("service_manifest", service_manifest_module); | ||||
|         mod_unit_tests.addImport("date", mod_date); | ||||
|         mod_unit_tests.addImport("zeit", mod_zeit); | ||||
|         mod_unit_tests.addImport("json", mod_json); | ||||
|         mod_unit_tests.addImport("date", dep_mods.get("date").?); | ||||
|         mod_unit_tests.addImport("zeit", dep_mods.get("zeit").?); | ||||
|         mod_unit_tests.addImport("json", dep_mods.get("json").?); | ||||
| 
 | ||||
|         // Creates a step for unit testing. This only builds the test executable | ||||
|         // but does not run it. | ||||
|  | @ -261,3 +226,29 @@ pub fn build(b: *Builder) !void { | |||
|         b.installArtifact(exe); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| fn getDependencyModules(b: *std.Build, args: anytype) !std.StringHashMap(*std.Build.Module) { | ||||
|     var result = std.StringHashMap(*std.Build.Module).init(b.allocator); | ||||
| 
 | ||||
|     // External dependencies | ||||
|     const dep_smithy = b.dependency("smithy", args); | ||||
|     const mod_smithy = dep_smithy.module("smithy"); | ||||
|     try result.putNoClobber("smithy", mod_smithy); | ||||
| 
 | ||||
|     const dep_zeit = b.dependency("zeit", args); | ||||
|     const mod_zeit = dep_zeit.module("zeit"); | ||||
|     try result.putNoClobber("zeit", mod_zeit); | ||||
|     // End External dependencies | ||||
| 
 | ||||
|     // Private modules/dependencies | ||||
|     const dep_json = b.dependency("json", args); | ||||
|     const mod_json = dep_json.module("json"); | ||||
|     try result.putNoClobber("json", mod_json); | ||||
| 
 | ||||
|     const dep_date = b.dependency("date", args); | ||||
|     const mod_date = dep_date.module("date"); | ||||
|     try result.putNoClobber("date", mod_date); | ||||
|     // End private modules/dependencies | ||||
| 
 | ||||
|     return result; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue