From 6c401b6067ea30e2f030d9fe56ce9f30cac29358 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Fri, 19 Aug 2022 12:04:33 -0700 Subject: [PATCH] gpu: decouple SDK from dependencies Signed-off-by: Stephen Gutekanst --- gpu/build.zig | 52 +++++++++++++++------------------------------------ gpu/sdk.zig | 40 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 37 deletions(-) create mode 100644 gpu/sdk.zig diff --git a/gpu/build.zig b/gpu/build.zig index 477222ee..7ddac6aa 100644 --- a/gpu/build.zig +++ b/gpu/build.zig @@ -1,24 +1,35 @@ const std = @import("std"); -const gpu_dawn = @import("libs/mach-gpu-dawn/build.zig"); const glfw = @import("libs/mach-glfw/build.zig"); +const gpu_dawn_sdk = @import("libs/mach-gpu-dawn/sdk.zig"); +const gpu_sdk = @import("sdk.zig"); +const system_sdk = @import("libs/mach-glfw/system_sdk.zig"); pub fn build(b: *std.build.Builder) void { const mode = b.standardReleaseOptions(); const target = b.standardTargetOptions(.{}); + const gpu_dawn = gpu_dawn_sdk.Sdk(.{ + .glfw = glfw, + .glfw_include_dir = "libs/mach-glfw/upstream/glfw/include", + .system_sdk = system_sdk, + }); + const gpu = gpu_sdk.Sdk(.{ + .glfw = glfw, + .gpu_dawn = gpu_dawn, + }); const gpu_dawn_options = gpu_dawn.Options{ .from_source = b.option(bool, "dawn-from-source", "Build Dawn from source") orelse false, }; const test_step = b.step("test", "Run library tests"); - test_step.dependOn(&testStep(b, mode, target, .{ .gpu_dawn_options = gpu_dawn_options }).step); + test_step.dependOn(&gpu.testStep(b, mode, target, .{ .gpu_dawn_options = gpu_dawn_options }).step); const example = b.addExecutable("gpu-hello-triangle", "examples/main.zig"); example.setBuildMode(mode); example.setTarget(target); - example.addPackage(pkg); + example.addPackage(gpu.pkg); example.addPackage(glfw.pkg); - link(b, example, .{ .gpu_dawn_options = gpu_dawn_options }); + gpu.link(b, example, .{ .gpu_dawn_options = gpu_dawn_options }); example.install(); const example_run_cmd = example.run(); @@ -26,36 +37,3 @@ pub fn build(b: *std.build.Builder) void { const example_run_step = b.step("run-example", "Run the example"); example_run_step.dependOn(&example_run_cmd.step); } - -pub fn testStep(b: *std.build.Builder, mode: std.builtin.Mode, target: std.zig.CrossTarget, options: Options) *std.build.RunStep { - const main_tests = b.addTestExe("gpu-tests", (comptime thisDir()) ++ "/src/main.zig"); - main_tests.setBuildMode(mode); - main_tests.setTarget(target); - link(b, main_tests, options); - main_tests.install(); - return main_tests.run(); -} - -pub const Options = struct { - glfw_options: glfw.Options = .{}, - gpu_dawn_options: gpu_dawn.Options = .{}, -}; - -pub const pkg = std.build.Pkg{ - .name = "gpu", - .source = .{ .path = thisDir() ++ "/src/main.zig" }, - .dependencies = &.{glfw.pkg}, -}; - -pub fn link(b: *std.build.Builder, step: *std.build.LibExeObjStep, options: Options) void { - if (step.target.toTarget().cpu.arch != .wasm32) { - glfw.link(b, step, options.glfw_options); - gpu_dawn.link(b, step, options.gpu_dawn_options); - step.addCSourceFile((comptime thisDir()) ++ "/src/mach_dawn.cpp", &.{"-std=c++17"}); - step.addIncludeDir((comptime thisDir()) ++ "/src"); - } -} - -fn thisDir() []const u8 { - return std.fs.path.dirname(@src().file) orelse "."; -} diff --git a/gpu/sdk.zig b/gpu/sdk.zig new file mode 100644 index 00000000..2df6d759 --- /dev/null +++ b/gpu/sdk.zig @@ -0,0 +1,40 @@ +const std = @import("std"); +// const gpu_dawn = @import("libs/mach-gpu-dawn/build.zig"); +// const glfw = @import("libs/mach-glfw/build.zig"); + +pub fn Sdk(deps: anytype) type { + return struct { + pub fn testStep(b: *std.build.Builder, mode: std.builtin.Mode, target: std.zig.CrossTarget, options: Options) *std.build.RunStep { + const main_tests = b.addTestExe("gpu-tests", (comptime thisDir()) ++ "/src/main.zig"); + main_tests.setBuildMode(mode); + main_tests.setTarget(target); + link(b, main_tests, options); + main_tests.install(); + return main_tests.run(); + } + + pub const Options = struct { + glfw_options: deps.glfw.Options = .{}, + gpu_dawn_options: deps.gpu_dawn.Options = .{}, + }; + + pub const pkg = std.build.Pkg{ + .name = "gpu", + .source = .{ .path = thisDir() ++ "/src/main.zig" }, + .dependencies = &.{deps.glfw.pkg}, + }; + + pub fn link(b: *std.build.Builder, step: *std.build.LibExeObjStep, options: Options) void { + if (step.target.toTarget().cpu.arch != .wasm32) { + deps.glfw.link(b, step, options.glfw_options); + deps.gpu_dawn.link(b, step, options.gpu_dawn_options); + step.addCSourceFile((comptime thisDir()) ++ "/src/mach_dawn.cpp", &.{"-std=c++17"}); + step.addIncludeDir((comptime thisDir()) ++ "/src"); + } + } + + fn thisDir() []const u8 { + return std.fs.path.dirname(@src().file) orelse "."; + } + }; +}