aboutsummaryrefslogtreecommitdiff
path: root/build.zig
diff options
context:
space:
mode:
Diffstat (limited to 'build.zig')
-rw-r--r--build.zig79
1 files changed, 48 insertions, 31 deletions
diff --git a/build.zig b/build.zig
index 3ac3e80..00ea514 100644
--- a/build.zig
+++ b/build.zig
@@ -1,45 +1,32 @@
const std = @import("std");
-pub fn build(b: *std.build.Builder) void {
- // Standard target options allows the person running `zig build` to choose
- // what target to build for. Here we do not override the defaults, which
- // means any target is allowed, and the default is native. Other options
- // for restricting supported target set are available.
+pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
+ const optimize = b.standardOptimizeOption(.{});
- // Standard release options allow the person running `zig build` to select
- // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
- const mode = b.standardReleaseOptions();
-
- const exe = b.addExecutable("zigfunge98", "src/main.zig");
- exe.setTarget(target);
- exe.setBuildMode(mode);
- exe.install();
-
- const run_cmd = exe.run();
+ const exe = b.addExecutable(.{
+ .name = "zigfunge98",
+ .root_source_file = .{ .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 tui = b.addExecutable("zigfunge98-tui", "src/tui.zig");
- tui.addPackagePath("spoon", "lib/spoon/import.zig");
- tui.setTarget(target);
- tui.setBuildMode(mode);
- tui.install();
-
- const coverage = b.option(bool, "test-coverage", "Generate test coverage") orelse false;
-
const run_step = b.step("run", "Run the app");
run_step.dependOn(&run_cmd.step);
+ const unit_tests = b.addTest(.{
+ .root_source_file = .{ .path = "src/main.zig" },
+ .target = target,
+ .optimize = optimize,
+ });
- const exe_tests = b.addTest("src/main.zig");
- exe_tests.setTarget(target);
- exe_tests.setBuildMode(mode);
-
+ const coverage = b.option(bool, "test-coverage", "Generate test coverage") orelse false;
// Code coverage with kcov, we need an allocator for the setup
var general_purpose_allocator = std.heap.GeneralPurposeAllocator(.{}){};
- defer _ = general_purpose_allocator.deinit();
const gpa = general_purpose_allocator.allocator();
// We want to exclude the $HOME/.zig path
const home = std.process.getEnvVarOwned(gpa, "HOME") catch "";
@@ -47,7 +34,8 @@ pub fn build(b: *std.build.Builder) void {
const exclude = std.fmt.allocPrint(gpa, "--exclude-path={s}/.zig/", .{home}) catch "";
defer gpa.free(exclude);
if (coverage) {
- exe_tests.setExecCmd(&[_]?[]const u8{
+ unit_tests.test_runner = "/usr/bin/kcov";
+ unit_tests.setExecCmd(&[_]?[]const u8{
"kcov",
exclude,
//"--path-strip-level=3", // any kcov flags can be specified here
@@ -56,6 +44,35 @@ pub fn build(b: *std.build.Builder) void {
});
}
+ const run_unit_tests = b.addRunArtifact(unit_tests);
const test_step = b.step("test", "Run unit tests");
- test_step.dependOn(&exe_tests.step);
+ test_step.dependOn(&run_unit_tests.step);
+
+ // ----- TUI --------------------------------------------------------------
+ const tui = b.addExecutable(.{
+ .name = "zigfunge98-tui",
+ .root_source_file = .{ .path = "src/tui.zig" },
+ .target = target,
+ .optimize = optimize,
+ });
+ const spoon = b.createModule(.{
+ .source_file = .{ .path = "lib/spoon/import.zig" },
+ });
+ tui.addModule("spoon", spoon);
+ b.installArtifact(tui);
+ const tui_cmd = b.addRunArtifact(tui);
+ tui_cmd.step.dependOn(b.getInstallStep());
+ if (b.args) |args| {
+ tui_cmd.addArgs(args);
+ }
+ const tui_step = b.step("run-tui", "Run the app");
+ tui_step.dependOn(&tui_cmd.step);
+ const tui_unit_tests = b.addTest(.{
+ .root_source_file = .{ .path = "src/tui.zig" },
+ .target = target,
+ .optimize = optimize,
+ });
+ const tui_run_unit_tests = b.addRunArtifact(tui_unit_tests);
+ const tui_test_step = b.step("test-tui", "Run tui unit tests");
+ tui_test_step.dependOn(&tui_run_unit_tests.step);
}