atproto relay implementation in zig zlay.waow.tech
9
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 97 lines 3.2 kB view raw
1const std = @import("std"); 2 3pub fn build(b: *std.Build) void { 4 const target = b.standardTargetOptions(.{}); 5 const optimize = b.standardOptimizeOption(.{}); 6 7 const zat = b.dependency("zat", .{ 8 .target = target, 9 .optimize = optimize, 10 }); 11 const websocket = b.dependency("websocket", .{ 12 .target = target, 13 .optimize = optimize, 14 }); 15 const pg = b.dependency("pg", .{ 16 .target = target, 17 .optimize = optimize, 18 }); 19 const rocksdb = b.dependency("rocksdb", .{ 20 .target = target, 21 .optimize = optimize, 22 }); 23 24 const imports: []const std.Build.Module.Import = &.{ 25 .{ .name = "zat", .module = zat.module("zat") }, 26 .{ .name = "websocket", .module = websocket.module("websocket") }, 27 .{ .name = "pg", .module = pg.module("pg") }, 28 .{ .name = "rocksdb", .module = rocksdb.module("bindings") }, 29 }; 30 31 // embed build info (git SHA + optimize mode) for canary metric 32 const build_options = b.addOptions(); 33 build_options.addOption([]const u8, "git_sha", git_sha: { 34 var code: u8 = 0; 35 const result = b.runAllowFail(&.{ "git", "rev-parse", "--short", "HEAD" }, &code, .ignore); 36 if (result) |output| { 37 break :git_sha std.mem.trimEnd(u8, output, "\n \t"); 38 } else |_| { 39 break :git_sha "unknown"; 40 } 41 }); 42 build_options.addOption([]const u8, "optimize", @tagName(optimize)); 43 const use_gpa = b.option(bool, "use_gpa", "use GeneralPurposeAllocator for leak detection (slow)") orelse false; 44 build_options.addOption(bool, "use_gpa", use_gpa); 45 46 // relay executable 47 const relay_mod = b.createModule(.{ 48 .root_source_file = b.path("src/main.zig"), 49 .target = target, 50 .optimize = optimize, 51 .imports = imports, 52 }); 53 relay_mod.addImport("build_options", build_options.createModule()); 54 relay_mod.link_libc = true; 55 relay_mod.link_libcpp = true; 56 const relay = b.addExecutable(.{ 57 .name = "zlay", 58 .root_module = relay_mod, 59 }); 60 b.installArtifact(relay); 61 62 const run_relay = b.addRunArtifact(relay); 63 if (b.args) |args| run_relay.addArgs(args); 64 const run_step = b.step("run", "run the relay"); 65 run_step.dependOn(&run_relay.step); 66 67 // tests 68 const test_step = b.step("test", "run unit tests"); 69 const test_files = .{ 70 "src/lru.zig", 71 "src/api.zig", 72 "src/broadcaster.zig", 73 "src/validator.zig", 74 "src/subscriber.zig", 75 "src/event_log.zig", 76 "src/slurper.zig", 77 "src/collection_index.zig", 78 "src/backfill.zig", 79 "src/thread_pool.zig", 80 "src/frame_worker.zig", 81 }; 82 inline for (test_files) |file| { 83 const test_mod = b.createModule(.{ 84 .root_source_file = b.path(file), 85 .target = target, 86 .optimize = optimize, 87 .imports = imports, 88 }); 89 test_mod.addImport("build_options", build_options.createModule()); 90 test_mod.link_libc = true; 91 test_mod.link_libcpp = true; 92 const t = b.addTest(.{ 93 .root_module = test_mod, 94 }); 95 test_step.dependOn(&b.addRunArtifact(t).step); 96 } 97}