diff --git a/engine/assets/build.zig b/engine/assets/build.zig index d8d0d7c..767d50e 100644 --- a/engine/assets/build.zig +++ b/engine/assets/build.zig @@ -1,28 +1,24 @@ const std = @import("std"); +const core = @import("core").MakeModLib; + +const depList = [_][]const u8{ + "core", + "packer", +}; pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); const static_build = b.option(bool, "static_build", "builds backlog dependencies for static linking") orelse false; - const mod = b.addModule("assets", .{ + const engineMod = core.MakeModLib(b, .{ + .name = "assets", .target = target, .optimize = optimize, - .root_source_file = b.path("src/assets.zig"), + .static_build = static_build, }); - const core_dep = b.dependency( - "core", - .{ .target = target, .optimize = optimize, .static_build = static_build }, - ); - mod.addImport("core", core_dep.module("core")); - - const packer_dep = b.dependency( - "packer", - .{ .target = target, .optimize = optimize, .static_build = static_build }, - ); - - mod.addImport("packer", packer_dep.module("packer")); + engineMod.linkModLibs(&depList); const test_step = b.step("test", "run unit tests for assets"); const tests = b.addTest(.{ @@ -33,7 +29,7 @@ pub fn build(b: *std.Build) void { }), }); - tests.root_module.addImport("assets", mod); + tests.root_module.addImport("assets", engineMod); const runArtifact = b.addRunArtifact(tests); test_step.dependOn(&runArtifact.step); b.installArtifact(tests); diff --git a/engine/audio/build.zig b/engine/audio/build.zig index d28f4f8..46a4faf 100644 --- a/engine/audio/build.zig +++ b/engine/audio/build.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const core = @import("core").MakeModLib; const depList = [_][]const u8{ "miniaudio", @@ -11,17 +12,14 @@ pub fn build(b: *std.Build) void { const optimize = b.standardOptimizeOption(.{}); const static_build = b.option(bool, "static_build", "builds backlog dependencies for static linking") orelse false; - const mod = b.addModule("audio", .{ + const engineMod = core.MakeModLib(b, .{ + .name = "audio", .target = target, .optimize = optimize, - .root_source_file = b.path("src/audio.zig"), + .static_build = static_build, }); - for (depList) |depName| { - const dep = b.dependency(depName, .{ .target = target, .optimize = optimize, .static_build = static_build }); - - mod.addImport(depName, dep.module(depName)); - } + engineMod.linkModLibs(&depList); const test_step = b.step("test", "run unit tests for audio"); const tests = b.addTest(.{ @@ -32,7 +30,7 @@ pub fn build(b: *std.Build) void { }), }); - tests.root_module.addImport("audio", mod); + tests.root_module.addImport("audio", engineMod.mod); const runArtifact = b.addRunArtifact(tests); test_step.dependOn(&runArtifact.step); b.installArtifact(tests); diff --git a/engine/core/build.zig b/engine/core/build.zig index 7b7df2e..fc659fe 100644 --- a/engine/core/build.zig +++ b/engine/core/build.zig @@ -16,18 +16,14 @@ pub fn build(b: *std.Build) void { const optimize = b.standardOptimizeOption(.{}); const static_build = b.option(bool, "static_build", "builds backlog dependencies for static linking") orelse false; - const core = MakeModLib(); - - const mod = b.addModule("core", .{ + const engineMod = MakeModLib(b, .{ + .name = "core", .target = target, .optimize = optimize, - .root_source_file = b.path("src/core.zig"), + .static_build = static_build, }); - for (dependencyList) |depName| { - const dep = b.dependency(depName, .{ .target = target, .optimize = optimize, .static_build = static_build }); - mod.addImport(depName, dep.module(depName)); - } + engineMod.linkModLibs(&dependencyList); const test_step = b.step("test", "run unit tests for core"); const tests = b.addTest(.{ @@ -48,7 +44,7 @@ pub fn build(b: *std.Build) void { .linkage = .dynamic, .name = "external", }); - sampleGameExtern.root_module.addImport("core", mod); + sampleGameExtern.root_module.addImport("core", engineMod.mod); const installExtern = b.addInstallArtifact(sampleGameExtern, .{ .dest_dir = .{ .override = .{ .custom = "modules" } }, @@ -56,7 +52,7 @@ pub fn build(b: *std.Build) void { b.getInstallStep().dependOn(&installExtern.step); - tests.root_module.addImport("core", mod); + tests.root_module.addImport("core", engineMod.mod); const runArtifact = b.addRunArtifact(tests); test_step.dependOn(&runArtifact.step); runArtifact.step.dependOn(b.getInstallStep()); diff --git a/engine/core/build.zig.zon b/engine/core/build.zig.zon index 6564332..02e2e54 100644 --- a/engine/core/build.zig.zon +++ b/engine/core/build.zig.zon @@ -7,7 +7,7 @@ // with -Dtracy = false, this one pulls in no C dependencies .tracy = .{ .path = "../../lib/tracy" }, - .bh = .{.path = "../../lib/bh" } + .bh = .{.path = "../../lib/bh" }, // these are zig only .zmath = .{ .path = "../../lib/zmath" }, diff --git a/engine/imgui/build.zig b/engine/imgui/build.zig index 7ab99f1..5b5ddd7 100644 --- a/engine/imgui/build.zig +++ b/engine/imgui/build.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const core = @import("core"); const dependencyList = [_][]const u8{ "core", @@ -13,17 +14,14 @@ pub fn build(b: *std.Build) void { const optimize = b.standardOptimizeOption(.{}); const static_build = b.option(bool, "static_build", "builds backlog dependencies for static linking") orelse false; - const mod = b.addModule("imgui", .{ + const engineMod = core.MakeModLib(b, .{ + .name = "imgui", .target = target, .optimize = optimize, - .root_source_file = b.path("src/imgui.zig"), + .static_build = static_build, }); - for (dependencyList) |depName| { - const dep = b.dependency(depName, .{ .target = target, .optimize = optimize, .static_build = static_build }); - const dep_mod = dep.module(depName); - mod.addImport(depName, dep_mod); - } + engineMod.linkModLibs(&dependencyList); // ========== tests ========== const tests = b.addTest(.{ @@ -35,7 +33,7 @@ pub fn build(b: *std.Build) void { }); const test_step = b.step("test", "run unit tests for imgui"); - tests.root_module.addImport("platform", mod); + tests.root_module.addImport("platform", engineMod.mod); const runArtifact = b.addRunArtifact(tests); test_step.dependOn(&runArtifact.step); b.installArtifact(tests); diff --git a/engine/net/build.zig b/engine/net/build.zig index 4bb13aa..cfd9282 100644 --- a/engine/net/build.zig +++ b/engine/net/build.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const core = @import("core"); const depList = [_][]const u8{ "core", @@ -10,17 +11,14 @@ pub fn build(b: *std.Build) void { const optimize = b.standardOptimizeOption(.{}); const static_build = b.option(bool, "static_build", "builds backlog dependencies for static linking") orelse false; - const mod = b.addModule("net", .{ + const engineMod = core.MakeModLib(b, .{ + .name = "imgui", .target = target, .optimize = optimize, - .root_source_file = b.path("src/net.zig"), + .static_build = static_build, }); - for (depList) |depName| { - const dep = b.dependency(depName, .{ .target = target, .optimize = optimize, .static_build = static_build }); - - mod.addImport(depName, dep.module(depName)); - } + engineMod.linkModLibs(&depList); const test_step = b.step("test", "run unit tests for net"); const tests = b.addTest(.{ @@ -31,7 +29,7 @@ pub fn build(b: *std.Build) void { }), }); - tests.root_module.addImport("net", mod); + tests.root_module.addImport("net", engineMod.mod); const runArtifact = b.addRunArtifact(tests); test_step.dependOn(&runArtifact.step); b.installArtifact(tests); diff --git a/engine/papyrus/build.zig b/engine/papyrus/build.zig index 0a7e0c8..8bd28cf 100644 --- a/engine/papyrus/build.zig +++ b/engine/papyrus/build.zig @@ -1,4 +1,9 @@ const std = @import("std"); +const core = @import("core"); + +const depList = [_][]const u8{ + "core", +}; // very tiny, not intended to build anything just to run tests linked with libc pub fn build(b: *std.Build) void { @@ -6,18 +11,23 @@ pub fn build(b: *std.Build) void { const optimize = b.standardOptimizeOption(.{}); const static_build = b.option(bool, "static_build", "builds backlog dependencies for static linking") orelse false; + const engineMod = core.MakeModLib(b, .{ + .name = "papyrus", + .target = target, + .optimize = optimize, + .static_build = static_build, + }); + + engineMod.linkModLibs(&depList); + engineMod.addIncludePath("src/"); + engineMod.lib.addCSourceFile(b.path("src/compat.cpp")); + const mod = b.addModule("papyrus", .{ .target = target, .optimize = optimize, .link_libc = true, .root_source_file = b.path("src/papyrus.zig"), }); - mod.addIncludePath(b.path("src/")); - mod.addCSourceFile(.{ .file = b.path("src/compat.cpp") }); - - const core_dep = b.dependency("core", .{ .target = target, .optimize = optimize, .static_build = static_build }); - - mod.addImport("core", core_dep.module("core")); // Creates a step for unit testing. const main_tests = b.addTest(.{ @@ -29,7 +39,6 @@ pub fn build(b: *std.Build) void { }), }); - main_tests.root_module.addImport("core", core_dep.module("core")); main_tests.root_module.addImport("papyrus", mod); main_tests.root_module.addIncludePath(b.path("src/")); diff --git a/engine/papyrus/src/papyrus.zig b/engine/papyrus/src/papyrus.zig index 34601c2..d718a1d 100644 --- a/engine/papyrus/src/papyrus.zig +++ b/engine/papyrus/src/papyrus.zig @@ -39,7 +39,7 @@ pub const TextEntrySystem = @import("TextEntrySystem.zig"); pub const DrawCommand = @import("DrawCommand.zig"); pub const DrawList = std.ArrayList(DrawCommand); -const core = @import("core"); +pub const core = @import("core"); const colors = core.colors; pub const Color = colors.Color; pub const ColorRGBA8 = colors.RGBA8; diff --git a/engine/papyrus/tests/testing.zig b/engine/papyrus/tests/testing.zig index 7cee91d..cef2a63 100644 --- a/engine/papyrus/tests/testing.zig +++ b/engine/papyrus/tests/testing.zig @@ -14,7 +14,7 @@ const grapvizDotToPng = utils.grapvizDotToPng; const BmpRenderer = papyrus.BmpRenderer; const BmpWriter = BmpRenderer.BmpWriter; -const core = @import("core"); +const core = papyrus.core; const colors = core.colors; const Color = colors.Color; const ColorRGBA8 = colors.ColorRGBA8; diff --git a/lib/bh/build.zig b/lib/bh/build.zig index 20bd275..5351704 100644 --- a/lib/bh/build.zig +++ b/lib/bh/build.zig @@ -5,6 +5,10 @@ pub const ModLib = struct { lib: *std.Build.Step.Compile, mod: *std.Build.Module, + target: std.Build.ResolvedTarget, + optimize: std.builtin.OptimizeMode, + static_build: bool, + pub fn install(self: @This()) void { self.b.installArtifact(self.lib); } @@ -13,6 +17,19 @@ pub const ModLib = struct { self.lib.addIncludePath(self.b.path(path)); self.mod.addIncludePath(self.b.path(path)); } + + pub fn linkModLibs(self: *@This(), list: []const []const u8) void { + for (list) |depName| { + const dep = self.b.dependency(depName, .{ + .target = self.target, + .optimize = self.optimize, + .static_build = self.static_build, + }); + + self.mod.addImport(depName, dep.module(depName)); + self.lib.linkLibrary(dep.artifact(depName)); + } + } }; pub const ModLibOptions = struct { @@ -50,6 +67,9 @@ pub fn MakeModlib(b: *std.Build, o: ModLibOptions) ModLib { .b = b, .lib = lib, .mod = mod, + .target = o.target, + .optimize = o.optimize, + .static_build = o.static_build, }; }