Commit 4ebd0036fd

Jakub Konka <kubkon@jakubkonka.com>
2024-02-03 17:57:35
test/link/macho: add some smoke tests for self-hosted MachO
1 parent 7641561
Changed files (2)
test/link/link.zig
@@ -27,14 +27,23 @@ pub const Options = struct {
     optimize: std.builtin.OptimizeMode = .Debug,
     use_llvm: bool = true,
     use_lld: bool = false,
+    strip: ?bool = null,
 };
 
 pub fn addTestStep(b: *Build, prefix: []const u8, opts: Options) *Step {
     const target = opts.target.result.zigTriple(b.allocator) catch @panic("OOM");
     const optimize = @tagName(opts.optimize);
     const use_llvm = if (opts.use_llvm) "llvm" else "no-llvm";
-    const name = std.fmt.allocPrint(b.allocator, "test-{s}-{s}-{s}-{s}", .{
-        prefix, target, optimize, use_llvm,
+    const use_lld = if (opts.use_lld) "lld" else "no-lld";
+    if (opts.strip) |strip| {
+        const s = if (strip) "strip" else "no-strip";
+        const name = std.fmt.allocPrint(b.allocator, "test-{s}-{s}-{s}-{s}-{s}-{s}", .{
+            prefix, target, optimize, use_llvm, use_lld, s,
+        }) catch @panic("OOM");
+        return b.step(name, "");
+    }
+    const name = std.fmt.allocPrint(b.allocator, "test-{s}-{s}-{s}-{s}-{s}", .{
+        prefix, target, optimize, use_llvm, use_lld,
     }) catch @panic("OOM");
     return b.step(name, "");
 }
@@ -87,7 +96,7 @@ fn addCompileStep(
                 break :rsf b.addWriteFiles().add("a.zig", bytes);
             },
             .pic = overlay.pic,
-            .strip = overlay.strip,
+            .strip = if (base.strip) |s| s else overlay.strip,
         },
         .use_llvm = base.use_llvm,
         .use_lld = base.use_lld,
test/link/macho.zig
@@ -15,6 +15,11 @@ pub fn testAll(b: *Build, build_opts: BuildOptions) *Step {
         .os_tag = .macos,
     });
 
+    // Exercise linker with self-hosted backend (no LLVM)
+    macho_step.dependOn(testHelloZig(b, .{ .use_llvm = false, .target = x86_64_target }));
+    macho_step.dependOn(testRelocatableZig(b, .{ .use_llvm = false, .strip = true, .target = x86_64_target }));
+
+    // Exercise linker with LLVM backend
     macho_step.dependOn(testDeadStrip(b, .{ .target = default_target }));
     macho_step.dependOn(testEmptyObject(b, .{ .target = default_target }));
     macho_step.dependOn(testEmptyZig(b, .{ .target = default_target }));
@@ -1234,7 +1239,13 @@ fn testRelocatableZig(b: *Build, opts: Options) *Step {
     const run = addRunArtifact(exe);
     run.addCheck(.{ .expect_stderr_match = b.dupe("incrFoo=1") });
     run.addCheck(.{ .expect_stderr_match = b.dupe("decrFoo=0") });
-    run.addCheck(.{ .expect_stderr_match = b.dupe("panic: Oh no!") });
+    if (opts.use_llvm) {
+        // TODO: enable this once self-hosted can print panics and stack traces
+        run.addCheck(.{ .expect_stderr_match = b.dupe("panic: Oh no!") });
+        run.addCheck(.{ .expect_term = .{ .Signal = std.os.darwin.SIG.ABRT } });
+    } else {
+        run.addCheck(.{ .expect_term = .{ .Signal = std.os.darwin.SIG.TRAP } });
+    }
     test_step.dependOn(&run.step);
 
     return test_step;