Commit 9b595dd55f

Jakub Konka <kubkon@jakubkonka.com>
2022-08-17 10:46:42
link-test: refactor and reorg
Move common tests by target file format (Wasm, MachO) into helper functions in `link.zig`, and sort alphabetically within for easier tracking versus file organization on disk.
1 parent d842821
Changed files (6)
test
link
macho
dead_strip
pagezero
search_strategy
stack_size
tls
test/link/macho/dead_strip/build.zig
@@ -4,13 +4,14 @@ const LibExeObjectStep = std.build.LibExeObjStep;
 
 pub fn build(b: *Builder) void {
     const mode = b.standardReleaseOptions();
+    const target: std.zig.CrossTarget = .{ .os_tag = .macos };
 
     const test_step = b.step("test", "Test the program");
     test_step.dependOn(b.getInstallStep());
 
     {
         // Without -dead_strip, we expect `iAmUnused` symbol present
-        const exe = createScenario(b, mode);
+        const exe = createScenario(b, mode, target);
 
         const check = exe.checkObject(.macho);
         check.checkInSymtab();
@@ -23,7 +24,7 @@ pub fn build(b: *Builder) void {
 
     {
         // With -dead_strip, no `iAmUnused` symbol should be present
-        const exe = createScenario(b, mode);
+        const exe = createScenario(b, mode, target);
         exe.link_gc_sections = true;
 
         const check = exe.checkObject(.macho);
@@ -36,10 +37,11 @@ pub fn build(b: *Builder) void {
     }
 }
 
-fn createScenario(b: *Builder, mode: std.builtin.Mode) *LibExeObjectStep {
+fn createScenario(b: *Builder, mode: std.builtin.Mode, target: std.zig.CrossTarget) *LibExeObjectStep {
     const exe = b.addExecutable("test", null);
     exe.addCSourceFile("main.c", &[0][]const u8{});
     exe.setBuildMode(mode);
+    exe.setTarget(target);
     exe.linkLibC();
     return exe;
 }
test/link/macho/pagezero/build.zig
@@ -3,13 +3,14 @@ const Builder = std.build.Builder;
 
 pub fn build(b: *Builder) void {
     const mode = b.standardReleaseOptions();
+    const target: std.zig.CrossTarget = .{ .os_tag = .macos };
 
     const test_step = b.step("test", "Test");
     test_step.dependOn(b.getInstallStep());
 
     {
         const exe = b.addExecutable("pagezero", null);
-        exe.setTarget(.{ .os_tag = .macos });
+        exe.setTarget(target);
         exe.setBuildMode(mode);
         exe.addCSourceFile("main.c", &.{});
         exe.linkLibC();
@@ -29,7 +30,7 @@ pub fn build(b: *Builder) void {
 
     {
         const exe = b.addExecutable("no_pagezero", null);
-        exe.setTarget(.{ .os_tag = .macos });
+        exe.setTarget(target);
         exe.setBuildMode(mode);
         exe.addCSourceFile("main.c", &.{});
         exe.linkLibC();
test/link/macho/search_strategy/build.zig
@@ -1,17 +1,17 @@
 const std = @import("std");
 const Builder = std.build.Builder;
 const LibExeObjectStep = std.build.LibExeObjStep;
-const target: std.zig.CrossTarget = .{ .os_tag = .macos };
 
 pub fn build(b: *Builder) void {
     const mode = b.standardReleaseOptions();
+    const target: std.zig.CrossTarget = .{ .os_tag = .macos };
 
     const test_step = b.step("test", "Test");
     test_step.dependOn(b.getInstallStep());
 
     {
         // -search_dylibs_first
-        const exe = createScenario(b, mode);
+        const exe = createScenario(b, mode, target);
         exe.search_strategy = .dylibs_first;
 
         const check = exe.checkObject(.macho);
@@ -26,7 +26,7 @@ pub fn build(b: *Builder) void {
 
     {
         // -search_paths_first
-        const exe = createScenario(b, mode);
+        const exe = createScenario(b, mode, target);
         exe.search_strategy = .paths_first;
 
         const run = std.build.EmulatableRunStep.create(b, "run", exe);
@@ -36,7 +36,7 @@ pub fn build(b: *Builder) void {
     }
 }
 
-fn createScenario(b: *Builder, mode: std.builtin.Mode) *LibExeObjectStep {
+fn createScenario(b: *Builder, mode: std.builtin.Mode, target: std.zig.CrossTarget) *LibExeObjectStep {
     const static = b.addStaticLibrary("a", null);
     static.setTarget(target);
     static.setBuildMode(mode);
test/link/macho/stack_size/build.zig
@@ -3,12 +3,13 @@ const Builder = std.build.Builder;
 
 pub fn build(b: *Builder) void {
     const mode = b.standardReleaseOptions();
+    const target: std.zig.CrossTarget = .{ .os_tag = .macos };
 
     const test_step = b.step("test", "Test");
     test_step.dependOn(b.getInstallStep());
 
     const exe = b.addExecutable("main", null);
-    exe.setTarget(.{ .os_tag = .macos });
+    exe.setTarget(target);
     exe.setBuildMode(mode);
     exe.addCSourceFile("main.c", &.{});
     exe.linkLibC();
test/link/macho/tls/build.zig
@@ -1,4 +1,5 @@
-const Builder = @import("std").build.Builder;
+const std = @import("std");
+const Builder = std.build.Builder;
 
 pub fn build(b: *Builder) void {
     const mode = b.standardReleaseOptions();
@@ -6,11 +7,13 @@ pub fn build(b: *Builder) void {
 
     const lib = b.addSharedLibrary("a", null, b.version(1, 0, 0));
     lib.setBuildMode(mode);
+    lib.setTarget(target);
     lib.addCSourceFile("a.c", &.{});
     lib.linkLibC();
 
     const test_exe = b.addTest("main.zig");
     test_exe.setBuildMode(mode);
+    test_exe.setTarget(target);
     test_exe.linkLibrary(lib);
     test_exe.linkLibC();
 
test/link.zig
@@ -23,7 +23,12 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
         .build_modes = true,
     });
 
-    cases.addBuildFile("test/link/wasm/type/build.zig", .{
+    addWasmCases(cases);
+    addMachOCases(cases);
+}
+
+fn addWasmCases(cases: *tests.StandaloneContext) void {
+    cases.addBuildFile("test/link/wasm/bss/build.zig", .{
         .build_modes = true,
         .requires_stage2 = true,
     });
@@ -38,23 +43,13 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
         .requires_stage2 = true,
     });
 
-    cases.addBuildFile("test/link/wasm/bss/build.zig", .{
+    cases.addBuildFile("test/link/wasm/type/build.zig", .{
         .build_modes = true,
         .requires_stage2 = true,
     });
+}
 
-    cases.addBuildFile("test/link/macho/entry/build.zig", .{
-        .build_modes = true,
-    });
-
-    cases.addBuildFile("test/link/macho/pagezero/build.zig", .{
-        .build_modes = false,
-    });
-
-    cases.addBuildFile("test/link/macho/dylib/build.zig", .{
-        .build_modes = true,
-    });
-
+fn addMachOCases(cases: *tests.StandaloneContext) void {
     cases.addBuildFile("test/link/macho/dead_strip/build.zig", .{
         .build_modes = false,
     });
@@ -64,50 +59,60 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
         .requires_macos_sdk = true,
     });
 
-    cases.addBuildFile("test/link/macho/needed_library/build.zig", .{
+    cases.addBuildFile("test/link/macho/dylib/build.zig", .{
         .build_modes = true,
     });
 
-    cases.addBuildFile("test/link/macho/weak_library/build.zig", .{
+    cases.addBuildFile("test/link/macho/entry/build.zig", .{
         .build_modes = true,
     });
 
-    cases.addBuildFile("test/link/macho/needed_framework/build.zig", .{
+    cases.addBuildFile("test/link/macho/headerpad/build.zig", .{
         .build_modes = true,
         .requires_macos_sdk = true,
     });
 
-    cases.addBuildFile("test/link/macho/weak_framework/build.zig", .{
+    cases.addBuildFile("test/link/macho/needed_framework/build.zig", .{
         .build_modes = true,
         .requires_macos_sdk = true,
     });
 
-    // Try to build and run an Objective-C executable.
+    cases.addBuildFile("test/link/macho/needed_library/build.zig", .{
+        .build_modes = true,
+    });
+
     cases.addBuildFile("test/link/macho/objc/build.zig", .{
         .build_modes = true,
         .requires_macos_sdk = true,
     });
 
-    // Try to build and run an Objective-C++ executable.
     cases.addBuildFile("test/link/macho/objcpp/build.zig", .{
         .build_modes = true,
         .requires_macos_sdk = true,
     });
 
-    cases.addBuildFile("test/link/macho/stack_size/build.zig", .{
-        .build_modes = true,
+    cases.addBuildFile("test/link/macho/pagezero/build.zig", .{
+        .build_modes = false,
     });
 
     cases.addBuildFile("test/link/macho/search_strategy/build.zig", .{
         .build_modes = true,
     });
 
-    cases.addBuildFile("test/link/macho/headerpad/build.zig", .{
+    cases.addBuildFile("test/link/macho/stack_size/build.zig", .{
         .build_modes = true,
-        .requires_macos_sdk = true,
     });
 
     cases.addBuildFile("test/link/macho/tls/build.zig", .{
         .build_modes = true,
     });
+
+    cases.addBuildFile("test/link/macho/weak_library/build.zig", .{
+        .build_modes = true,
+    });
+
+    cases.addBuildFile("test/link/macho/weak_framework/build.zig", .{
+        .build_modes = true,
+        .requires_macos_sdk = true,
+    });
 }