Files

231 lines
8.7 KiB
Zig

const std = @import("std");
pub const ModuleOptions = struct {
target: std.Build.ResolvedTarget,
optimize: std.builtin.OptimizeMode,
};
pub fn addZigmulatorModule(b: *std.Build, options: ModuleOptions) *std.Build.Module {
return b.addModule("zigmulator", .{
.root_source_file = b.path("src/simulator.zig"),
.target = options.target,
.optimize = options.optimize,
});
}
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
const zigmulator = addZigmulatorModule(b, .{
.target = target,
.optimize = optimize,
});
const examples_step = b.step("examples", "Build all examples");
const exe = b.addExecutable(.{
.name = "example",
.root_module = b.createModule(.{
.root_source_file = b.path("examples/example.zig"),
.target = target,
.optimize = optimize,
}),
});
exe.root_module.addImport("zigmulator", zigmulator);
const install_exe = b.addInstallArtifact(exe, .{});
examples_step.dependOn(&install_exe.step);
const run_cmd = b.addRunArtifact(exe);
if (b.args) |args| {
run_cmd.addArgs(args);
}
const run_step = b.step("run", "Run the example");
run_step.dependOn(&run_cmd.step);
const open_file_exe = b.addExecutable(.{
.name = "open_file",
.root_module = b.createModule(.{
.root_source_file = b.path("examples/open_file.zig"),
.target = target,
.optimize = optimize,
}),
});
open_file_exe.root_module.addImport("zigmulator", zigmulator);
const install_open_file_exe = b.addInstallArtifact(open_file_exe, .{});
examples_step.dependOn(&install_open_file_exe.step);
const read_file_exe = b.addExecutable(.{
.name = "read_file",
.root_module = b.createModule(.{
.root_source_file = b.path("examples/read_file.zig"),
.target = target,
.optimize = optimize,
}),
});
read_file_exe.root_module.addImport("zigmulator", zigmulator);
const install_read_file_exe = b.addInstallArtifact(read_file_exe, .{});
examples_step.dependOn(&install_read_file_exe.step);
const directories_exe = b.addExecutable(.{
.name = "directories",
.root_module = b.createModule(.{
.root_source_file = b.path("examples/directories.zig"),
.target = target,
.optimize = optimize,
}),
});
directories_exe.root_module.addImport("zigmulator", zigmulator);
const install_directories_exe = b.addInstallArtifact(directories_exe, .{});
examples_step.dependOn(&install_directories_exe.step);
const delete_file_exe = b.addExecutable(.{
.name = "delete_file",
.root_module = b.createModule(.{
.root_source_file = b.path("examples/delete_file.zig"),
.target = target,
.optimize = optimize,
}),
});
delete_file_exe.root_module.addImport("zigmulator", zigmulator);
const install_delete_file_exe = b.addInstallArtifact(delete_file_exe, .{});
examples_step.dependOn(&install_delete_file_exe.step);
const delete_dir_exe = b.addExecutable(.{
.name = "delete_dir",
.root_module = b.createModule(.{
.root_source_file = b.path("examples/delete_dir.zig"),
.target = target,
.optimize = optimize,
}),
});
delete_dir_exe.root_module.addImport("zigmulator", zigmulator);
const install_delete_dir_exe = b.addInstallArtifact(delete_dir_exe, .{});
examples_step.dependOn(&install_delete_dir_exe.step);
const list_dir_exe = b.addExecutable(.{
.name = "list_dir",
.root_module = b.createModule(.{
.root_source_file = b.path("examples/list_dir.zig"),
.target = target,
.optimize = optimize,
}),
});
list_dir_exe.root_module.addImport("zigmulator", zigmulator);
const install_list_dir_exe = b.addInstallArtifact(list_dir_exe, .{});
examples_step.dependOn(&install_list_dir_exe.step);
const sleep_exe = b.addExecutable(.{
.name = "sleep",
.root_module = b.createModule(.{
.root_source_file = b.path("examples/sleep.zig"),
.target = target,
.optimize = optimize,
}),
});
sleep_exe.root_module.addImport("zigmulator", zigmulator);
const install_sleep_exe = b.addInstallArtifact(sleep_exe, .{});
examples_step.dependOn(&install_sleep_exe.step);
const crash_recovery_exe = b.addExecutable(.{
.name = "crash_recovery",
.root_module = b.createModule(.{
.root_source_file = b.path("examples/crash_recovery.zig"),
.target = target,
.optimize = optimize,
}),
});
crash_recovery_exe.root_module.addImport("zigmulator", zigmulator);
const install_crash_recovery_exe = b.addInstallArtifact(crash_recovery_exe, .{});
examples_step.dependOn(&install_crash_recovery_exe.step);
const run_crash_recovery_cmd = b.addRunArtifact(crash_recovery_exe);
const crash_recovery_step = b.step("crash_recovery", "Run the crash/restart recovery example");
crash_recovery_step.dependOn(&run_crash_recovery_cmd.step);
const select_group_async_exe = b.addExecutable(.{
.name = "select_group_async",
.root_module = b.createModule(.{
.root_source_file = b.path("examples/select_group_async.zig"),
.target = target,
.optimize = optimize,
}),
});
select_group_async_exe.root_module.addImport("zigmulator", zigmulator);
const install_select_group_async_exe = b.addInstallArtifact(select_group_async_exe, .{});
examples_step.dependOn(&install_select_group_async_exe.step);
const tcp_ping_pong_exe = b.addExecutable(.{
.name = "tcp_ping_pong",
.root_module = b.createModule(.{
.root_source_file = b.path("examples/tcp_ping_pong.zig"),
.target = target,
.optimize = optimize,
}),
});
tcp_ping_pong_exe.root_module.addImport("zigmulator", zigmulator);
const install_tcp_ping_pong_exe = b.addInstallArtifact(tcp_ping_pong_exe, .{});
examples_step.dependOn(&install_tcp_ping_pong_exe.step);
const run_tcp_ping_pong_cmd = b.addRunArtifact(tcp_ping_pong_exe);
const tcp_ping_pong_step = b.step("tcp_ping_pong", "Run the TCP ping-pong example");
tcp_ping_pong_step.dependOn(&run_tcp_ping_pong_cmd.step);
const fault_coverage_exe = b.addExecutable(.{
.name = "fault_coverage",
.root_module = b.createModule(.{
.root_source_file = b.path("examples/fault_coverage.zig"),
.target = target,
.optimize = optimize,
}),
});
fault_coverage_exe.root_module.addImport("zigmulator", zigmulator);
const install_fault_coverage_exe = b.addInstallArtifact(fault_coverage_exe, .{});
examples_step.dependOn(&install_fault_coverage_exe.step);
const run_fault_coverage_cmd = b.addRunArtifact(fault_coverage_exe);
if (b.args) |args| {
run_fault_coverage_cmd.addArgs(args);
}
const fault_coverage_step = b.step("fault_coverage", "Run the fault coverage probe example");
fault_coverage_step.dependOn(&run_fault_coverage_cmd.step);
const diagram_step = b.step("diagram", "Build the diagram generator");
const diagram_exe = b.addExecutable(.{
.name = "diagram",
.root_module = b.createModule(.{
.root_source_file = b.path("diagram/main.zig"),
.target = target,
.optimize = optimize,
}),
});
const install_diagram_exe = b.addInstallArtifact(diagram_exe, .{});
diagram_step.dependOn(&install_diagram_exe.step);
const run_timeline_html_cmd = b.addRunArtifact(diagram_exe);
run_timeline_html_cmd.addArg("timeline_html");
if (b.args) |args| {
run_timeline_html_cmd.addArgs(args);
}
const run_timeline_html_step = b.step("timeline_html", "Generate a timeline diagram as HTML");
run_timeline_html_step.dependOn(&run_timeline_html_cmd.step);
const run_timeline_ascii_cmd = b.addRunArtifact(diagram_exe);
run_timeline_ascii_cmd.addArg("timeline_ascii");
if (b.args) |args| {
run_timeline_ascii_cmd.addArgs(args);
}
const run_timeline_ascii_step = b.step("timeline_ascii", "Generate a timeline diagram as ASCII");
run_timeline_ascii_step.dependOn(&run_timeline_ascii_cmd.step);
const run_strace_cmd = b.addRunArtifact(diagram_exe);
run_strace_cmd.addArg("strace");
if (b.args) |args| {
run_strace_cmd.addArgs(args);
}
const run_strace_step = b.step("strace", "Generate a trace of all I/O calls");
run_strace_step.dependOn(&run_strace_cmd.step);
}