@@ -7,6 +7,29 @@ pub fn build(b: *std.Build) void {
.Debug, .ReleaseSafe => .ReleaseFast,
else => optimize,
};
const wasm_target = b.resolveTargetQuery(.{
.cpu_arch = .wasm32,
.os_tag = .freestanding,
.cpu_features_add = std.Target.wasm.featureSet(&.{
.atomics,
.bulk_memory,
// .extended_const, not supported by Safari
.multivalue,
.mutable_globals,
.nontrapping_fptoint,
.reference_types,
//.relaxed_simd, not supported by Firefox or Safari
.sign_ext,
// observed to cause Error occured during wast conversion :
// Unknown operator: 0xfd058 in Firefox 117
//.simd128,
// .tail_call, not supported by Safari
}),
});
const wasm_optimize = switch (optimize) {
.Debug => optimize,
else => .ReleaseSmall,
};
const ffmpeg_dep = b.dependency("ffmpeg", .{
.target = target,
@@ -25,11 +48,23 @@ pub fn build(b: *std.Build) void {
const libsoundio = soundio_dep.artifact("soundio");
const player = b.addModule("player", .{
.root_source_file = b.path("src/root.zig"),
.root_source_file = b.path("player/root.zig"),
.target = target,
.optimize = optimize,
});
const shared_server = b.addModule("shared", .{
.root_source_file = b.path("shared/root.zig"),
.target = target,
.optimize = optimize,
});
const shared_wasm = b.addModule("shared", .{
.root_source_file = b.path("shared/root.zig"),
.target = wasm_target,
.optimize = wasm_optimize,
});
player.addImport("av", ffmpeg_dep.module("av"));
player.addImport("SoundIo", soundio_dep.module("SoundIo"));
player.linkLibrary(libsoundio);
@@ -68,6 +103,7 @@ pub fn build(b: *std.Build) void {
.optimize = optimize,
});
groovebasin.root_module.addImport("player", player);
groovebasin.root_module.addImport("shared", shared_server);
groovebasin.root_module.addImport("StaticHttpFileServer", b.dependency("StaticHttpFileServer", .{
.optimize = optimize,
.target = target,
@@ -93,30 +129,10 @@ pub fn build(b: *std.Build) void {
const wasm = b.addExecutable(.{
.name = "main",
.root_source_file = .{ .path = "client/main.zig" },
.target = b.resolveTargetQuery(.{
.cpu_arch = .wasm32,
.os_tag = .freestanding,
.cpu_features_add = std.Target.wasm.featureSet(&.{
.atomics,
.bulk_memory,
// .extended_const, not supported by Safari
.multivalue,
.mutable_globals,
.nontrapping_fptoint,
.reference_types,
//.relaxed_simd, not supported by Firefox or Safari
.sign_ext,
// observed to cause Error occured during wast conversion :
// Unknown operator: 0xfd058 in Firefox 117
//.simd128,
// .tail_call, not supported by Safari
}),
}),
.optimize = switch (optimize) {
.Debug => .Debug,
else => .ReleaseSmall,
},
.target = wasm_target,
.optimize = wasm_optimize,
});
wasm.root_module.addImport("shared", shared_wasm);
wasm.rdynamic = true; // expose exported functions to wasm
wasm.entry = .disabled;
b.getInstallStep().dependOn(&b.addInstallFile(wasm.getEmittedBin(), "www/main.wasm").step);