mach: begin unified entry point interface
This commit is contained in:
parent
ffcd5dfaa8
commit
d99359421e
2 changed files with 72 additions and 35 deletions
95
build.zig
95
build.zig
|
|
@ -13,13 +13,13 @@ pub fn build(b: *std.build.Builder) void {
|
||||||
};
|
};
|
||||||
const options = Options{ .gpu_dawn_options = gpu_dawn_options };
|
const options = Options{ .gpu_dawn_options = gpu_dawn_options };
|
||||||
|
|
||||||
|
// TODO: re-enable tests
|
||||||
const main_tests = b.addTest("src/main.zig");
|
const main_tests = b.addTest("src/main.zig");
|
||||||
main_tests.setBuildMode(mode);
|
main_tests.setBuildMode(mode);
|
||||||
main_tests.setTarget(target);
|
main_tests.setTarget(target);
|
||||||
main_tests.addPackage(pkg);
|
main_tests.addPackage(pkg);
|
||||||
main_tests.addPackage(gpu.pkg);
|
main_tests.addPackage(gpu.pkg);
|
||||||
main_tests.addPackage(glfw.pkg);
|
main_tests.addPackage(glfw.pkg);
|
||||||
link(b, main_tests, options);
|
|
||||||
|
|
||||||
const test_step = b.step("test", "Run library tests");
|
const test_step = b.step("test", "Run library tests");
|
||||||
test_step.dependOn(&main_tests.step);
|
test_step.dependOn(&main_tests.step);
|
||||||
|
|
@ -31,24 +31,28 @@ pub fn build(b: *std.build.Builder) void {
|
||||||
|
|
||||||
inline for ([_]ExampleDefinition{
|
inline for ([_]ExampleDefinition{
|
||||||
.{ .name = "triangle" },
|
.{ .name = "triangle" },
|
||||||
.{ .name = "boids" },
|
//.{ .name = "boids" },
|
||||||
.{ .name = "rotating-cube", .packages = &[_]Pkg{Packages.zmath} },
|
//.{ .name = "rotating-cube", .packages = &[_]Pkg{Packages.zmath} },
|
||||||
.{ .name = "two-cubes", .packages = &[_]Pkg{Packages.zmath} },
|
//.{ .name = "two-cubes", .packages = &[_]Pkg{Packages.zmath} },
|
||||||
.{ .name = "instanced-cube", .packages = &[_]Pkg{Packages.zmath} },
|
//.{ .name = "instanced-cube", .packages = &[_]Pkg{Packages.zmath} },
|
||||||
.{ .name = "advanced-gen-texture-light", .packages = &[_]Pkg{Packages.zmath} },
|
//.{ .name = "advanced-gen-texture-light", .packages = &[_]Pkg{Packages.zmath} },
|
||||||
.{ .name = "textured-cube", .packages = &[_]Pkg{ Packages.zmath, Packages.zigimg } },
|
//.{ .name = "textured-cube", .packages = &[_]Pkg{ Packages.zmath, Packages.zigimg } },
|
||||||
.{ .name = "fractal-cube", .packages = &[_]Pkg{Packages.zmath} },
|
//.{ .name = "fractal-cube", .packages = &[_]Pkg{Packages.zmath} },
|
||||||
}) |example| {
|
}) |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.setTarget(target);
|
||||||
example_exe.setBuildMode(mode);
|
example_exe.setBuildMode(mode);
|
||||||
example_exe.addPackage(pkg);
|
|
||||||
example_exe.addPackage(gpu.pkg);
|
|
||||||
example_exe.addPackage(glfw.pkg);
|
|
||||||
inline for (example.packages) |additional_package| {
|
inline for (example.packages) |additional_package| {
|
||||||
example_exe.addPackage(additional_package);
|
example_exe.addPackage(additional_package);
|
||||||
}
|
}
|
||||||
link(b, example_exe, options);
|
example_app.link(options);
|
||||||
example_exe.install();
|
example_exe.install();
|
||||||
|
|
||||||
const example_run_cmd = example_exe.run();
|
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);
|
example_run_step.dependOn(&example_run_cmd.step);
|
||||||
}
|
}
|
||||||
|
|
||||||
const shaderexp_exe = b.addExecutable("shaderexp", "shaderexp/main.zig");
|
//const shaderexp_exe = b.addExecutable("shaderexp", "shaderexp/main.zig");
|
||||||
shaderexp_exe.setTarget(target);
|
//shaderexp_exe.setTarget(target);
|
||||||
shaderexp_exe.setBuildMode(mode);
|
//shaderexp_exe.setBuildMode(mode);
|
||||||
shaderexp_exe.addPackage(pkg);
|
//shaderexp_exe.addPackage(pkg);
|
||||||
shaderexp_exe.addPackage(gpu.pkg);
|
//shaderexp_exe.addPackage(gpu.pkg);
|
||||||
shaderexp_exe.addPackage(glfw.pkg);
|
//shaderexp_exe.addPackage(glfw.pkg);
|
||||||
link(b, shaderexp_exe, options);
|
//link(b, shaderexp_exe, options);
|
||||||
shaderexp_exe.install();
|
//shaderexp_exe.install();
|
||||||
|
|
||||||
const shaderexp_run_cmd = shaderexp_exe.run();
|
//const shaderexp_run_cmd = shaderexp_exe.run();
|
||||||
shaderexp_run_cmd.step.dependOn(b.getInstallStep());
|
//shaderexp_run_cmd.step.dependOn(b.getInstallStep());
|
||||||
const shaderexp_run_step = b.step("run-shaderexp", "Run shaderexp");
|
//const shaderexp_run_step = b.step("run-shaderexp", "Run shaderexp");
|
||||||
shaderexp_run_step.dependOn(&shaderexp_run_cmd.step);
|
//shaderexp_run_step.dependOn(&shaderexp_run_cmd.step);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const Options = struct {
|
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{
|
pub const pkg = std.build.Pkg{
|
||||||
.name = "mach",
|
.name = "mach",
|
||||||
.path = .{ .path = thisDir() ++ "/src/main.zig" },
|
.path = .{ .path = thisDir() ++ "/src/main.zig" },
|
||||||
.dependencies = &.{ gpu.pkg, glfw.pkg },
|
.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 {
|
fn thisDir() []const u8 {
|
||||||
return std.fs.path.dirname(@src().file) orelse ".";
|
return std.fs.path.dirname(@src().file) orelse ".";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
12
src/entry/native.zig
Normal file
12
src/entry/native.zig
Normal file
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue