mirror of
https://github.com/ziglang/zig.git
synced 2025-12-17 03:33:06 +00:00
`runAndCompare` will already depend on the `CheckObject` step itself so it's not needed to also have the test step depend on the check object step.
34 lines
1005 B
Zig
34 lines
1005 B
Zig
const std = @import("std");
|
|
const Builder = std.build.Builder;
|
|
|
|
pub fn build(b: *Builder) void {
|
|
const mode = b.standardReleaseOptions();
|
|
|
|
const test_step = b.step("test", "Test");
|
|
test_step.dependOn(b.getInstallStep());
|
|
|
|
const exe = b.addExecutable("main", null);
|
|
exe.setTarget(.{ .os_tag = .macos });
|
|
exe.setBuildMode(mode);
|
|
exe.addCSourceFile("main.c", &.{});
|
|
exe.linkLibC();
|
|
exe.entry_symbol_name = "_non_main";
|
|
|
|
const check_exe = exe.checkObject(.macho);
|
|
|
|
check_exe.checkStart("segname __TEXT");
|
|
check_exe.checkNext("vmaddr {vmaddr}");
|
|
|
|
check_exe.checkStart("cmd MAIN");
|
|
check_exe.checkNext("entryoff {entryoff}");
|
|
|
|
check_exe.checkInSymtab();
|
|
check_exe.checkNext("{n_value} (__TEXT,__text) external _non_main");
|
|
|
|
check_exe.checkComputeCompare("vmaddr entryoff +", .{ .op = .eq, .value = .{ .variable = "n_value" } });
|
|
|
|
const run = check_exe.runAndCompare();
|
|
run.expectStdOutEqual("42");
|
|
test_step.dependOn(&run.step);
|
|
}
|