fix wasm32-freestanding builds

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2024-03-04 23:46:25 -07:00 committed by Stephen Gutekanst
parent f29b775b27
commit 55317a1afc
2 changed files with 62 additions and 59 deletions

119
build.zig
View file

@ -76,23 +76,25 @@ pub fn build(b: *std.Build) !void {
if (target.result.os.tag == .linux) module.link_libc = true; if (target.result.os.tag == .linux) module.link_libc = true;
// TODO(Zig 2024.03): use b.lazyDependency // TODO(Zig 2024.03): use b.lazyDependency
const mach_basisu_dep = b.dependency("mach_basisu", .{ if (target.result.cpu.arch != .wasm32) {
.target = target, const mach_basisu_dep = b.dependency("mach_basisu", .{
.optimize = optimize, .target = target,
}); .optimize = optimize,
const mach_freetype_dep = b.dependency("mach_freetype", .{ });
.target = target, const mach_freetype_dep = b.dependency("mach_freetype", .{
.optimize = optimize, .target = target,
}); .optimize = optimize,
});
module.addImport("mach-basisu", mach_basisu_dep.module("mach-basisu"));
module.addImport("mach-freetype", mach_freetype_dep.module("mach-freetype"));
module.addImport("mach-harfbuzz", mach_freetype_dep.module("mach-harfbuzz"));
}
const mach_sysjs_dep = b.dependency("mach_sysjs", .{ const mach_sysjs_dep = b.dependency("mach_sysjs", .{
.target = target, .target = target,
.optimize = optimize, .optimize = optimize,
}); });
const font_assets_dep = b.dependency("font_assets", .{}); const font_assets_dep = b.dependency("font_assets", .{});
module.addImport("mach-basisu", mach_basisu_dep.module("mach-basisu"));
module.addImport("mach-freetype", mach_freetype_dep.module("mach-freetype"));
module.addImport("mach-harfbuzz", mach_freetype_dep.module("mach-harfbuzz"));
module.addImport("mach-sysjs", mach_sysjs_dep.module("mach-sysjs")); module.addImport("mach-sysjs", mach_sysjs_dep.module("mach-sysjs"));
module.addImport("font-assets", font_assets_dep.module("font-assets")); module.addImport("font-assets", font_assets_dep.module("font-assets"));
} }
@ -131,44 +133,44 @@ pub fn build(b: *std.Build) !void {
} }
if (want_sysaudio) { if (want_sysaudio) {
// Can build sysaudio examples if desired, then. // Can build sysaudio examples if desired, then.
inline for ([_][]const u8{ if (target.result.cpu.arch != .wasm32) {
"sine", inline for ([_][]const u8{
"record", "sine",
}) |example| { "record",
const example_exe = b.addExecutable(.{ }) |example| {
.name = "sysaudio-" ++ example, const example_exe = b.addExecutable(.{
.root_source_file = .{ .path = "src/sysaudio/examples/" ++ example ++ ".zig" }, .name = "sysaudio-" ++ example,
.root_source_file = .{ .path = "src/sysaudio/examples/" ++ example ++ ".zig" },
.target = target,
.optimize = optimize,
});
example_exe.root_module.addImport("mach", module);
addPaths(&example_exe.root_module);
b.installArtifact(example_exe);
const example_compile_step = b.step("sysaudio-" ++ example, "Compile 'sysaudio-" ++ example ++ "' example");
example_compile_step.dependOn(b.getInstallStep());
const example_run_cmd = b.addRunArtifact(example_exe);
example_run_cmd.step.dependOn(b.getInstallStep());
if (b.args) |args| example_run_cmd.addArgs(args);
const example_run_step = b.step("run-sysaudio-" ++ example, "Run '" ++ example ++ "' example");
example_run_step.dependOn(&example_run_cmd.step);
}
const mach_objc_dep = b.dependency("mach_objc", .{
.target = target, .target = target,
.optimize = optimize, .optimize = optimize,
}); });
example_exe.root_module.addImport("mach", module); module.addImport("objc", mach_objc_dep.module("mach-objc"));
addPaths(&example_exe.root_module); } else {
b.installArtifact(example_exe); const mach_sysjs_dep = b.dependency("mach_sysjs", .{
.target = target,
const example_compile_step = b.step("sysaudio-" ++ example, "Compile 'sysaudio-" ++ example ++ "' example"); .optimize = optimize,
example_compile_step.dependOn(b.getInstallStep()); });
module.addImport("sysjs", mach_sysjs_dep.module("mach-sysjs"));
const example_run_cmd = b.addRunArtifact(example_exe);
example_run_cmd.step.dependOn(b.getInstallStep());
if (b.args) |args| example_run_cmd.addArgs(args);
const example_run_step = b.step("run-sysaudio-" ++ example, "Run '" ++ example ++ "' example");
example_run_step.dependOn(&example_run_cmd.step);
} }
// Add sysaudio dependencies to the module.
// TODO(Zig 2024.03): use b.lazyDependency
const mach_sysjs_dep = b.dependency("mach_sysjs", .{
.target = target,
.optimize = optimize,
});
const mach_objc_dep = b.dependency("mach_objc", .{
.target = target,
.optimize = optimize,
});
module.addImport("sysjs", mach_sysjs_dep.module("mach-sysjs"));
module.addImport("objc", mach_objc_dep.module("mach-objc"));
if (target.result.isDarwin()) { if (target.result.isDarwin()) {
// Transitive dependencies, explicit linkage of these works around // Transitive dependencies, explicit linkage of these works around
// ziglang/zig#17130 // ziglang/zig#17130
@ -485,9 +487,9 @@ pub fn link(core_builder: *std.Build, step: *std.Build.Step.Compile, mod: *std.B
} }
fn linkSysgpu(b: *std.Build, module: *std.Build.Module) void { fn linkSysgpu(b: *std.Build, module: *std.Build.Module) void {
module.link_libc = true; const resolved_target = module.resolved_target orelse b.host;
const target = resolved_target.result;
const target = module.resolved_target.?.result; if (target.cpu.arch != .wasm32) module.link_libc = true;
if (target.isDarwin()) { if (target.isDarwin()) {
module.linkSystemLibrary("objc", .{}); module.linkSystemLibrary("objc", .{});
module.linkFramework("AppKit", .{}); module.linkFramework("AppKit", .{});
@ -501,24 +503,25 @@ fn linkSysgpu(b: *std.Build, module: *std.Build.Module) void {
module.linkSystemLibrary("d3dcompiler_47", .{}); module.linkSystemLibrary("d3dcompiler_47", .{});
module.linkSystemLibrary("opengl32", .{}); module.linkSystemLibrary("opengl32", .{});
module.linkLibrary(b.dependency("direct3d_headers", .{ module.linkLibrary(b.dependency("direct3d_headers", .{
.target = module.resolved_target orelse b.host, .target = resolved_target,
.optimize = module.optimize.?, .optimize = module.optimize.?,
}).artifact("direct3d-headers")); }).artifact("direct3d-headers"));
@import("direct3d_headers").addLibraryPathToModule(module); @import("direct3d_headers").addLibraryPathToModule(module);
module.linkLibrary(b.dependency("opengl_headers", .{ module.linkLibrary(b.dependency("opengl_headers", .{
.target = module.resolved_target orelse b.host, .target = resolved_target,
.optimize = module.optimize.?, .optimize = module.optimize.?,
}).artifact("opengl-headers")); }).artifact("opengl-headers"));
} }
if (target.cpu.arch != .wasm32) {
module.linkLibrary(b.dependency("spirv_cross", .{ module.linkLibrary(b.dependency("spirv_cross", .{
.target = module.resolved_target orelse b.host, .target = resolved_target,
.optimize = module.optimize.?, .optimize = module.optimize.?,
}).artifact("spirv-cross")); }).artifact("spirv-cross"));
module.linkLibrary(b.dependency("spirv_tools", .{ module.linkLibrary(b.dependency("spirv_tools", .{
.target = module.resolved_target orelse b.host, .target = resolved_target,
.optimize = module.optimize.?, .optimize = module.optimize.?,
}).artifact("spirv-opt")); }).artifact("spirv-opt"));
}
} }
pub fn addPaths(mod: *std.Build.Module) void { pub fn addPaths(mod: *std.Build.Module) void {

View file

@ -51,7 +51,7 @@ pub const Context = struct {
pub fn refresh(ctx: *Context) !void { pub fn refresh(ctx: *Context) !void {
for (ctx.devices_info.list.items) |d| for (ctx.devices_info.list.items) |d|
freeDevice(ctx.allocator, d); freeDevice(ctx.allocator, d);
ctx.devices_info.clear(ctx.allocator); ctx.devices_info.clear();
try ctx.devices_info.list.append(ctx.allocator, default_playback); try ctx.devices_info.list.append(ctx.allocator, default_playback);
ctx.devices_info.list.items[0].channels = try ctx.allocator.alloc(main.ChannelPosition, 2); ctx.devices_info.list.items[0].channels = try ctx.allocator.alloc(main.ChannelPosition, 2);