build.zig (3913B)
1 const std = @import("std"); 2 3 pub fn build(b: *std.Build) void { 4 const target = b.standardTargetOptions(.{}); 5 const optimize = b.standardOptimizeOption(.{}); 6 7 const reducer_tests = b.addTest(.{ .root_module = b.createModule(.{ 8 .root_source_file = b.path("src/reduce_test.zig"), 9 .target = target, 10 .optimize = optimize, 11 }) }); 12 const test_step = b.step("test", "Run reducer, collection and demand tests"); 13 test_step.dependOn(&b.addRunArtifact(reducer_tests).step); 14 15 const preview_tests = b.addTest(.{ .root_module = b.createModule(.{ 16 .root_source_file = b.path("src/preview.zig"), 17 .target = target, 18 .optimize = optimize, 19 }) }); 20 test_step.dependOn(&b.addRunArtifact(preview_tests).step); 21 22 const io_tests_mod = b.createModule(.{ 23 .root_source_file = b.path("src/io_driver.zig"), 24 .target = target, 25 .optimize = optimize, 26 }); 27 io_tests_mod.link_libc = true; 28 io_tests_mod.linkSystemLibrary("uv", .{}); 29 const io_tests = b.addTest(.{ .root_module = io_tests_mod }); 30 test_step.dependOn(&b.addRunArtifact(io_tests).step); 31 32 // -- kernel generator tool (runs on build host) -- 33 const gen_kernel_mod = b.createModule(.{ 34 .root_source_file = b.path("tools/gen_kernel.zig"), 35 .target = b.graph.host, 36 .optimize = .ReleaseSafe, 37 }); 38 const gen_kernel = b.addExecutable(.{ 39 .name = "gen_kernel", 40 .root_module = gen_kernel_mod, 41 }); 42 43 const run_gen_kernel = b.addRunArtifact(gen_kernel); 44 run_gen_kernel.addFileArg(b.path("kernel_run_arboricx_typed.dag")); 45 const kernel_embed = run_gen_kernel.addOutputFileArg("kernel_embed.zig"); 46 47 // -- kernel module shared by exe and lib -- 48 const kernel_mod = b.createModule(.{ 49 .root_source_file = kernel_embed, 50 }); 51 52 // Independent browser evaluator: no WASI, libc, libuv, or host imports. 53 const wasm_mod = b.createModule(.{ 54 .root_source_file = b.path("src/c_abi.zig"), 55 .target = b.resolveTargetQuery(.{ .cpu_arch = .wasm32, .os_tag = .freestanding }), 56 .optimize = .ReleaseSafe, 57 }); 58 wasm_mod.addImport("kernel_embed", kernel_mod); 59 const wasm = b.addExecutable(.{ .name = "arboricx", .root_module = wasm_mod }); 60 wasm.entry = .disabled; 61 wasm.rdynamic = true; 62 wasm.stack_size = 8 * 1024 * 1024; 63 wasm.max_memory = 512 * 1024 * 1024; 64 const install_wasm = b.addInstallArtifact(wasm, .{}); 65 b.step("wasm", "Build the standalone browser evaluator prototype").dependOn(&install_wasm.step); 66 67 // -- main CLI executable -- 68 const exe_mod = b.createModule(.{ 69 .root_source_file = b.path("src/main.zig"), 70 .target = target, 71 .optimize = optimize, 72 }); 73 exe_mod.addImport("kernel_embed", kernel_mod); 74 exe_mod.link_libc = true; 75 exe_mod.linkSystemLibrary("uv", .{}); 76 const exe = b.addExecutable(.{ 77 .name = "tricu-zig", 78 .root_module = exe_mod, 79 }); 80 b.installArtifact(exe); 81 82 const run_cmd = b.addRunArtifact(exe); 83 run_cmd.step.dependOn(b.getInstallStep()); 84 const run_step = b.step("run", "Run tricu-zig"); 85 run_step.dependOn(&run_cmd.step); 86 87 // -- C ABI static library -- 88 const lib_mod = b.createModule(.{ 89 .root_source_file = b.path("src/c_abi.zig"), 90 .target = target, 91 .optimize = optimize, 92 }); 93 lib_mod.pic = true; 94 lib_mod.addImport("kernel_embed", kernel_mod); 95 lib_mod.link_libc = true; 96 lib_mod.linkSystemLibrary("uv", .{}); 97 const static_lib = b.addLibrary(.{ 98 .name = "arboricx", 99 .root_module = lib_mod, 100 }); 101 b.installArtifact(static_lib); 102 103 // -- C ABI shared library (for dynamic language FFI) -- 104 const shared_lib = b.addLibrary(.{ 105 .name = "arboricx", 106 .root_module = lib_mod, 107 .linkage = .dynamic, 108 }); 109 b.installArtifact(shared_lib); 110 }