const std = @import("std"); pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); const exe = b.addExecutable(.{ .name = "mry", .root_source_file = b.path("src/main.zig"), .target = target, .optimize = optimize, }); b.installArtifact(exe); const run_cmd = b.addRunArtifact(exe); run_cmd.step.dependOn(b.getInstallStep()); if (b.args) |args| { run_cmd.addArgs(args); } const run_step = b.step("run", "Run the app"); run_step.dependOn(&run_cmd.step); const install_docs = b.addInstallDirectory(.{ .source_dir = exe.getEmittedDocs(), .install_dir = .prefix, .install_subdir = "docs", }); const docs_step = b.step("docs", "Install docs into zig-out/docs"); docs_step.dependOn(&install_docs.step); const exe_unit_tests = b.addTest(.{ .root_source_file = b.path("src/main.zig"), .target = target, .optimize = optimize, }); const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests); const test_step = b.step("test", "Run unit tests"); test_step.dependOn(&run_exe_unit_tests.step); const plot_step = b.step("plot", "Plot Benchmark"); const run_plot = b.addSystemCommand(&.{ "sh", "-c", \\ [ ! -e "$1" ] && exit 1 \\ [ ! -e "$2" ] && exit 2 \\ mkdir -p zig-out/plots/ \\ \\ NAME=$(basename "$1") \\ CSV="zig-out/plots/$NAME.csv" \\ \\ if [ "$CSV" -ot "$0" -o "$(($(cat "$CSV" | wc -l) - 1))" -ne "$(cat "$CSV" | wc -l)" ]; then \\ "$0" benchmark "$1" -i "$2" --csv | tee "$CSV" \\ fi \\ \\ gnuplot -p -e " \\ set datafile separator ','; \\ set term x11 size 1000, 300; \\ set style line 100 lt 1 lc rgb 'grey' lw 0.5; \\ set grid ls 100; set multiplot layout 1,3; \\ plot '< sort -t , -g -k 2 $CSV' using 2:3 with lines title 'Duration' lw 3; \\ plot '< sort -t , -g -k 2 $CSV' using 2:5 with lines title 'Max Heap Size' lw 3; \\ plot '< sort -t , -g -k 2 $CSV' using 2:6 with lines title 'Number Of Nodes' lw 3; \\ unset multiplot;" }); run_plot.addArtifactArg(exe); if (b.args) |args| { run_plot.addArgs(args); } plot_step.dependOn(&run_plot.step); plot_step.dependOn(&exe.step); }