authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-08-17 10:46:42+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-08-17 23:13:49+02:00
log9b595dd55f1ae336e2fb4e2a64334efe137dc19a
tree0af43c90fdb34d9d775d78428d217a93e8a07b47
parentd84282174c449325b4bc43fed4d65289445399d4

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.

6 files changed, 47 insertions(+), 35 deletions(-)

test/link.zig+29-24
...@@ -23,7 +23,12 @@ pub fn addCases(cases: *tests.StandaloneContext) void {...@@ -23,7 +23,12 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
23 .build_modes = true,23 .build_modes = true,
24 });24 });
2525
26 cases.addBuildFile("test/link/wasm/type/build.zig", .{26 addWasmCases(cases);
27 addMachOCases(cases);
28}
29
30fn addWasmCases(cases: *tests.StandaloneContext) void {
31 cases.addBuildFile("test/link/wasm/bss/build.zig", .{
27 .build_modes = true,32 .build_modes = true,
28 .requires_stage2 = true,33 .requires_stage2 = true,
29 });34 });
...@@ -38,23 +43,13 @@ pub fn addCases(cases: *tests.StandaloneContext) void {...@@ -38,23 +43,13 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
38 .requires_stage2 = true,43 .requires_stage2 = true,
39 });44 });
4045
41 cases.addBuildFile("test/link/wasm/bss/build.zig", .{46 cases.addBuildFile("test/link/wasm/type/build.zig", .{
42 .build_modes = true,47 .build_modes = true,
43 .requires_stage2 = true,48 .requires_stage2 = true,
44 });49 });
50}
4551
46 cases.addBuildFile("test/link/macho/entry/build.zig", .{52fn addMachOCases(cases: *tests.StandaloneContext) void {
47 .build_modes = true,
48 });
49
50 cases.addBuildFile("test/link/macho/pagezero/build.zig", .{
51 .build_modes = false,
52 });
53
54 cases.addBuildFile("test/link/macho/dylib/build.zig", .{
55 .build_modes = true,
56 });
57
58 cases.addBuildFile("test/link/macho/dead_strip/build.zig", .{53 cases.addBuildFile("test/link/macho/dead_strip/build.zig", .{
59 .build_modes = false,54 .build_modes = false,
60 });55 });
...@@ -64,50 +59,60 @@ pub fn addCases(cases: *tests.StandaloneContext) void {...@@ -64,50 +59,60 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
64 .requires_macos_sdk = true,59 .requires_macos_sdk = true,
65 });60 });
6661
67 cases.addBuildFile("test/link/macho/needed_library/build.zig", .{62 cases.addBuildFile("test/link/macho/dylib/build.zig", .{
68 .build_modes = true,63 .build_modes = true,
69 });64 });
7065
71 cases.addBuildFile("test/link/macho/weak_library/build.zig", .{66 cases.addBuildFile("test/link/macho/entry/build.zig", .{
72 .build_modes = true,67 .build_modes = true,
73 });68 });
7469
75 cases.addBuildFile("test/link/macho/needed_framework/build.zig", .{70 cases.addBuildFile("test/link/macho/headerpad/build.zig", .{
76 .build_modes = true,71 .build_modes = true,
77 .requires_macos_sdk = true,72 .requires_macos_sdk = true,
78 });73 });
7974
80 cases.addBuildFile("test/link/macho/weak_framework/build.zig", .{75 cases.addBuildFile("test/link/macho/needed_framework/build.zig", .{
81 .build_modes = true,76 .build_modes = true,
82 .requires_macos_sdk = true,77 .requires_macos_sdk = true,
83 });78 });
8479
85 // Try to build and run an Objective-C executable.80 cases.addBuildFile("test/link/macho/needed_library/build.zig", .{
81 .build_modes = true,
82 });
83
86 cases.addBuildFile("test/link/macho/objc/build.zig", .{84 cases.addBuildFile("test/link/macho/objc/build.zig", .{
87 .build_modes = true,85 .build_modes = true,
88 .requires_macos_sdk = true,86 .requires_macos_sdk = true,
89 });87 });
9088
91 // Try to build and run an Objective-C++ executable.
92 cases.addBuildFile("test/link/macho/objcpp/build.zig", .{89 cases.addBuildFile("test/link/macho/objcpp/build.zig", .{
93 .build_modes = true,90 .build_modes = true,
94 .requires_macos_sdk = true,91 .requires_macos_sdk = true,
95 });92 });
9693
97 cases.addBuildFile("test/link/macho/stack_size/build.zig", .{94 cases.addBuildFile("test/link/macho/pagezero/build.zig", .{
98 .build_modes = true,95 .build_modes = false,
99 });96 });
10097
101 cases.addBuildFile("test/link/macho/search_strategy/build.zig", .{98 cases.addBuildFile("test/link/macho/search_strategy/build.zig", .{
102 .build_modes = true,99 .build_modes = true,
103 });100 });
104101
105 cases.addBuildFile("test/link/macho/headerpad/build.zig", .{102 cases.addBuildFile("test/link/macho/stack_size/build.zig", .{
106 .build_modes = true,103 .build_modes = true,
107 .requires_macos_sdk = true,
108 });104 });
109105
110 cases.addBuildFile("test/link/macho/tls/build.zig", .{106 cases.addBuildFile("test/link/macho/tls/build.zig", .{
111 .build_modes = true,107 .build_modes = true,
112 });108 });
109
110 cases.addBuildFile("test/link/macho/weak_library/build.zig", .{
111 .build_modes = true,
112 });
113
114 cases.addBuildFile("test/link/macho/weak_framework/build.zig", .{
115 .build_modes = true,
116 .requires_macos_sdk = true,
117 });
113}118}
test/link/macho/dead_strip/build.zig+5-3
...@@ -4,13 +4,14 @@ const LibExeObjectStep = std.build.LibExeObjStep;...@@ -4,13 +4,14 @@ const LibExeObjectStep = std.build.LibExeObjStep;
44
5pub fn build(b: *Builder) void {5pub fn build(b: *Builder) void {
6 const mode = b.standardReleaseOptions();6 const mode = b.standardReleaseOptions();
7 const target: std.zig.CrossTarget = .{ .os_tag = .macos };
78
8 const test_step = b.step("test", "Test the program");9 const test_step = b.step("test", "Test the program");
9 test_step.dependOn(b.getInstallStep());10 test_step.dependOn(b.getInstallStep());
1011
11 {12 {
12 // Without -dead_strip, we expect `iAmUnused` symbol present13 // Without -dead_strip, we expect `iAmUnused` symbol present
13 const exe = createScenario(b, mode);14 const exe = createScenario(b, mode, target);
1415
15 const check = exe.checkObject(.macho);16 const check = exe.checkObject(.macho);
16 check.checkInSymtab();17 check.checkInSymtab();
...@@ -23,7 +24,7 @@ pub fn build(b: *Builder) void {...@@ -23,7 +24,7 @@ pub fn build(b: *Builder) void {
2324
24 {25 {
25 // With -dead_strip, no `iAmUnused` symbol should be present26 // With -dead_strip, no `iAmUnused` symbol should be present
26 const exe = createScenario(b, mode);27 const exe = createScenario(b, mode, target);
27 exe.link_gc_sections = true;28 exe.link_gc_sections = true;
2829
29 const check = exe.checkObject(.macho);30 const check = exe.checkObject(.macho);
...@@ -36,10 +37,11 @@ pub fn build(b: *Builder) void {...@@ -36,10 +37,11 @@ pub fn build(b: *Builder) void {
36 }37 }
37}38}
3839
39fn createScenario(b: *Builder, mode: std.builtin.Mode) *LibExeObjectStep {40fn createScenario(b: *Builder, mode: std.builtin.Mode, target: std.zig.CrossTarget) *LibExeObjectStep {
40 const exe = b.addExecutable("test", null);41 const exe = b.addExecutable("test", null);
41 exe.addCSourceFile("main.c", &[0][]const u8{});42 exe.addCSourceFile("main.c", &[0][]const u8{});
42 exe.setBuildMode(mode);43 exe.setBuildMode(mode);
44 exe.setTarget(target);
43 exe.linkLibC();45 exe.linkLibC();
44 return exe;46 return exe;
45}47}
test/link/macho/pagezero/build.zig+3-2
...@@ -3,13 +3,14 @@ const Builder = std.build.Builder;...@@ -3,13 +3,14 @@ const Builder = std.build.Builder;
33
4pub fn build(b: *Builder) void {4pub fn build(b: *Builder) void {
5 const mode = b.standardReleaseOptions();5 const mode = b.standardReleaseOptions();
6 const target: std.zig.CrossTarget = .{ .os_tag = .macos };
67
7 const test_step = b.step("test", "Test");8 const test_step = b.step("test", "Test");
8 test_step.dependOn(b.getInstallStep());9 test_step.dependOn(b.getInstallStep());
910
10 {11 {
11 const exe = b.addExecutable("pagezero", null);12 const exe = b.addExecutable("pagezero", null);
12 exe.setTarget(.{ .os_tag = .macos });13 exe.setTarget(target);
13 exe.setBuildMode(mode);14 exe.setBuildMode(mode);
14 exe.addCSourceFile("main.c", &.{});15 exe.addCSourceFile("main.c", &.{});
15 exe.linkLibC();16 exe.linkLibC();
...@@ -29,7 +30,7 @@ pub fn build(b: *Builder) void {...@@ -29,7 +30,7 @@ pub fn build(b: *Builder) void {
2930
30 {31 {
31 const exe = b.addExecutable("no_pagezero", null);32 const exe = b.addExecutable("no_pagezero", null);
32 exe.setTarget(.{ .os_tag = .macos });33 exe.setTarget(target);
33 exe.setBuildMode(mode);34 exe.setBuildMode(mode);
34 exe.addCSourceFile("main.c", &.{});35 exe.addCSourceFile("main.c", &.{});
35 exe.linkLibC();36 exe.linkLibC();
test/link/macho/search_strategy/build.zig+4-4
...@@ -1,17 +1,17 @@...@@ -1,17 +1,17 @@
1const std = @import("std");1const std = @import("std");
2const Builder = std.build.Builder;2const Builder = std.build.Builder;
3const LibExeObjectStep = std.build.LibExeObjStep;3const LibExeObjectStep = std.build.LibExeObjStep;
4const target: std.zig.CrossTarget = .{ .os_tag = .macos };
54
6pub fn build(b: *Builder) void {5pub fn build(b: *Builder) void {
7 const mode = b.standardReleaseOptions();6 const mode = b.standardReleaseOptions();
7 const target: std.zig.CrossTarget = .{ .os_tag = .macos };
88
9 const test_step = b.step("test", "Test");9 const test_step = b.step("test", "Test");
10 test_step.dependOn(b.getInstallStep());10 test_step.dependOn(b.getInstallStep());
1111
12 {12 {
13 // -search_dylibs_first13 // -search_dylibs_first
14 const exe = createScenario(b, mode);14 const exe = createScenario(b, mode, target);
15 exe.search_strategy = .dylibs_first;15 exe.search_strategy = .dylibs_first;
1616
17 const check = exe.checkObject(.macho);17 const check = exe.checkObject(.macho);
...@@ -26,7 +26,7 @@ pub fn build(b: *Builder) void {...@@ -26,7 +26,7 @@ pub fn build(b: *Builder) void {
2626
27 {27 {
28 // -search_paths_first28 // -search_paths_first
29 const exe = createScenario(b, mode);29 const exe = createScenario(b, mode, target);
30 exe.search_strategy = .paths_first;30 exe.search_strategy = .paths_first;
3131
32 const run = std.build.EmulatableRunStep.create(b, "run", exe);32 const run = std.build.EmulatableRunStep.create(b, "run", exe);
...@@ -36,7 +36,7 @@ pub fn build(b: *Builder) void {...@@ -36,7 +36,7 @@ pub fn build(b: *Builder) void {
36 }36 }
37}37}
3838
39fn createScenario(b: *Builder, mode: std.builtin.Mode) *LibExeObjectStep {39fn createScenario(b: *Builder, mode: std.builtin.Mode, target: std.zig.CrossTarget) *LibExeObjectStep {
40 const static = b.addStaticLibrary("a", null);40 const static = b.addStaticLibrary("a", null);
41 static.setTarget(target);41 static.setTarget(target);
42 static.setBuildMode(mode);42 static.setBuildMode(mode);
test/link/macho/stack_size/build.zig+2-1
...@@ -3,12 +3,13 @@ const Builder = std.build.Builder;...@@ -3,12 +3,13 @@ const Builder = std.build.Builder;
33
4pub fn build(b: *Builder) void {4pub fn build(b: *Builder) void {
5 const mode = b.standardReleaseOptions();5 const mode = b.standardReleaseOptions();
6 const target: std.zig.CrossTarget = .{ .os_tag = .macos };
67
7 const test_step = b.step("test", "Test");8 const test_step = b.step("test", "Test");
8 test_step.dependOn(b.getInstallStep());9 test_step.dependOn(b.getInstallStep());
910
10 const exe = b.addExecutable("main", null);11 const exe = b.addExecutable("main", null);
11 exe.setTarget(.{ .os_tag = .macos });12 exe.setTarget(target);
12 exe.setBuildMode(mode);13 exe.setBuildMode(mode);
13 exe.addCSourceFile("main.c", &.{});14 exe.addCSourceFile("main.c", &.{});
14 exe.linkLibC();15 exe.linkLibC();
test/link/macho/tls/build.zig+4-1
...@@ -1,4 +1,5 @@...@@ -1,4 +1,5 @@
1const Builder = @import("std").build.Builder;1const std = @import("std");
2const Builder = std.build.Builder;
23
3pub fn build(b: *Builder) void {4pub fn build(b: *Builder) void {
4 const mode = b.standardReleaseOptions();5 const mode = b.standardReleaseOptions();
...@@ -6,11 +7,13 @@ pub fn build(b: *Builder) void {...@@ -6,11 +7,13 @@ pub fn build(b: *Builder) void {
67
7 const lib = b.addSharedLibrary("a", null, b.version(1, 0, 0));8 const lib = b.addSharedLibrary("a", null, b.version(1, 0, 0));
8 lib.setBuildMode(mode);9 lib.setBuildMode(mode);
10 lib.setTarget(target);
9 lib.addCSourceFile("a.c", &.{});11 lib.addCSourceFile("a.c", &.{});
10 lib.linkLibC();12 lib.linkLibC();
1113
12 const test_exe = b.addTest("main.zig");14 const test_exe = b.addTest("main.zig");
13 test_exe.setBuildMode(mode);15 test_exe.setBuildMode(mode);
16 test_exe.setTarget(target);
14 test_exe.linkLibrary(lib);17 test_exe.linkLibrary(lib);
15 test_exe.linkLibC();18 test_exe.linkLibC();
1619