From 26fb85df1ca96ee76ad79e76f8385e4f38737ec7 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Thu, 6 Jul 2023 22:40:47 -0700 Subject: [PATCH] gpu: prepare to use via package manager Signed-off-by: Stephen Gutekanst --- build.zig | 2 +- libs/core/build.zig | 2 +- libs/gpu/build.zig | 62 ++++++++++++++++++++++++++++++++++++++------- libs/gpu/sdk.zig | 47 ---------------------------------- 4 files changed, 55 insertions(+), 58 deletions(-) delete mode 100644 libs/gpu/sdk.zig diff --git a/build.zig b/build.zig index 3822ef6c..c00475d2 100644 --- a/build.zig +++ b/build.zig @@ -16,7 +16,7 @@ pub const gpu_dawn = @import("libs/gpu-dawn/build.zig").Sdk(.{ // error: TarUnsupportedFileType .xcode_frameworks = @import("libs/gpu-dawn/libs/xcode-frameworks/build.zig"), }); -const gpu = @import("libs/gpu/sdk.zig").Sdk(.{ +const gpu = @import("libs/gpu/build.zig").Sdk(.{ .gpu_dawn = gpu_dawn, }); const core = @import("libs/core/sdk.zig").Sdk(.{ diff --git a/libs/core/build.zig b/libs/core/build.zig index afd96485..5d9dcec4 100644 --- a/libs/core/build.zig +++ b/libs/core/build.zig @@ -10,7 +10,7 @@ const gpu_dawn = @import("libs/mach-gpu-dawn/build.zig").Sdk(.{ // error: TarUnsupportedFileType .xcode_frameworks = @import("libs/mach-gpu-dawn/libs/xcode-frameworks/build.zig"), }); -const gpu = @import("libs/mach-gpu/sdk.zig").Sdk(.{ +const gpu = @import("libs/mach-gpu/build.zig").Sdk(.{ .gpu_dawn = gpu_dawn, }); const core = @import("sdk.zig").Sdk(.{ diff --git a/libs/gpu/build.zig b/libs/gpu/build.zig index 57ff0e79..f4475e99 100644 --- a/libs/gpu/build.zig +++ b/libs/gpu/build.zig @@ -1,21 +1,19 @@ const std = @import("std"); -const glfw = @import("libs/mach-glfw/build.zig").Sdk(.{ - // TODO(build-system): This cannot be imported with the Zig package manager - // error: TarUnsupportedFileType - .xcode_frameworks = @import("libs/mach-gpu-dawn/libs/xcode-frameworks/build.zig"), -}); -const gpu_dawn_sdk = @import("libs/mach-gpu-dawn/build.zig"); -const gpu_sdk = @import("sdk.zig"); pub fn build(b: *std.Build) !void { const optimize = b.standardOptimizeOption(.{}); const target = b.standardTargetOptions(.{}); - const gpu_dawn = gpu_dawn_sdk.Sdk(.{ + const glfw = @import("libs/mach-glfw/build.zig").Sdk(.{ // TODO(build-system): This cannot be imported with the Zig package manager // error: TarUnsupportedFileType .xcode_frameworks = @import("libs/mach-gpu-dawn/libs/xcode-frameworks/build.zig"), }); - const gpu = gpu_sdk.Sdk(.{ + const gpu_dawn = @import("libs/mach-gpu-dawn/build.zig").Sdk(.{ + // TODO(build-system): This cannot be imported with the Zig package manager + // error: TarUnsupportedFileType + .xcode_frameworks = @import("libs/mach-gpu-dawn/libs/xcode-frameworks/build.zig"), + }); + const gpu = Sdk(.{ .gpu_dawn = gpu_dawn, }); @@ -44,3 +42,49 @@ pub fn build(b: *std.Build) !void { const example_run_step = b.step("run-example", "Run the example"); example_run_step.dependOn(&example_run_cmd.step); } + +pub fn Sdk(comptime deps: anytype) type { + return struct { + pub fn testStep(b: *std.Build, optimize: std.builtin.OptimizeMode, target: std.zig.CrossTarget, options: Options) !*std.build.RunStep { + const main_tests = b.addTest(.{ + .name = "gpu-tests", + .root_source_file = .{ .path = sdkPath("/src/main.zig") }, + .target = target, + .optimize = optimize, + }); + try link(b, main_tests, options); + b.installArtifact(main_tests); + return b.addRunArtifact(main_tests); + } + + pub const Options = struct { + gpu_dawn_options: deps.gpu_dawn.Options = .{}, + }; + + var _module: ?*std.build.Module = null; + + pub fn module(b: *std.Build) *std.build.Module { + if (_module) |m| return m; + _module = b.createModule(.{ + .source_file = .{ .path = sdkPath("/src/main.zig") }, + }); + return _module.?; + } + + pub fn link(b: *std.Build, step: *std.build.CompileStep, options: Options) !void { + if (step.target.toTarget().cpu.arch != .wasm32) { + try deps.gpu_dawn.link(b, step, options.gpu_dawn_options); + step.addCSourceFile(sdkPath("/src/mach_dawn.cpp"), &.{"-std=c++17"}); + step.addIncludePath(sdkPath("/src")); + } + } + + fn sdkPath(comptime suffix: []const u8) []const u8 { + if (suffix[0] != '/') @compileError("suffix must be an absolute path"); + return comptime blk: { + const root_dir = std.fs.path.dirname(@src().file) orelse "."; + break :blk root_dir ++ suffix; + }; + } + }; +} diff --git a/libs/gpu/sdk.zig b/libs/gpu/sdk.zig deleted file mode 100644 index f89f7fb1..00000000 --- a/libs/gpu/sdk.zig +++ /dev/null @@ -1,47 +0,0 @@ -const std = @import("std"); - -pub fn Sdk(comptime deps: anytype) type { - return struct { - pub fn testStep(b: *std.Build, optimize: std.builtin.OptimizeMode, target: std.zig.CrossTarget, options: Options) !*std.build.RunStep { - const main_tests = b.addTest(.{ - .name = "gpu-tests", - .root_source_file = .{ .path = sdkPath("/src/main.zig") }, - .target = target, - .optimize = optimize, - }); - try link(b, main_tests, options); - b.installArtifact(main_tests); - return b.addRunArtifact(main_tests); - } - - pub const Options = struct { - gpu_dawn_options: deps.gpu_dawn.Options = .{}, - }; - - var _module: ?*std.build.Module = null; - - pub fn module(b: *std.Build) *std.build.Module { - if (_module) |m| return m; - _module = b.createModule(.{ - .source_file = .{ .path = sdkPath("/src/main.zig") }, - }); - return _module.?; - } - - pub fn link(b: *std.Build, step: *std.build.CompileStep, options: Options) !void { - if (step.target.toTarget().cpu.arch != .wasm32) { - try deps.gpu_dawn.link(b, step, options.gpu_dawn_options); - step.addCSourceFile(sdkPath("/src/mach_dawn.cpp"), &.{"-std=c++17"}); - step.addIncludePath(sdkPath("/src")); - } - } - - fn sdkPath(comptime suffix: []const u8) []const u8 { - if (suffix[0] != '/') @compileError("suffix must be an absolute path"); - return comptime blk: { - const root_dir = std.fs.path.dirname(@src().file) orelse "."; - break :blk root_dir ++ suffix; - }; - } - }; -}