const std = @import("std"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); const module = b.addModule("cloud9", .{ .root_source_file = b.path("src/root.zig"), .target = target, .optimize = optimize, }); const tests = b.addTest(.{ .root_module = module }); b.step("test", "Run protocol and session tests").dependOn(&b.addRunArtifact(tests).step); const probe = b.addExecutable(.{ .name = "cloud9-probe", .root_module = b.createModule(.{ .root_source_file = b.path("test/differential/probe.zig"), .target = target, .optimize = optimize, .link_libc = true, .imports = &.{.{ .name = "cloud9", .module = module }}, }), }); b.installArtifact(probe); const session_probe = b.addExecutable(.{ .name = "cloud9-session-probe", .root_module = b.createModule(.{ .root_source_file = b.path("test/differential/session.zig"), .target = target, .optimize = optimize, .link_libc = true, .imports = &.{.{ .name = "cloud9", .module = module }}, }), }); const diff = b.addSystemCommand(&.{ "go", "run", "." }); diff.setCwd(b.path("test/differential")); diff.addArg("--probe"); diff.addArtifactArg(probe); diff.addArg("--session-probe"); diff.addArtifactArg(session_probe); if (b.args) |args| diff.addArgs(args); b.step("differential", "Compare valid traffic with pinned 9fans and go9p").dependOn(&diff.step); const transport_tests = b.addTest(.{ .root_module = b.createModule(.{ .root_source_file = b.path("test/transport.zig"), .target = target, .optimize = optimize, .link_libc = true, .imports = &.{.{ .name = "cloud9", .module = module }}, }) }); b.step("transport-test", "Test TCP, Unix and std.Io adapters").dependOn(&b.addRunArtifact(transport_tests).step); if (b.option(bool, "quic", "Test QUIC with system OpenSSL 3.6+") orelse false) { const header = b.addWriteFiles().add("openssl.h", "#include \n#include \n#include \n"); const translated = b.addTranslateC(.{ .root_source_file = header, .target = target, .optimize = optimize, .link_libc = true }); const ssl = translated.createModule(); const tests_quic = b.addTest(.{ .root_module = b.createModule(.{ .root_source_file = b.path("test/quic.zig"), .target = target, .optimize = optimize, .link_libc = true, .imports = &.{ .{ .name = "cloud9", .module = module }, .{ .name = "openssl", .module = ssl } }, }) }); tests_quic.root_module.linkSystemLibrary("ssl", .{}); tests_quic.root_module.linkSystemLibrary("crypto", .{}); b.step("quic-test", "Test optional QUIC transport").dependOn(&b.addRunArtifact(tests_quic).step); } const fuzz = b.addExecutable(.{ .name = "cloud9-fuzz", .root_module = b.createModule(.{ .root_source_file = b.path("test/fuzz.zig"), .target = target, .optimize = optimize, .imports = &.{.{ .name = "cloud9", .module = module }}, }) }); const run_fuzz = b.addRunArtifact(fuzz); if (b.args) |args| run_fuzz.addArgs(args); b.step("fuzz", "Run deterministic local decoder and server probes (seed, iterations)").dependOn(&run_fuzz.step); }