From d99359421efc94d5a05adfa602ea30f751a55a5a Mon Sep 17 00:00:00 2001 From: iddev5 Date: Thu, 21 Apr 2022 14:32:08 +0530 Subject: [PATCH] mach: begin unified entry point interface --- build.zig | 95 ++++++++++++++++++++++++++++---------------- src/entry/native.zig | 12 ++++++ 2 files changed, 72 insertions(+), 35 deletions(-) create mode 100644 src/entry/native.zig diff --git a/build.zig b/build.zig index dadc3bb5..8a46d67c 100644 --- a/build.zig +++ b/build.zig @@ -13,13 +13,13 @@ pub fn build(b: *std.build.Builder) void { }; const options = Options{ .gpu_dawn_options = gpu_dawn_options }; + // TODO: re-enable tests const main_tests = b.addTest("src/main.zig"); main_tests.setBuildMode(mode); main_tests.setTarget(target); main_tests.addPackage(pkg); main_tests.addPackage(gpu.pkg); main_tests.addPackage(glfw.pkg); - link(b, main_tests, options); const test_step = b.step("test", "Run library tests"); test_step.dependOn(&main_tests.step); @@ -31,24 +31,28 @@ pub fn build(b: *std.build.Builder) void { inline for ([_]ExampleDefinition{ .{ .name = "triangle" }, - .{ .name = "boids" }, - .{ .name = "rotating-cube", .packages = &[_]Pkg{Packages.zmath} }, - .{ .name = "two-cubes", .packages = &[_]Pkg{Packages.zmath} }, - .{ .name = "instanced-cube", .packages = &[_]Pkg{Packages.zmath} }, - .{ .name = "advanced-gen-texture-light", .packages = &[_]Pkg{Packages.zmath} }, - .{ .name = "textured-cube", .packages = &[_]Pkg{ Packages.zmath, Packages.zigimg } }, - .{ .name = "fractal-cube", .packages = &[_]Pkg{Packages.zmath} }, + //.{ .name = "boids" }, + //.{ .name = "rotating-cube", .packages = &[_]Pkg{Packages.zmath} }, + //.{ .name = "two-cubes", .packages = &[_]Pkg{Packages.zmath} }, + //.{ .name = "instanced-cube", .packages = &[_]Pkg{Packages.zmath} }, + //.{ .name = "advanced-gen-texture-light", .packages = &[_]Pkg{Packages.zmath} }, + //.{ .name = "textured-cube", .packages = &[_]Pkg{ Packages.zmath, Packages.zigimg } }, + //.{ .name = "fractal-cube", .packages = &[_]Pkg{Packages.zmath} }, }) |example| { - const example_exe = b.addExecutable("example-" ++ example.name, "examples/" ++ example.name ++ "/main.zig"); + const example_name = example.name; + const example_app = MachApp.createApplication( + b, + "example-" ++ example_name, + "examples/" ++ example_name ++ "/main.zig", + &.{ glfw.pkg, gpu.pkg, pkg }, + ); + const example_exe = example_app.step; example_exe.setTarget(target); example_exe.setBuildMode(mode); - example_exe.addPackage(pkg); - example_exe.addPackage(gpu.pkg); - example_exe.addPackage(glfw.pkg); inline for (example.packages) |additional_package| { example_exe.addPackage(additional_package); } - link(b, example_exe, options); + example_app.link(options); example_exe.install(); const example_run_cmd = example_exe.run(); @@ -57,19 +61,19 @@ pub fn build(b: *std.build.Builder) void { example_run_step.dependOn(&example_run_cmd.step); } - const shaderexp_exe = b.addExecutable("shaderexp", "shaderexp/main.zig"); - shaderexp_exe.setTarget(target); - shaderexp_exe.setBuildMode(mode); - shaderexp_exe.addPackage(pkg); - shaderexp_exe.addPackage(gpu.pkg); - shaderexp_exe.addPackage(glfw.pkg); - link(b, shaderexp_exe, options); - shaderexp_exe.install(); + //const shaderexp_exe = b.addExecutable("shaderexp", "shaderexp/main.zig"); + //shaderexp_exe.setTarget(target); + //shaderexp_exe.setBuildMode(mode); + //shaderexp_exe.addPackage(pkg); + //shaderexp_exe.addPackage(gpu.pkg); + //shaderexp_exe.addPackage(glfw.pkg); + //link(b, shaderexp_exe, options); + //shaderexp_exe.install(); - const shaderexp_run_cmd = shaderexp_exe.run(); - shaderexp_run_cmd.step.dependOn(b.getInstallStep()); - const shaderexp_run_step = b.step("run-shaderexp", "Run shaderexp"); - shaderexp_run_step.dependOn(&shaderexp_run_cmd.step); + //const shaderexp_run_cmd = shaderexp_exe.run(); + //shaderexp_run_cmd.step.dependOn(b.getInstallStep()); + //const shaderexp_run_step = b.step("run-shaderexp", "Run shaderexp"); + //shaderexp_run_step.dependOn(&shaderexp_run_cmd.step); } pub const Options = struct { @@ -94,22 +98,43 @@ const Packages = struct { }; }; +const MachApp = struct { + step: *std.build.LibExeObjStep, + b: *std.build.Builder, + + pub fn createApplication(b: *std.build.Builder, name: []const u8, src: []const u8, deps: []const Pkg) MachApp { + const exe = b.addExecutable(name, "src/entry/native.zig"); + exe.addPackage(.{ + .name = "app", + .path = .{ .path = src }, + .dependencies = deps, + }); + exe.addPackage(gpu.pkg); + exe.addPackage(glfw.pkg); + + return .{ + .b = b, + .step = exe, + }; + } + + pub fn link(app: *const MachApp, options: Options) void { + const gpu_options = gpu.Options{ + .glfw_options = @bitCast(@import("gpu/libs/mach-glfw/build.zig").Options, options.glfw_options), + .gpu_dawn_options = @bitCast(@import("gpu/libs/mach-gpu-dawn/build.zig").Options, options.gpu_dawn_options), + }; + + glfw.link(app.b, app.step, options.glfw_options); + gpu.link(app.b, app.step, gpu_options); + } +}; + pub const pkg = std.build.Pkg{ .name = "mach", .path = .{ .path = thisDir() ++ "/src/main.zig" }, .dependencies = &.{ gpu.pkg, glfw.pkg }, }; -pub fn link(b: *std.build.Builder, step: *std.build.LibExeObjStep, options: Options) void { - const gpu_options = gpu.Options{ - .glfw_options = @bitCast(@import("gpu/libs/mach-glfw/build.zig").Options, options.glfw_options), - .gpu_dawn_options = @bitCast(@import("gpu/libs/mach-gpu-dawn/build.zig").Options, options.gpu_dawn_options), - }; - - glfw.link(b, step, options.glfw_options); - gpu.link(b, step, gpu_options); -} - fn thisDir() []const u8 { return std.fs.path.dirname(@src().file) orelse "."; } diff --git a/src/entry/native.zig b/src/entry/native.zig new file mode 100644 index 00000000..498ffa71 --- /dev/null +++ b/src/entry/native.zig @@ -0,0 +1,12 @@ +const app = @import("app"); + +pub fn main() !void { + try app.init(); + defer app.deinit(); + + while (true) { + const success = try app.update(); + if (!success) + break; + } +}