srctree

build.zig
d3152247  Andrew Kelley const std = @import("std"); d3152247  Andrew Kelley d3152247  Andrew Kelley pub fn build(b: *std.Build) void { d3152247  Andrew Kelley const target = b.standardTargetOptions(.{}); d3152247  Andrew Kelley const optimize = b.standardOptimizeOption(.{}); 5add7a07  Andrew Kelley const dep_optimize = b.option(std.builtin.OptimizeMode, "dep-optimize", "optimization mode of most dependencies") orelse .ReleaseFast; 0ea76022  Andrew Kelley const wasm_target = b.resolveTargetQuery(.{ 0ea76022  Andrew Kelley .cpu_arch = .wasm32, 0ea76022  Andrew Kelley .os_tag = .freestanding, 0ea76022  Andrew Kelley .cpu_features_add = std.Target.wasm.featureSet(&.{ 0ea76022  Andrew Kelley .atomics, 0ea76022  Andrew Kelley .bulk_memory, 0ea76022  Andrew Kelley // .extended_const, not supported by Safari 0ea76022  Andrew Kelley .multivalue, 0ea76022  Andrew Kelley .mutable_globals, 0ea76022  Andrew Kelley .nontrapping_fptoint, 0ea76022  Andrew Kelley .reference_types, 0ea76022  Andrew Kelley //.relaxed_simd, not supported by Firefox or Safari 0ea76022  Andrew Kelley .sign_ext, 0ea76022  Andrew Kelley // observed to cause Error occured during wast conversion : 0ea76022  Andrew Kelley // Unknown operator: 0xfd058 in Firefox 117 0ea76022  Andrew Kelley //.simd128, 0ea76022  Andrew Kelley // .tail_call, not supported by Safari 0ea76022  Andrew Kelley }), 0ea76022  Andrew Kelley }); 0ea76022  Andrew Kelley const wasm_optimize = switch (optimize) { 0ea76022  Andrew Kelley .Debug => optimize, 0ea76022  Andrew Kelley else => .ReleaseSmall, 0ea76022  Andrew Kelley }; d3152247  Andrew Kelley d3152247  Andrew Kelley const ffmpeg_dep = b.dependency("ffmpeg", .{ d3152247  Andrew Kelley .target = target, 5add7a07  Andrew Kelley .optimize = dep_optimize, d3152247  Andrew Kelley }); 3894cd54  Andrew Kelley const python_dep = b.dependency("cpython", .{ 3894cd54  Andrew Kelley .target = target, 5add7a07  Andrew Kelley .optimize = dep_optimize, 3894cd54  Andrew Kelley }); d3152247  Andrew Kelley const soundio_dep = b.dependency("soundio", .{ d3152247  Andrew Kelley .target = target, 10f2e0f0  Andrew Kelley // I encountered undefined behavior in the pulseaudio C library code. 5add7a07  Andrew Kelley // If this is Debug or ReleaseSafe it gets triggered. 5add7a07  Andrew Kelley .optimize = dep_optimize, d3152247  Andrew Kelley }); d3152247  Andrew Kelley const libsoundio = soundio_dep.artifact("soundio"); d3152247  Andrew Kelley af9a47ba  Andrew Kelley const twi_mod = b.addModule("Twi", .{ af9a47ba  Andrew Kelley .root_source_file = b.path("Twi/Twi.zig"), af9a47ba  Andrew Kelley .target = target, af9a47ba  Andrew Kelley .optimize = optimize, af9a47ba  Andrew Kelley }); af9a47ba  Andrew Kelley d3152247  Andrew Kelley const player = b.addModule("player", .{ 0ea76022  Andrew Kelley .root_source_file = b.path("player/root.zig"), 0ea76022  Andrew Kelley .target = target, 0ea76022  Andrew Kelley .optimize = optimize, af9a47ba  Andrew Kelley .imports = &.{ af9a47ba  Andrew Kelley .{ .name = "Twi", .module = twi_mod }, af9a47ba  Andrew Kelley }, 0ea76022  Andrew Kelley }); 0ea76022  Andrew Kelley 0ea76022  Andrew Kelley const shared_server = b.addModule("shared", .{ 0ea76022  Andrew Kelley .root_source_file = b.path("shared/root.zig"), d3152247  Andrew Kelley .target = target, d3152247  Andrew Kelley .optimize = optimize, af9a47ba  Andrew Kelley .imports = &.{ af9a47ba  Andrew Kelley .{ .name = "Twi", .module = twi_mod }, af9a47ba  Andrew Kelley }, d3152247  Andrew Kelley }); d3152247  Andrew Kelley 0ea76022  Andrew Kelley const shared_wasm = b.addModule("shared", .{ 0ea76022  Andrew Kelley .root_source_file = b.path("shared/root.zig"), 0ea76022  Andrew Kelley .target = wasm_target, 0ea76022  Andrew Kelley .optimize = wasm_optimize, af9a47ba  Andrew Kelley .imports = &.{ af9a47ba  Andrew Kelley .{ .name = "Twi", .module = twi_mod }, af9a47ba  Andrew Kelley }, 0ea76022  Andrew Kelley }); 0ea76022  Andrew Kelley c44961c2  Andrew Kelley player.addImport("av", ffmpeg_dep.module("av")); 98715d16  Andrew Kelley player.addImport("SoundIo", soundio_dep.module("SoundIo")); d3152247  Andrew Kelley player.linkLibrary(libsoundio); d3152247  Andrew Kelley d3152247  Andrew Kelley const playlist = b.addExecutable(.{ d3152247  Andrew Kelley .name = "playlist", 6d17e579  Andrew Kelley .root_source_file = b.path("example/playlist.zig"), d3152247  Andrew Kelley .target = target, d3152247  Andrew Kelley .optimize = optimize, d3152247  Andrew Kelley }); d3152247  Andrew Kelley playlist.root_module.addImport("player", player); 979edc80  Andrew Kelley installBin(b, playlist); f898e55b  Andrew Kelley 7f18aa00  Andrew Kelley const analyze = b.addExecutable(.{ 7f18aa00  Andrew Kelley .name = "analyze", 6d17e579  Andrew Kelley .root_source_file = b.path("example/analyze.zig"), f898e55b  Andrew Kelley .target = target, f898e55b  Andrew Kelley .optimize = optimize, f898e55b  Andrew Kelley }); 7f18aa00  Andrew Kelley analyze.root_module.addImport("player", player); 979edc80  Andrew Kelley installBin(b, analyze); 222c97c7  Andrew Kelley 222c97c7  Andrew Kelley const fingerprint = b.addExecutable(.{ 222c97c7  Andrew Kelley .name = "fingerprint", 6d17e579  Andrew Kelley .root_source_file = b.path("example/fingerprint.zig"), 222c97c7  Andrew Kelley .target = target, 222c97c7  Andrew Kelley .optimize = optimize, 222c97c7  Andrew Kelley }); 222c97c7  Andrew Kelley fingerprint.root_module.addImport("player", player); 979edc80  Andrew Kelley installBin(b, fingerprint); bb36552c  Andrew Kelley bb36552c  Andrew Kelley const groovebasin = b.addExecutable(.{ bb36552c  Andrew Kelley .name = "groovebasin", bb36552c  Andrew Kelley .root_source_file = b.path("server/main.zig"), bb36552c  Andrew Kelley .target = target, bb36552c  Andrew Kelley .optimize = optimize, bb36552c  Andrew Kelley }); bb36552c  Andrew Kelley groovebasin.root_module.addImport("player", player); 0ea76022  Andrew Kelley groovebasin.root_module.addImport("shared", shared_server); 74c070ec  Andrew Kelley groovebasin.root_module.addImport("StaticHttpFileServer", b.dependency("StaticHttpFileServer", .{ 74c070ec  Andrew Kelley .optimize = optimize, 74c070ec  Andrew Kelley .target = target, 74c070ec  Andrew Kelley }).module("StaticHttpFileServer")); 979edc80  Andrew Kelley installBin(b, groovebasin); 3894cd54  Andrew Kelley 3894cd54  Andrew Kelley b.getInstallStep().dependOn(&b.addInstallArtifact(python_dep.artifact("cpython"), .{ 3894cd54  Andrew Kelley .dest_dir = .{ .override = .{ .custom = "python" } }, 3894cd54  Andrew Kelley }).step); 3894cd54  Andrew Kelley 3894cd54  Andrew Kelley b.installDirectory(.{ 3894cd54  Andrew Kelley .source_dir = python_dep.path("Lib"), 3894cd54  Andrew Kelley .install_dir = .prefix, 3894cd54  Andrew Kelley .install_subdir = "python/Lib", 3894cd54  Andrew Kelley }); 74c070ec  Andrew Kelley 74c070ec  Andrew Kelley b.installDirectory(.{ 74c070ec  Andrew Kelley .source_dir = b.path("www"), 74c070ec  Andrew Kelley .install_dir = .prefix, 74c070ec  Andrew Kelley .install_subdir = "www", 74c070ec  Andrew Kelley }); e432dfc3  Andrew Kelley e432dfc3  Andrew Kelley const wasm = b.addExecutable(.{ e432dfc3  Andrew Kelley .name = "main", e432dfc3  Andrew Kelley .root_source_file = .{ .path = "client/main.zig" }, 0ea76022  Andrew Kelley .target = wasm_target, 0ea76022  Andrew Kelley .optimize = wasm_optimize, e432dfc3  Andrew Kelley }); 0ea76022  Andrew Kelley wasm.root_module.addImport("shared", shared_wasm); e432dfc3  Andrew Kelley wasm.rdynamic = true; // expose exported functions to wasm e432dfc3  Andrew Kelley wasm.entry = .disabled; e432dfc3  Andrew Kelley b.getInstallStep().dependOn(&b.addInstallFile(wasm.getEmittedBin(), "www/main.wasm").step); 65ce41ed  Andrew Kelley 65ce41ed  Andrew Kelley const unit_tests = b.addTest(.{ 65ce41ed  Andrew Kelley .root_source_file = b.path("server/main.zig"), 65ce41ed  Andrew Kelley .target = target, 65ce41ed  Andrew Kelley .optimize = optimize, 65ce41ed  Andrew Kelley }); 65ce41ed  Andrew Kelley const run_unit_tests = b.addRunArtifact(unit_tests); 65ce41ed  Andrew Kelley const test_step = b.step("test", "Run unit tests"); 65ce41ed  Andrew Kelley test_step.dependOn(&run_unit_tests.step); 979edc80  Andrew Kelley } 979edc80  Andrew Kelley 979edc80  Andrew Kelley fn installBin(b: *std.Build, bin: *std.Build.Step.Compile) void { 979edc80  Andrew Kelley b.getInstallStep().dependOn(&b.addInstallArtifact(bin, .{ 979edc80  Andrew Kelley .dest_dir = .{ .override = .prefix }, 979edc80  Andrew Kelley }).step); d3152247  Andrew Kelley }