authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-03-07 00:40:55-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-03-15 10:48:14-07:00
loge122cd6312606068eb14987ed4d7527341484d26
tree85562b0e306edd136ad8c8a46507d2b2d3890cc0
parent3b069907305497af5ef6cdb1d6adddd05636aa51

new linker test harness

It's simpler and it takes advantage of `std.Build.addAnonymousDependency`, which has a number of benefits, including concurrenc and preventing extra zig-cache and zig-out directories being created. 4 tests are ported over as an example.

9 files changed, 287 insertions(+), 279 deletions(-)

build.zig+1-8
...@@ -442,8 +442,6 @@ pub fn build(b: *std.Build) !void {...@@ -442,8 +442,6 @@ pub fn build(b: *std.Build) !void {
442 .skip_stage2 = true, // TODO get all these passing442 .skip_stage2 = true, // TODO get all these passing
443 }));443 }));
444444
445 _ = enable_symlinks_windows;
446 _ = enable_macos_sdk;
447 test_step.dependOn(tests.addCompareOutputTests(b, test_filter, optimization_modes));445 test_step.dependOn(tests.addCompareOutputTests(b, test_filter, optimization_modes));
448 //test_step.dependOn(tests.addStandaloneTests(446 //test_step.dependOn(tests.addStandaloneTests(
449 // b,447 // b,
...@@ -453,15 +451,10 @@ pub fn build(b: *std.Build) !void {...@@ -453,15 +451,10 @@ pub fn build(b: *std.Build) !void {
453 // enable_macos_sdk,451 // enable_macos_sdk,
454 // target,452 // target,
455 // skip_stage2_tests,453 // skip_stage2_tests,
456 // b.enable_darling,
457 // b.enable_qemu,
458 // b.enable_rosetta,
459 // b.enable_wasmtime,
460 // b.enable_wine,
461 // enable_symlinks_windows,454 // enable_symlinks_windows,
462 //));455 //));
463 test_step.dependOn(tests.addCAbiTests(b, skip_non_native, skip_release));456 test_step.dependOn(tests.addCAbiTests(b, skip_non_native, skip_release));
464 //test_step.dependOn(tests.addLinkTests(b, test_filter, optimization_modes, enable_macos_sdk, skip_stage2_tests, enable_symlinks_windows));457 test_step.dependOn(tests.addLinkTests(b, test_filter, optimization_modes, enable_macos_sdk, skip_stage2_tests, enable_symlinks_windows));
465 test_step.dependOn(tests.addStackTraceTests(b, test_filter, optimization_modes));458 test_step.dependOn(tests.addStackTraceTests(b, test_filter, optimization_modes));
466 test_step.dependOn(tests.addCliTests(b, test_filter, optimization_modes));459 test_step.dependOn(tests.addCliTests(b, test_filter, optimization_modes));
467 test_step.dependOn(tests.addAssembleAndLinkTests(b, test_filter, optimization_modes));460 test_step.dependOn(tests.addAssembleAndLinkTests(b, test_filter, optimization_modes));
test/link.zig+218-211
...@@ -1,213 +1,220 @@...@@ -1,213 +1,220 @@
1pub const Case = struct {
2 build_root: []const u8,
3 import: type,
4};
5
6pub const cases = [_]Case{
7 .{
8 .build_root = "test/link/bss",
9 .import = @import("link/bss/build.zig"),
10 },
11 .{
12 .build_root = "test/link/common_symbols",
13 .import = @import("link/common_symbols/build.zig"),
14 },
15 .{
16 .build_root = "test/link/common_symbols_alignment",
17 .import = @import("link/common_symbols_alignment/build.zig"),
18 },
19 .{
20 .build_root = "test/link/interdependent_static_c_libs",
21 .import = @import("link/interdependent_static_c_libs/build.zig"),
22 },
23 //.{
24 // .build_root = "test/link/static_lib_as_system_lib",
25 // .import = @import("link/static_lib_as_system_lib/build.zig"),
26 //},
27};
28
29//pub fn addCases(cases: *Standalone) void {
30// addWasmCases(cases);
31// addMachOCases(cases);
32//}
33//
34//fn addWasmCases(cases: *Standalone) void {
35// cases.addBuildFile("test/link/wasm/archive/build.zig", .{
36// .build_modes = true,
37// .requires_stage2 = true,
38// });
39//
40// cases.addBuildFile("test/link/wasm/basic-features/build.zig", .{
41// .requires_stage2 = true,
42// });
43//
44// cases.addBuildFile("test/link/wasm/bss/build.zig", .{
45// .build_modes = false,
46// .requires_stage2 = true,
47// });
48//
49// cases.addBuildFile("test/link/wasm/export/build.zig", .{
50// .build_modes = true,
51// .requires_stage2 = true,
52// });
53//
54// // TODO: Fix open handle in wasm-linker refraining rename from working on Windows.
55// if (builtin.os.tag != .windows) {
56// cases.addBuildFile("test/link/wasm/export-data/build.zig", .{});
57// }
58//
59// cases.addBuildFile("test/link/wasm/extern/build.zig", .{
60// .build_modes = true,
61// .requires_stage2 = true,
62// .use_emulation = true,
63// });
64//
65// cases.addBuildFile("test/link/wasm/extern-mangle/build.zig", .{
66// .build_modes = true,
67// .requires_stage2 = true,
68// });
69//
70// cases.addBuildFile("test/link/wasm/function-table/build.zig", .{
71// .build_modes = true,
72// .requires_stage2 = true,
73// });
74//
75// cases.addBuildFile("test/link/wasm/infer-features/build.zig", .{
76// .requires_stage2 = true,
77// });
78//
79// cases.addBuildFile("test/link/wasm/producers/build.zig", .{
80// .build_modes = true,
81// .requires_stage2 = true,
82// });
83//
84// cases.addBuildFile("test/link/wasm/segments/build.zig", .{
85// .build_modes = true,
86// .requires_stage2 = true,
87// });
88//
89// cases.addBuildFile("test/link/wasm/stack_pointer/build.zig", .{
90// .build_modes = true,
91// .requires_stage2 = true,
92// });
93//
94// cases.addBuildFile("test/link/wasm/type/build.zig", .{
95// .build_modes = true,
96// .requires_stage2 = true,
97// });
98//}
99//
100//fn addMachOCases(cases: *tests.StandaloneContext) void {
101// cases.addBuildFile("test/link/macho/bugs/13056/build.zig", .{
102// .build_modes = true,
103// .requires_macos_sdk = true,
104// .requires_symlinks = true,
105// });
106//
107// cases.addBuildFile("test/link/macho/bugs/13457/build.zig", .{
108// .build_modes = true,
109// .requires_symlinks = true,
110// });
111//
112// cases.addBuildFile("test/link/macho/dead_strip/build.zig", .{
113// .build_modes = false,
114// .requires_symlinks = true,
115// });
116//
117// cases.addBuildFile("test/link/macho/dead_strip_dylibs/build.zig", .{
118// .build_modes = true,
119// .requires_macos_sdk = true,
120// .requires_symlinks = true,
121// });
122//
123// cases.addBuildFile("test/link/macho/dylib/build.zig", .{
124// .build_modes = true,
125// .requires_symlinks = true,
126// });
127//
128// cases.addBuildFile("test/link/macho/empty/build.zig", .{
129// .build_modes = true,
130// .requires_symlinks = true,
131// });
132//
133// cases.addBuildFile("test/link/macho/entry/build.zig", .{
134// .build_modes = true,
135// .requires_symlinks = true,
136// });
137//
138// cases.addBuildFile("test/link/macho/headerpad/build.zig", .{
139// .build_modes = true,
140// .requires_macos_sdk = true,
141// .requires_symlinks = true,
142// });
143//
144// cases.addBuildFile("test/link/macho/linksection/build.zig", .{
145// .build_modes = true,
146// .requires_symlinks = true,
147// });
148//
149// cases.addBuildFile("test/link/macho/needed_framework/build.zig", .{
150// .build_modes = true,
151// .requires_macos_sdk = true,
152// .requires_symlinks = true,
153// });
154//
155// cases.addBuildFile("test/link/macho/needed_library/build.zig", .{
156// .build_modes = true,
157// .requires_symlinks = true,
158// });
159//
160// cases.addBuildFile("test/link/macho/objc/build.zig", .{
161// .build_modes = true,
162// .requires_macos_sdk = true,
163// .requires_symlinks = true,
164// });
165//
166// cases.addBuildFile("test/link/macho/objcpp/build.zig", .{
167// .build_modes = true,
168// .requires_macos_sdk = true,
169// .requires_symlinks = true,
170// });
171//
172// cases.addBuildFile("test/link/macho/pagezero/build.zig", .{
173// .build_modes = false,
174// .requires_symlinks = true,
175// });
176//
177// cases.addBuildFile("test/link/macho/search_strategy/build.zig", .{
178// .build_modes = true,
179// .requires_symlinks = true,
180// });
181//
182// cases.addBuildFile("test/link/macho/stack_size/build.zig", .{
183// .build_modes = true,
184// .requires_symlinks = true,
185// });
186//
187// cases.addBuildFile("test/link/macho/strict_validation/build.zig", .{
188// .build_modes = true,
189// .requires_symlinks = true,
190// });
191//
192// cases.addBuildFile("test/link/macho/tls/build.zig", .{
193// .build_modes = true,
194// .requires_symlinks = true,
195// });
196//
197// cases.addBuildFile("test/link/macho/unwind_info/build.zig", .{
198// .build_modes = true,
199// .requires_symlinks = true,
200// });
201//
202// cases.addBuildFile("test/link/macho/uuid/build.zig", .{
203// .build_modes = false,
204// .requires_symlinks = true,
205// });
206//
207// cases.addBuildFile("test/link/macho/weak_library/build.zig", .{
208// .build_modes = true,
209// .requires_symlinks = true,
210// });
211//
212// cases.addBuildFile("test/link/macho/weak_framework/build.zig", .{
213// .build_modes = true,
214// .requires_macos_sdk = true,
215// .requires_symlinks = true,
216// });
217//}
218
1const std = @import("std");219const std = @import("std");
2const builtin = @import("builtin");220const builtin = @import("builtin");
3const tests = @import("tests.zig");
4
5pub fn addCases(cases: *tests.StandaloneContext) void {
6 cases.addBuildFile("test/link/bss/build.zig", .{
7 .build_modes = false, // we only guarantee zerofill for undefined in Debug
8 });
9
10 cases.addBuildFile("test/link/common_symbols/build.zig", .{
11 .build_modes = true,
12 });
13
14 cases.addBuildFile("test/link/common_symbols_alignment/build.zig", .{
15 .build_modes = true,
16 });
17
18 cases.addBuildFile("test/link/interdependent_static_c_libs/build.zig", .{
19 .build_modes = true,
20 });
21
22 cases.addBuildFile("test/link/static_lib_as_system_lib/build.zig", .{
23 .build_modes = true,
24 });
25
26 addWasmCases(cases);
27 addMachOCases(cases);
28}
29
30fn addWasmCases(cases: *tests.StandaloneContext) void {
31 cases.addBuildFile("test/link/wasm/archive/build.zig", .{
32 .build_modes = true,
33 .requires_stage2 = true,
34 });
35
36 cases.addBuildFile("test/link/wasm/basic-features/build.zig", .{
37 .requires_stage2 = true,
38 });
39
40 cases.addBuildFile("test/link/wasm/bss/build.zig", .{
41 .build_modes = false,
42 .requires_stage2 = true,
43 });
44
45 cases.addBuildFile("test/link/wasm/export/build.zig", .{
46 .build_modes = true,
47 .requires_stage2 = true,
48 });
49
50 // TODO: Fix open handle in wasm-linker refraining rename from working on Windows.
51 if (builtin.os.tag != .windows) {
52 cases.addBuildFile("test/link/wasm/export-data/build.zig", .{});
53 }
54
55 cases.addBuildFile("test/link/wasm/extern/build.zig", .{
56 .build_modes = true,
57 .requires_stage2 = true,
58 .use_emulation = true,
59 });
60
61 cases.addBuildFile("test/link/wasm/extern-mangle/build.zig", .{
62 .build_modes = true,
63 .requires_stage2 = true,
64 });
65
66 cases.addBuildFile("test/link/wasm/function-table/build.zig", .{
67 .build_modes = true,
68 .requires_stage2 = true,
69 });
70
71 cases.addBuildFile("test/link/wasm/infer-features/build.zig", .{
72 .requires_stage2 = true,
73 });
74
75 cases.addBuildFile("test/link/wasm/producers/build.zig", .{
76 .build_modes = true,
77 .requires_stage2 = true,
78 });
79
80 cases.addBuildFile("test/link/wasm/segments/build.zig", .{
81 .build_modes = true,
82 .requires_stage2 = true,
83 });
84
85 cases.addBuildFile("test/link/wasm/stack_pointer/build.zig", .{
86 .build_modes = true,
87 .requires_stage2 = true,
88 });
89
90 cases.addBuildFile("test/link/wasm/type/build.zig", .{
91 .build_modes = true,
92 .requires_stage2 = true,
93 });
94}
95
96fn addMachOCases(cases: *tests.StandaloneContext) void {
97 cases.addBuildFile("test/link/macho/bugs/13056/build.zig", .{
98 .build_modes = true,
99 .requires_macos_sdk = true,
100 .requires_symlinks = true,
101 });
102
103 cases.addBuildFile("test/link/macho/bugs/13457/build.zig", .{
104 .build_modes = true,
105 .requires_symlinks = true,
106 });
107
108 cases.addBuildFile("test/link/macho/dead_strip/build.zig", .{
109 .build_modes = false,
110 .requires_symlinks = true,
111 });
112
113 cases.addBuildFile("test/link/macho/dead_strip_dylibs/build.zig", .{
114 .build_modes = true,
115 .requires_macos_sdk = true,
116 .requires_symlinks = true,
117 });
118
119 cases.addBuildFile("test/link/macho/dylib/build.zig", .{
120 .build_modes = true,
121 .requires_symlinks = true,
122 });
123
124 cases.addBuildFile("test/link/macho/empty/build.zig", .{
125 .build_modes = true,
126 .requires_symlinks = true,
127 });
128
129 cases.addBuildFile("test/link/macho/entry/build.zig", .{
130 .build_modes = true,
131 .requires_symlinks = true,
132 });
133
134 cases.addBuildFile("test/link/macho/headerpad/build.zig", .{
135 .build_modes = true,
136 .requires_macos_sdk = true,
137 .requires_symlinks = true,
138 });
139
140 cases.addBuildFile("test/link/macho/linksection/build.zig", .{
141 .build_modes = true,
142 .requires_symlinks = true,
143 });
144
145 cases.addBuildFile("test/link/macho/needed_framework/build.zig", .{
146 .build_modes = true,
147 .requires_macos_sdk = true,
148 .requires_symlinks = true,
149 });
150
151 cases.addBuildFile("test/link/macho/needed_library/build.zig", .{
152 .build_modes = true,
153 .requires_symlinks = true,
154 });
155
156 cases.addBuildFile("test/link/macho/objc/build.zig", .{
157 .build_modes = true,
158 .requires_macos_sdk = true,
159 .requires_symlinks = true,
160 });
161
162 cases.addBuildFile("test/link/macho/objcpp/build.zig", .{
163 .build_modes = true,
164 .requires_macos_sdk = true,
165 .requires_symlinks = true,
166 });
167
168 cases.addBuildFile("test/link/macho/pagezero/build.zig", .{
169 .build_modes = false,
170 .requires_symlinks = true,
171 });
172
173 cases.addBuildFile("test/link/macho/search_strategy/build.zig", .{
174 .build_modes = true,
175 .requires_symlinks = true,
176 });
177
178 cases.addBuildFile("test/link/macho/stack_size/build.zig", .{
179 .build_modes = true,
180 .requires_symlinks = true,
181 });
182
183 cases.addBuildFile("test/link/macho/strict_validation/build.zig", .{
184 .build_modes = true,
185 .requires_symlinks = true,
186 });
187
188 cases.addBuildFile("test/link/macho/tls/build.zig", .{
189 .build_modes = true,
190 .requires_symlinks = true,
191 });
192
193 cases.addBuildFile("test/link/macho/unwind_info/build.zig", .{
194 .build_modes = true,
195 .requires_symlinks = true,
196 });
197
198 cases.addBuildFile("test/link/macho/uuid/build.zig", .{
199 .build_modes = false,
200 .requires_symlinks = true,
201 });
202
203 cases.addBuildFile("test/link/macho/weak_library/build.zig", .{
204 .build_modes = true,
205 .requires_symlinks = true,
206 });
207
208 cases.addBuildFile("test/link/macho/weak_framework/build.zig", .{
209 .build_modes = true,
210 .requires_macos_sdk = true,
211 .requires_symlinks = true,
212 });
213}
test/link/bss/build.zig+3-3
...@@ -1,17 +1,17 @@...@@ -1,17 +1,17 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn build(b: *std.Build) void {3pub fn build(b: *std.Build) void {
4 const optimize = b.standardOptimizeOption(.{});
5 const test_step = b.step("test", "Test");4 const test_step = b.step("test", "Test");
5 b.default_step = test_step;
66
7 const exe = b.addExecutable(.{7 const exe = b.addExecutable(.{
8 .name = "bss",8 .name = "bss",
9 .root_source_file = .{ .path = "main.zig" },9 .root_source_file = .{ .path = "main.zig" },
10 .optimize = optimize,10 .optimize = .Debug,
11 });11 });
12 b.default_step.dependOn(&exe.step);
1312
14 const run = exe.run();13 const run = exe.run();
15 run.expectStdOutEqual("0, 1, 0\n");14 run.expectStdOutEqual("0, 1, 0\n");
15
16 test_step.dependOn(&run.step);16 test_step.dependOn(&run.step);
17}17}
test/link/bss/main.zig+1-1
...@@ -1,7 +1,7 @@...@@ -1,7 +1,7 @@
1const std = @import("std");1const std = @import("std");
22
3// Stress test zerofill layout3// Stress test zerofill layout
4var buffer: [0x1000000]u64 = undefined;4var buffer: [0x1000000]u64 = [1]u64{0} ** 0x1000000;
55
6pub fn main() anyerror!void {6pub fn main() anyerror!void {
7 buffer[0x10] = 1;7 buffer[0x10] = 1;
test/link/common_symbols/build.zig+9-2
...@@ -1,8 +1,16 @@...@@ -1,8 +1,16 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn build(b: *std.Build) void {3pub fn build(b: *std.Build) void {
4 const optimize = b.standardOptimizeOption(.{});4 const test_step = b.step("test", "Test it");
5 b.default_step = test_step;
6
7 add(b, test_step, .Debug);
8 add(b, test_step, .ReleaseFast);
9 add(b, test_step, .ReleaseSmall);
10 add(b, test_step, .ReleaseSafe);
11}
512
13fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
6 const lib_a = b.addStaticLibrary(.{14 const lib_a = b.addStaticLibrary(.{
7 .name = "a",15 .name = "a",
8 .optimize = optimize,16 .optimize = optimize,
...@@ -16,6 +24,5 @@ pub fn build(b: *std.Build) void {...@@ -16,6 +24,5 @@ pub fn build(b: *std.Build) void {
16 });24 });
17 test_exe.linkLibrary(lib_a);25 test_exe.linkLibrary(lib_a);
1826
19 const test_step = b.step("test", "Test it");
20 test_step.dependOn(&test_exe.step);27 test_step.dependOn(&test_exe.step);
21}28}
test/link/common_symbols_alignment/build.zig+10-5
...@@ -1,23 +1,28 @@...@@ -1,23 +1,28 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn build(b: *std.Build) void {3pub fn build(b: *std.Build) void {
4 const optimize = b.standardOptimizeOption(.{});4 const test_step = b.step("test", "Test it");
5 const target = b.standardTargetOptions(.{});5 b.default_step = test_step;
6
7 add(b, test_step, .Debug);
8 add(b, test_step, .ReleaseFast);
9 add(b, test_step, .ReleaseSmall);
10 add(b, test_step, .ReleaseSafe);
11}
612
13fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
7 const lib_a = b.addStaticLibrary(.{14 const lib_a = b.addStaticLibrary(.{
8 .name = "a",15 .name = "a",
9 .optimize = optimize,16 .optimize = optimize,
10 .target = target,17 .target = .{},
11 });18 });
12 lib_a.addCSourceFiles(&.{"a.c"}, &.{"-fcommon"});19 lib_a.addCSourceFiles(&.{"a.c"}, &.{"-fcommon"});
1320
14 const test_exe = b.addTest(.{21 const test_exe = b.addTest(.{
15 .root_source_file = .{ .path = "main.zig" },22 .root_source_file = .{ .path = "main.zig" },
16 .optimize = optimize,23 .optimize = optimize,
17 .target = target,
18 });24 });
19 test_exe.linkLibrary(lib_a);25 test_exe.linkLibrary(lib_a);
2026
21 const test_step = b.step("test", "Test it");
22 test_step.dependOn(&test_exe.step);27 test_step.dependOn(&test_exe.step);
23}28}
test/link/interdependent_static_c_libs/build.zig+11-6
...@@ -1,13 +1,20 @@...@@ -1,13 +1,20 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn build(b: *std.Build) void {3pub fn build(b: *std.Build) void {
4 const optimize = b.standardOptimizeOption(.{});4 const test_step = b.step("test", "Test it");
5 const target = b.standardTargetOptions(.{});5 b.default_step = test_step;
6
7 add(b, test_step, .Debug);
8 add(b, test_step, .ReleaseFast);
9 add(b, test_step, .ReleaseSmall);
10 add(b, test_step, .ReleaseSafe);
11}
612
13fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
7 const lib_a = b.addStaticLibrary(.{14 const lib_a = b.addStaticLibrary(.{
8 .name = "a",15 .name = "a",
9 .optimize = optimize,16 .optimize = optimize,
10 .target = target,17 .target = .{},
11 });18 });
12 lib_a.addCSourceFile("a.c", &[_][]const u8{});19 lib_a.addCSourceFile("a.c", &[_][]const u8{});
13 lib_a.addIncludePath(".");20 lib_a.addIncludePath(".");
...@@ -15,7 +22,7 @@ pub fn build(b: *std.Build) void {...@@ -15,7 +22,7 @@ pub fn build(b: *std.Build) void {
15 const lib_b = b.addStaticLibrary(.{22 const lib_b = b.addStaticLibrary(.{
16 .name = "b",23 .name = "b",
17 .optimize = optimize,24 .optimize = optimize,
18 .target = target,25 .target = .{},
19 });26 });
20 lib_b.addCSourceFile("b.c", &[_][]const u8{});27 lib_b.addCSourceFile("b.c", &[_][]const u8{});
21 lib_b.addIncludePath(".");28 lib_b.addIncludePath(".");
...@@ -23,12 +30,10 @@ pub fn build(b: *std.Build) void {...@@ -23,12 +30,10 @@ pub fn build(b: *std.Build) void {
23 const test_exe = b.addTest(.{30 const test_exe = b.addTest(.{
24 .root_source_file = .{ .path = "main.zig" },31 .root_source_file = .{ .path = "main.zig" },
25 .optimize = optimize,32 .optimize = optimize,
26 .target = target,
27 });33 });
28 test_exe.linkLibrary(lib_a);34 test_exe.linkLibrary(lib_a);
29 test_exe.linkLibrary(lib_b);35 test_exe.linkLibrary(lib_b);
30 test_exe.addIncludePath(".");36 test_exe.addIncludePath(".");
3137
32 const test_step = b.step("test", "Test it");
33 test_step.dependOn(&test_exe.step);38 test_step.dependOn(&test_exe.step);
34}39}
test/link/static_lib_as_system_lib/build.zig+12-7
...@@ -1,13 +1,20 @@...@@ -1,13 +1,20 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn build(b: *std.Build) void {3pub fn build(b: *std.Build) void {
4 const optimize = b.standardOptimizeOption(.{});4 const test_step = b.step("test", "Test it");
5 const target = b.standardTargetOptions(.{});5 b.default_step = test_step;
6
7 add(b, test_step, .Debug);
8 add(b, test_step, .ReleaseFast);
9 add(b, test_step, .ReleaseSmall);
10 add(b, test_step, .ReleaseSafe);
11}
612
13fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
7 const lib_a = b.addStaticLibrary(.{14 const lib_a = b.addStaticLibrary(.{
8 .name = "a",15 .name = "a",
9 .optimize = optimize,16 .optimize = optimize,
10 .target = target,17 .target = .{},
11 });18 });
12 lib_a.addCSourceFile("a.c", &[_][]const u8{});19 lib_a.addCSourceFile("a.c", &[_][]const u8{});
13 lib_a.addIncludePath(".");20 lib_a.addIncludePath(".");
...@@ -16,14 +23,12 @@ pub fn build(b: *std.Build) void {...@@ -16,14 +23,12 @@ pub fn build(b: *std.Build) void {
16 const test_exe = b.addTest(.{23 const test_exe = b.addTest(.{
17 .root_source_file = .{ .path = "main.zig" },24 .root_source_file = .{ .path = "main.zig" },
18 .optimize = optimize,25 .optimize = optimize,
19 .target = target,26 .target = .{},
20 });27 });
21 test_exe.linkSystemLibrary("a"); // force linking liba.a as -la28 test_exe.linkSystemLibrary("a"); // force linking liba.a as -la
22 test_exe.addSystemIncludePath(".");29 test_exe.addSystemIncludePath(".");
23 const search_path = std.fs.path.join(b.allocator, &[_][]const u8{ b.install_path, "lib" }) catch unreachable;30 const search_path = std.fs.path.join(b.allocator, &[_][]const u8{ b.install_path, "lib" }) catch @panic("OOM");
24 test_exe.addLibraryPath(search_path);31 test_exe.addLibraryPath(search_path);
2532
26 const test_step = b.step("test", "Test it");
27 test_step.dependOn(b.getInstallStep());
28 test_step.dependOn(&test_exe.step);33 test_step.dependOn(&test_exe.step);
29}34}
test/tests.zig+22-36
...@@ -1,16 +1,9 @@...@@ -1,16 +1,9 @@
1const std = @import("std");1const std = @import("std");
2const builtin = @import("builtin");2const builtin = @import("builtin");
3const debug = std.debug;3const assert = std.debug.assert;
4const CrossTarget = std.zig.CrossTarget;4const CrossTarget = std.zig.CrossTarget;
5const io = std.io;
6const fs = std.fs;
7const mem = std.mem;5const mem = std.mem;
8const fmt = std.fmt;
9const ArrayList = std.ArrayList;
10const OptimizeMode = std.builtin.OptimizeMode;6const OptimizeMode = std.builtin.OptimizeMode;
11const CompileStep = std.Build.CompileStep;
12const Allocator = mem.Allocator;
13const ExecError = std.Build.ExecError;
14const Step = std.Build.Step;7const Step = std.Build.Step;
158
16// Cases9// Cases
...@@ -574,15 +567,10 @@ pub fn addStandaloneTests(...@@ -574,15 +567,10 @@ pub fn addStandaloneTests(
574 enable_macos_sdk: bool,567 enable_macos_sdk: bool,
575 target: std.zig.CrossTarget,568 target: std.zig.CrossTarget,
576 omit_stage2: bool,569 omit_stage2: bool,
577 enable_darling: bool,
578 enable_qemu: bool,
579 enable_rosetta: bool,
580 enable_wasmtime: bool,
581 enable_wine: bool,
582 enable_symlinks_windows: bool,570 enable_symlinks_windows: bool,
583) *Step {571) *Step {
584 const cases = b.allocator.create(StandaloneContext) catch @panic("OOM");572 const cases = b.allocator.create(StandaloneContext) catch @panic("OOM");
585 cases.* = StandaloneContext{573 cases.* = .{
586 .b = b,574 .b = b,
587 .step = b.step("test-standalone", "Run the standalone tests"),575 .step = b.step("test-standalone", "Run the standalone tests"),
588 .test_index = 0,576 .test_index = 0,
...@@ -592,11 +580,6 @@ pub fn addStandaloneTests(...@@ -592,11 +580,6 @@ pub fn addStandaloneTests(
592 .enable_macos_sdk = enable_macos_sdk,580 .enable_macos_sdk = enable_macos_sdk,
593 .target = target,581 .target = target,
594 .omit_stage2 = omit_stage2,582 .omit_stage2 = omit_stage2,
595 .enable_darling = enable_darling,
596 .enable_qemu = enable_qemu,
597 .enable_rosetta = enable_rosetta,
598 .enable_wasmtime = enable_wasmtime,
599 .enable_wine = enable_wine,
600 .enable_symlinks_windows = enable_symlinks_windows,583 .enable_symlinks_windows = enable_symlinks_windows,
601 };584 };
602585
...@@ -613,21 +596,24 @@ pub fn addLinkTests(...@@ -613,21 +596,24 @@ pub fn addLinkTests(
613 omit_stage2: bool,596 omit_stage2: bool,
614 enable_symlinks_windows: bool,597 enable_symlinks_windows: bool,
615) *Step {598) *Step {
616 const cases = b.allocator.create(StandaloneContext) catch @panic("OOM");599 _ = test_filter;
617 cases.* = StandaloneContext{600 _ = optimize_modes;
618 .b = b,601 _ = enable_macos_sdk;
619 .step = b.step("test-link", "Run the linker tests"),602 _ = omit_stage2;
620 .test_index = 0,603 _ = enable_symlinks_windows;
621 .test_filter = test_filter,604
622 .optimize_modes = optimize_modes,605 const step = b.step("test-link", "Run the linker tests");
623 .skip_non_native = true,606
624 .enable_macos_sdk = enable_macos_sdk,607 inline for (link.cases) |link_test| {
625 .target = .{},608 const dep = b.anonymousDependency(link_test.build_root, link_test.import, .{});
626 .omit_stage2 = omit_stage2,609 const dep_step = dep.builder.default_step;
627 .enable_symlinks_windows = enable_symlinks_windows,610 assert(mem.startsWith(u8, dep.builder.dep_prefix, "test."));
628 };611 const dep_prefix_adjusted = dep.builder.dep_prefix["test.".len..];
629 link.addCases(cases);612 dep_step.name = b.fmt("{s}{s}", .{ dep_prefix_adjusted, dep_step.name });
630 return cases.step;613 step.dependOn(dep_step);
614 }
615
616 return step;
631}617}
632618
633pub fn addCliTests(b: *std.Build, test_filter: ?[]const u8, optimize_modes: []const OptimizeMode) *Step {619pub fn addCliTests(b: *std.Build, test_filter: ?[]const u8, optimize_modes: []const OptimizeMode) *Step {
...@@ -761,7 +747,7 @@ pub fn addCliTests(b: *std.Build, test_filter: ?[]const u8, optimize_modes: []co...@@ -761,7 +747,7 @@ pub fn addCliTests(b: *std.Build, test_filter: ?[]const u8, optimize_modes: []co
761 const unformatted_code = " // no reason for indent";747 const unformatted_code = " // no reason for indent";
762 const s = std.fs.path.sep_str;748 const s = std.fs.path.sep_str;
763749
764 var dir = fs.cwd().openDir(tmp_path, .{}) catch @panic("unhandled");750 var dir = std.fs.cwd().openDir(tmp_path, .{}) catch @panic("unhandled");
765 defer dir.close();751 defer dir.close();
766 dir.writeFile("fmt1.zig", unformatted_code) catch @panic("unhandled");752 dir.writeFile("fmt1.zig", unformatted_code) catch @panic("unhandled");
767 dir.writeFile("fmt2.zig", unformatted_code) catch @panic("unhandled");753 dir.writeFile("fmt2.zig", unformatted_code) catch @panic("unhandled");
...@@ -791,7 +777,7 @@ pub fn addCliTests(b: *std.Build, test_filter: ?[]const u8, optimize_modes: []co...@@ -791,7 +777,7 @@ pub fn addCliTests(b: *std.Build, test_filter: ?[]const u8, optimize_modes: []co
791 run3.step.dependOn(&run2.step);777 run3.step.dependOn(&run2.step);
792778
793 const unformatted_code_utf16 = "\xff\xfe \x00 \x00 \x00 \x00/\x00/\x00 \x00n\x00o\x00 \x00r\x00e\x00a\x00s\x00o\x00n\x00";779 const unformatted_code_utf16 = "\xff\xfe \x00 \x00 \x00 \x00/\x00/\x00 \x00n\x00o\x00 \x00r\x00e\x00a\x00s\x00o\x00n\x00";
794 const fmt4_path = fs.path.join(b.allocator, &.{ tmp_path, "fmt4.zig" }) catch @panic("OOM");780 const fmt4_path = std.fs.path.join(b.allocator, &.{ tmp_path, "fmt4.zig" }) catch @panic("OOM");
795 const write4 = b.addWriteFiles();781 const write4 = b.addWriteFiles();
796 write4.addBytesToSource(unformatted_code_utf16, fmt4_path);782 write4.addBytesToSource(unformatted_code_utf16, fmt4_path);
797 write4.step.dependOn(&run3.step);783 write4.step.dependOn(&run3.step);