build.zig (8064B)
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 v2_protocol_tests = b.addTest(.{ .root_module = b.createModule(.{ 23 .root_source_file = b.path("src/io_v2_protocol.zig"), 24 .target = target, 25 .optimize = optimize, 26 }) }); 27 test_step.dependOn(&b.addRunArtifact(v2_protocol_tests).step); 28 29 const v2_resource_tests = b.addTest(.{ .root_module = b.createModule(.{ 30 .root_source_file = b.path("src/io_v2_resources.zig"), 31 .target = target, 32 .optimize = optimize, 33 }) }); 34 test_step.dependOn(&b.addRunArtifact(v2_resource_tests).step); 35 36 const v2_task_tests = b.addTest(.{ .root_module = b.createModule(.{ 37 .root_source_file = b.path("src/io_v2_tasks.zig"), 38 .target = target, 39 .optimize = optimize, 40 }) }); 41 test_step.dependOn(&b.addRunArtifact(v2_task_tests).step); 42 43 const v2_core_tests = b.addTest(.{ .root_module = b.createModule(.{ 44 .root_source_file = b.path("src/io_v2_core.zig"), 45 .target = target, 46 .optimize = optimize, 47 }) }); 48 test_step.dependOn(&b.addRunArtifact(v2_core_tests).step); 49 50 const v2_files_mod = b.createModule(.{ 51 .root_source_file = b.path("src/io_v2_files.zig"), 52 .target = target, 53 .optimize = optimize, 54 }); 55 v2_files_mod.link_libc = true; 56 v2_files_mod.linkSystemLibrary("uv", .{}); 57 test_step.dependOn(&b.addRunArtifact(b.addTest(.{ .root_module = v2_files_mod })).step); 58 59 const v2_file_host_mod = b.createModule(.{ 60 .root_source_file = b.path("src/io_v2_file_host.zig"), 61 .target = target, 62 .optimize = optimize, 63 }); 64 v2_file_host_mod.link_libc = true; 65 v2_file_host_mod.linkSystemLibrary("uv", .{}); 66 test_step.dependOn(&b.addRunArtifact(b.addTest(.{ .root_module = v2_file_host_mod })).step); 67 68 const v2_native_mod = b.createModule(.{ 69 .root_source_file = b.path("src/io_v2_native.zig"), 70 .target = target, 71 .optimize = optimize, 72 }); 73 v2_native_mod.link_libc = true; 74 v2_native_mod.linkSystemLibrary("uv", .{}); 75 test_step.dependOn(&b.addRunArtifact(b.addTest(.{ .root_module = v2_native_mod })).step); 76 77 const v2_paths_mod = b.createModule(.{ 78 .root_source_file = b.path("src/io_v2_paths.zig"), 79 .target = target, 80 .optimize = optimize, 81 }); 82 v2_paths_mod.link_libc = true; 83 v2_paths_mod.linkSystemLibrary("uv", .{}); 84 test_step.dependOn(&b.addRunArtifact(b.addTest(.{ .root_module = v2_paths_mod })).step); 85 86 const v2_digest_mod = b.createModule(.{ 87 .root_source_file = b.path("src/io_v2_digest.zig"), 88 .target = target, 89 .optimize = optimize, 90 }); 91 test_step.dependOn(&b.addRunArtifact(b.addTest(.{ .root_module = v2_digest_mod })).step); 92 93 const v2_stage_mod = b.createModule(.{ 94 .root_source_file = b.path("src/io_v2_stage_state.zig"), 95 .target = target, 96 .optimize = optimize, 97 }); 98 test_step.dependOn(&b.addRunArtifact(b.addTest(.{ .root_module = v2_stage_mod })).step); 99 100 const v2_native_stage_mod = b.createModule(.{ 101 .root_source_file = b.path("src/io_v2_stage.zig"), 102 .target = target, 103 .optimize = optimize, 104 }); 105 v2_native_stage_mod.link_libc = true; 106 v2_native_stage_mod.linkSystemLibrary("uv", .{}); 107 test_step.dependOn(&b.addRunArtifact(b.addTest(.{ .root_module = v2_native_stage_mod })).step); 108 109 const v2_utf8_mod = b.createModule(.{ 110 .root_source_file = b.path("src/io_v2_utf8.zig"), 111 .target = target, 112 .optimize = optimize, 113 }); 114 test_step.dependOn(&b.addRunArtifact(b.addTest(.{ .root_module = v2_utf8_mod })).step); 115 116 const v2_probe_tests = b.createModule(.{ 117 .root_source_file = b.path("src/io_v2_core_probe.zig"), 118 .target = target, 119 .optimize = optimize, 120 }); 121 test_step.dependOn(&b.addRunArtifact(b.addTest(.{ .root_module = v2_probe_tests })).step); 122 123 const core_probe = b.addExecutable(.{ .name = "io-v2-core-probe", .root_module = b.createModule(.{ 124 .root_source_file = b.path("src/io_v2_core_probe.zig"), 125 .target = target, 126 .optimize = optimize, 127 }) }); 128 b.installArtifact(core_probe); 129 130 const file_probe_mod = b.createModule(.{ 131 .root_source_file = b.path("src/io_v2_file_probe.zig"), 132 .target = target, 133 .optimize = optimize, 134 }); 135 file_probe_mod.link_libc = true; 136 file_probe_mod.linkSystemLibrary("uv", .{}); 137 b.installArtifact(b.addExecutable(.{ .name = "io-v2-file-probe", .root_module = file_probe_mod })); 138 139 // -- kernel generator tool (runs on build host) -- 140 const gen_kernel_mod = b.createModule(.{ 141 .root_source_file = b.path("tools/gen_kernel.zig"), 142 .target = b.graph.host, 143 .optimize = .ReleaseSafe, 144 }); 145 const gen_kernel = b.addExecutable(.{ 146 .name = "gen_kernel", 147 .root_module = gen_kernel_mod, 148 }); 149 150 const run_gen_kernel = b.addRunArtifact(gen_kernel); 151 run_gen_kernel.addFileArg(b.path("kernel_run_arboricx_typed.dag")); 152 const kernel_embed = run_gen_kernel.addOutputFileArg("kernel_embed.zig"); 153 154 // -- kernel module shared by exe and lib -- 155 const kernel_mod = b.createModule(.{ 156 .root_source_file = kernel_embed, 157 }); 158 159 // Independent browser evaluator: no WASI, libc, libuv, or host imports. 160 const wasm_mod = b.createModule(.{ 161 .root_source_file = b.path("src/c_abi.zig"), 162 .target = b.resolveTargetQuery(.{ .cpu_arch = .wasm32, .os_tag = .freestanding }), 163 .optimize = .ReleaseSafe, 164 }); 165 wasm_mod.addImport("kernel_embed", kernel_mod); 166 const wasm = b.addExecutable(.{ .name = "arboricx", .root_module = wasm_mod }); 167 wasm.entry = .disabled; 168 wasm.rdynamic = true; 169 wasm.stack_size = 8 * 1024 * 1024; 170 wasm.max_memory = 512 * 1024 * 1024; 171 const install_wasm = b.addInstallArtifact(wasm, .{}); 172 b.step("wasm", "Build the standalone browser evaluator prototype").dependOn(&install_wasm.step); 173 174 // -- main CLI executable -- 175 const exe_mod = b.createModule(.{ 176 .root_source_file = b.path("src/main.zig"), 177 .target = target, 178 .optimize = optimize, 179 }); 180 exe_mod.addImport("kernel_embed", kernel_mod); 181 exe_mod.link_libc = true; 182 exe_mod.linkSystemLibrary("uv", .{}); 183 const exe = b.addExecutable(.{ 184 .name = "tricu-zig", 185 .root_module = exe_mod, 186 }); 187 b.installArtifact(exe); 188 189 const run_cmd = b.addRunArtifact(exe); 190 run_cmd.step.dependOn(b.getInstallStep()); 191 const run_step = b.step("run", "Run tricu-zig"); 192 run_step.dependOn(&run_cmd.step); 193 194 // -- C ABI static library -- 195 const lib_mod = b.createModule(.{ 196 .root_source_file = b.path("src/c_abi.zig"), 197 .target = target, 198 .optimize = optimize, 199 }); 200 lib_mod.pic = true; 201 lib_mod.addImport("kernel_embed", kernel_mod); 202 lib_mod.link_libc = true; 203 lib_mod.linkSystemLibrary("uv", .{}); 204 const static_lib = b.addLibrary(.{ 205 .name = "arboricx", 206 .root_module = lib_mod, 207 }); 208 b.installArtifact(static_lib); 209 210 // -- C ABI shared library (for dynamic language FFI) -- 211 const shared_lib = b.addLibrary(.{ 212 .name = "arboricx", 213 .root_module = lib_mod, 214 .linkage = .dynamic, 215 }); 216 b.installArtifact(shared_lib); 217 }