re-enable wasm linker tests

This commit is contained in:
Andrew Kelley 2023-03-07 17:00:35 -07:00
parent f558c835a4
commit cdf0a2af58
15 changed files with 316 additions and 243 deletions

View File

@ -20,197 +20,179 @@ pub const cases = [_]Case{
.build_root = "test/link/interdependent_static_c_libs",
.import = @import("link/interdependent_static_c_libs/build.zig"),
},
};
//pub fn addCases(cases: *Standalone) void {
// addWasmCases(cases);
// addMachOCases(cases);
//}
//
//fn addWasmCases(cases: *Standalone) void {
// cases.addBuildFile("test/link/wasm/archive/build.zig", .{
// .build_modes = true,
// .requires_stage2 = true,
// });
//
// cases.addBuildFile("test/link/wasm/basic-features/build.zig", .{
// .requires_stage2 = true,
// });
//
// cases.addBuildFile("test/link/wasm/bss/build.zig", .{
// .build_modes = false,
// .requires_stage2 = true,
// });
//
// cases.addBuildFile("test/link/wasm/export/build.zig", .{
// .build_modes = true,
// .requires_stage2 = true,
// });
//
// // TODO: Fix open handle in wasm-linker refraining rename from working on Windows.
// if (builtin.os.tag != .windows) {
// cases.addBuildFile("test/link/wasm/export-data/build.zig", .{});
// }
//
// cases.addBuildFile("test/link/wasm/extern/build.zig", .{
// .build_modes = true,
// .requires_stage2 = true,
// .use_emulation = true,
// });
//
// cases.addBuildFile("test/link/wasm/extern-mangle/build.zig", .{
// .build_modes = true,
// .requires_stage2 = true,
// });
//
// cases.addBuildFile("test/link/wasm/function-table/build.zig", .{
// .build_modes = true,
// .requires_stage2 = true,
// });
//
// cases.addBuildFile("test/link/wasm/infer-features/build.zig", .{
// .requires_stage2 = true,
// });
//
// cases.addBuildFile("test/link/wasm/producers/build.zig", .{
// .build_modes = true,
// .requires_stage2 = true,
// });
//
// cases.addBuildFile("test/link/wasm/segments/build.zig", .{
// .build_modes = true,
// .requires_stage2 = true,
// });
//
// cases.addBuildFile("test/link/wasm/stack_pointer/build.zig", .{
// .build_modes = true,
// .requires_stage2 = true,
// });
//
// cases.addBuildFile("test/link/wasm/type/build.zig", .{
// .build_modes = true,
// .requires_stage2 = true,
// });
//}
//
//fn addMachOCases(cases: *tests.StandaloneContext) void {
// cases.addBuildFile("test/link/macho/bugs/13056/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/bugs/13457/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/dead_strip/build.zig", .{
// .build_modes = false,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/dead_strip_dylibs/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/dylib/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/empty/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/entry/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/headerpad/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/linksection/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/needed_framework/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/needed_library/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/objc/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/objcpp/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/pagezero/build.zig", .{
// .build_modes = false,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/search_strategy/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/stack_size/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/strict_validation/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/tls/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/unwind_info/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/uuid/build.zig", .{
// .build_modes = false,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/weak_library/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/weak_framework/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
//}
// WASM Cases
.{
.build_root = "test/link/wasm/archive",
.import = @import("link/wasm/archive/build.zig"),
},
.{
.build_root = "test/link/wasm/basic-features",
.import = @import("link/wasm/basic-features/build.zig"),
},
.{
.build_root = "test/link/wasm/bss",
.import = @import("link/wasm/bss/build.zig"),
},
.{
.build_root = "test/link/wasm/export",
.import = @import("link/wasm/export/build.zig"),
},
.{
.build_root = "test/link/wasm/export-data",
.import = @import("link/wasm/export-data/build.zig"),
},
.{
.build_root = "test/link/wasm/extern",
.import = @import("link/wasm/extern/build.zig"),
},
.{
.build_root = "test/link/wasm/extern-mangle",
.import = @import("link/wasm/extern-mangle/build.zig"),
},
.{
.build_root = "test/link/wasm/function-table",
.import = @import("link/wasm/function-table/build.zig"),
},
.{
.build_root = "test/link/wasm/infer-features",
.import = @import("link/wasm/infer-features/build.zig"),
},
.{
.build_root = "test/link/wasm/producers",
.import = @import("link/wasm/producers/build.zig"),
},
.{
.build_root = "test/link/wasm/segments",
.import = @import("link/wasm/segments/build.zig"),
},
.{
.build_root = "test/link/wasm/stack_pointer",
.import = @import("link/wasm/stack_pointer/build.zig"),
},
.{
.build_root = "test/link/wasm/type",
.import = @import("link/wasm/type/build.zig"),
},
// Mach-O Cases
// cases.addBuildFile("test/link/macho/bugs/13056/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/bugs/13457/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/dead_strip/build.zig", .{
// .build_modes = false,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/dead_strip_dylibs/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/dylib/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/empty/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/entry/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/headerpad/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/linksection/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/needed_framework/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/needed_library/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/objc/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/objcpp/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/pagezero/build.zig", .{
// .build_modes = false,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/search_strategy/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/stack_size/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/strict_validation/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/tls/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/unwind_info/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/uuid/build.zig", .{
// .build_modes = false,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/weak_library/build.zig", .{
// .build_modes = true,
// .requires_symlinks = true,
// });
//
// cases.addBuildFile("test/link/macho/weak_framework/build.zig", .{
// .build_modes = true,
// .requires_macos_sdk = true,
// .requires_symlinks = true,
// });
};
const std = @import("std");
const builtin = @import("builtin");

View File

@ -1,15 +1,24 @@
const std = @import("std");
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test");
test_step.dependOn(b.getInstallStep());
pub const requires_stage2 = true;
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test it");
b.default_step = test_step;
add(b, test_step, .Debug);
add(b, test_step, .ReleaseFast);
add(b, test_step, .ReleaseSmall);
add(b, test_step, .ReleaseSafe);
}
fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
// The code in question will pull-in compiler-rt,
// and therefore link with its archive file.
const lib = b.addSharedLibrary(.{
.name = "main",
.root_source_file = .{ .path = "main.zig" },
.optimize = b.standardOptimizeOption(.{}),
.optimize = optimize,
.target = .{ .cpu_arch = .wasm32, .os_tag = .freestanding },
});
lib.use_llvm = false;

View File

@ -1,11 +1,13 @@
const std = @import("std");
pub const requires_stage2 = true;
pub fn build(b: *std.Build) void {
// Library with explicitly set cpu features
const lib = b.addSharedLibrary(.{
.name = "lib",
.root_source_file = .{ .path = "main.zig" },
.optimize = b.standardOptimizeOption(.{}),
.optimize = .Debug,
.target = .{
.cpu_arch = .wasm32,
.cpu_model = .{ .explicit = &std.Target.wasm.cpu.mvp },
@ -24,4 +26,5 @@ pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Run linker test");
test_step.dependOn(&check.step);
b.default_step = test_step;
}

View File

@ -1,14 +1,16 @@
const std = @import("std");
pub const requires_stage2 = true;
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test");
test_step.dependOn(b.getInstallStep());
b.default_step = test_step;
const lib = b.addSharedLibrary(.{
.name = "lib",
.root_source_file = .{ .path = "lib.zig" },
.target = .{ .cpu_arch = .wasm32, .os_tag = .freestanding },
.optimize = b.standardOptimizeOption(.{}),
.optimize = .Debug,
});
lib.use_llvm = false;
lib.use_lld = false;
@ -36,5 +38,6 @@ pub fn build(b: *std.Build) void {
check_lib.checkNext("name .rodata");
check_lib.checkNext("index 1"); // bss section always last
check_lib.checkNext("name .bss");
test_step.dependOn(&check_lib.step);
}

View File

@ -2,7 +2,12 @@ const std = @import("std");
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test");
test_step.dependOn(b.getInstallStep());
b.default_step = test_step;
if (@import("builtin").os.tag == .windows) {
// TODO: Fix open handle in wasm-linker refraining rename from working on Windows.
return;
}
const lib = b.addSharedLibrary(.{
.name = "lib",

View File

@ -1,8 +1,18 @@
const std = @import("std");
pub fn build(b: *std.Build) void {
const optimize = b.standardOptimizeOption(.{});
pub const requires_stage2 = true;
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test it");
b.default_step = test_step;
add(b, test_step, .Debug);
add(b, test_step, .ReleaseFast);
add(b, test_step, .ReleaseSmall);
add(b, test_step, .ReleaseSafe);
}
fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
const no_export = b.addSharedLibrary(.{
.name = "no-export",
.root_source_file = .{ .path = "main.zig" },
@ -50,7 +60,6 @@ pub fn build(b: *std.Build) void {
check_force_export.checkNext("name foo");
check_force_export.checkNext("kind function");
const test_step = b.step("test", "Run linker test");
test_step.dependOn(&check_no_export.step);
test_step.dependOn(&check_dynamic_export.step);
test_step.dependOn(&check_force_export.step);

View File

@ -1,18 +1,24 @@
const std = @import("std");
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test");
test_step.dependOn(b.getInstallStep());
const test_step = b.step("test", "Test it");
b.default_step = test_step;
add(b, test_step, .Debug);
add(b, test_step, .ReleaseFast);
add(b, test_step, .ReleaseSmall);
add(b, test_step, .ReleaseSafe);
}
fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
const lib = b.addSharedLibrary(.{
.name = "lib",
.root_source_file = .{ .path = "lib.zig" },
.target = .{ .cpu_arch = .wasm32, .os_tag = .freestanding },
.optimize = b.standardOptimizeOption(.{}),
.optimize = optimize,
});
lib.import_symbols = true; // import `a` and `b`
lib.rdynamic = true; // export `foo`
lib.install();
const check_lib = lib.checkObject(.wasm);
check_lib.checkStart("Section import");

View File

@ -1,10 +1,22 @@
const std = @import("std");
pub const requires_stage2 = true;
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test it");
b.default_step = test_step;
add(b, test_step, .Debug);
add(b, test_step, .ReleaseFast);
add(b, test_step, .ReleaseSmall);
add(b, test_step, .ReleaseSafe);
}
fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
const exe = b.addExecutable(.{
.name = "extern",
.root_source_file = .{ .path = "main.zig" },
.optimize = b.standardOptimizeOption(.{}),
.optimize = optimize,
.target = .{ .cpu_arch = .wasm32, .os_tag = .wasi },
});
exe.addCSourceFile("foo.c", &.{});
@ -15,6 +27,5 @@ pub fn build(b: *std.Build) void {
run.skip_foreign_checks = true;
run.expectStdOutEqual("Result: 30");
const test_step = b.step("test", "Run linker test");
test_step.dependOn(&run.step);
}

View File

@ -1,13 +1,20 @@
const std = @import("std");
pub const requires_stage2 = true;
pub fn build(b: *std.Build) void {
const optimize = b.standardOptimizeOption(.{});
const test_step = b.step("test", "Test it");
b.default_step = test_step;
const test_step = b.step("test", "Test");
test_step.dependOn(b.getInstallStep());
add(b, test_step, .Debug);
add(b, test_step, .ReleaseFast);
add(b, test_step, .ReleaseSmall);
add(b, test_step, .ReleaseSafe);
}
fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
const import_table = b.addSharedLibrary(.{
.name = "lib",
.name = "import_table",
.root_source_file = .{ .path = "lib.zig" },
.target = .{ .cpu_arch = .wasm32, .os_tag = .freestanding },
.optimize = optimize,
@ -17,7 +24,7 @@ pub fn build(b: *std.Build) void {
import_table.import_table = true;
const export_table = b.addSharedLibrary(.{
.name = "lib",
.name = "export_table",
.root_source_file = .{ .path = "lib.zig" },
.target = .{ .cpu_arch = .wasm32, .os_tag = .freestanding },
.optimize = optimize,
@ -27,7 +34,7 @@ pub fn build(b: *std.Build) void {
export_table.export_table = true;
const regular_table = b.addSharedLibrary(.{
.name = "lib",
.name = "regular_table",
.root_source_file = .{ .path = "lib.zig" },
.target = .{ .cpu_arch = .wasm32, .os_tag = .freestanding },
.optimize = optimize,

View File

@ -1,12 +1,12 @@
const std = @import("std");
pub fn build(b: *std.Build) void {
const optimize = b.standardOptimizeOption(.{});
pub const requires_stage2 = true;
pub fn build(b: *std.Build) void {
// Wasm Object file which we will use to infer the features from
const c_obj = b.addObject(.{
.name = "c_obj",
.optimize = optimize,
.optimize = .Debug,
.target = .{
.cpu_arch = .wasm32,
.cpu_model = .{ .explicit = &std.Target.wasm.cpu.bleeding_edge },
@ -20,7 +20,7 @@ pub fn build(b: *std.Build) void {
const lib = b.addSharedLibrary(.{
.name = "lib",
.root_source_file = .{ .path = "main.zig" },
.optimize = optimize,
.optimize = .Debug,
.target = .{
.cpu_arch = .wasm32,
.cpu_model = .{ .explicit = &std.Target.wasm.cpu.mvp },
@ -45,4 +45,5 @@ pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Run linker test");
test_step.dependOn(&check.step);
b.default_step = test_step;
}

View File

@ -1,24 +1,31 @@
const std = @import("std");
const builtin = @import("builtin");
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test");
test_step.dependOn(b.getInstallStep());
pub const requires_stage2 = true;
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test it");
b.default_step = test_step;
add(b, test_step, .Debug);
add(b, test_step, .ReleaseFast);
add(b, test_step, .ReleaseSmall);
add(b, test_step, .ReleaseSafe);
}
fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
const lib = b.addSharedLibrary(.{
.name = "lib",
.root_source_file = .{ .path = "lib.zig" },
.target = .{ .cpu_arch = .wasm32, .os_tag = .freestanding },
.optimize = b.standardOptimizeOption(.{}),
.optimize = optimize,
});
lib.use_llvm = false;
lib.use_lld = false;
lib.strip = false;
lib.install();
const zig_version = builtin.zig_version;
var version_buf: [100]u8 = undefined;
const version_fmt = std.fmt.bufPrint(&version_buf, "version {}", .{zig_version}) catch unreachable;
const version_fmt = "version " ++ builtin.zig_version_string;
const check_lib = lib.checkObject(.wasm);
check_lib.checkStart("name producers");

View File

@ -1,14 +1,23 @@
const std = @import("std");
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test");
test_step.dependOn(b.getInstallStep());
pub const requires_stage2 = true;
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test it");
b.default_step = test_step;
add(b, test_step, .Debug);
add(b, test_step, .ReleaseFast);
add(b, test_step, .ReleaseSmall);
add(b, test_step, .ReleaseSafe);
}
fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
const lib = b.addSharedLibrary(.{
.name = "lib",
.root_source_file = .{ .path = "lib.zig" },
.target = .{ .cpu_arch = .wasm32, .os_tag = .freestanding },
.optimize = b.standardOptimizeOption(.{}),
.optimize = optimize,
});
lib.use_llvm = false;
lib.use_lld = false;

View File

@ -1,14 +1,23 @@
const std = @import("std");
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test");
test_step.dependOn(b.getInstallStep());
pub const requires_stage2 = true;
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test it");
b.default_step = test_step;
add(b, test_step, .Debug);
add(b, test_step, .ReleaseFast);
add(b, test_step, .ReleaseSmall);
add(b, test_step, .ReleaseSafe);
}
fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
const lib = b.addSharedLibrary(.{
.name = "lib",
.root_source_file = .{ .path = "lib.zig" },
.target = .{ .cpu_arch = .wasm32, .os_tag = .freestanding },
.optimize = b.standardOptimizeOption(.{}),
.optimize = optimize,
});
lib.use_llvm = false;
lib.use_lld = false;

View File

@ -1,14 +1,23 @@
const std = @import("std");
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test");
test_step.dependOn(b.getInstallStep());
pub const requires_stage2 = true;
pub fn build(b: *std.Build) void {
const test_step = b.step("test", "Test it");
b.default_step = test_step;
add(b, test_step, .Debug);
add(b, test_step, .ReleaseFast);
add(b, test_step, .ReleaseSmall);
add(b, test_step, .ReleaseSafe);
}
fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
const lib = b.addSharedLibrary(.{
.name = "lib",
.root_source_file = .{ .path = "lib.zig" },
.target = .{ .cpu_arch = .wasm32, .os_tag = .freestanding },
.optimize = b.standardOptimizeOption(.{}),
.optimize = optimize,
});
lib.use_llvm = false;
lib.use_lld = false;

View File

@ -599,18 +599,21 @@ pub fn addLinkTests(
_ = test_filter;
_ = optimize_modes;
_ = enable_macos_sdk;
_ = omit_stage2;
_ = enable_symlinks_windows;
const step = b.step("test-link", "Run the linker tests");
inline for (link.cases) |link_test| {
const dep = b.anonymousDependency(link_test.build_root, link_test.import, .{});
const dep_step = dep.builder.default_step;
assert(mem.startsWith(u8, dep.builder.dep_prefix, "test."));
const dep_prefix_adjusted = dep.builder.dep_prefix["test.".len..];
dep_step.name = b.fmt("{s}{s}", .{ dep_prefix_adjusted, dep_step.name });
step.dependOn(dep_step);
const requires_stage2 = @hasDecl(link_test.import, "requires_stage2") and
link_test.import.requires_stage2;
if (!requires_stage2 or !omit_stage2) {
const dep = b.anonymousDependency(link_test.build_root, link_test.import, .{});
const dep_step = dep.builder.default_step;
assert(mem.startsWith(u8, dep.builder.dep_prefix, "test."));
const dep_prefix_adjusted = dep.builder.dep_prefix["test.".len..];
dep_step.name = b.fmt("{s}{s}", .{ dep_prefix_adjusted, dep_step.name });
step.dependOn(dep_step);
}
}
return step;