commit ef0df24626cc6c3cfe0b87164d481eeb26cc57fb (tree)
parent 66bcc55e0196bd43746a09a79668c7c495bd1f89
Author: Luuk de Gram <luuk@degram.dev>
Date: Tue, 1 Nov 2022 15:43:34 +0100
test/link: add linker test to verify mangling
This adds a simple linker test to ensure the built library contains
an import entry for each extern function call that was mangled.
Diffstat:
5 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/test/link.zig b/test/link.zig
@@ -48,6 +48,11 @@ fn addWasmCases(cases: *tests.StandaloneContext) void {
.use_emulation = true,
});
+ cases.addBuildFile("test/link/wasm/extern-mangle/build.zig", .{
+ .build_modes = true,
+ .requires_stage2 = true,
+ });
+
cases.addBuildFile("test/link/wasm/infer-features/build.zig", .{
.requires_stage2 = true,
});
diff --git a/test/link/wasm/extern-mangle/a.zig b/test/link/wasm/extern-mangle/a.zig
@@ -0,0 +1 @@
+pub extern "a" fn hello() i32;
diff --git a/test/link/wasm/extern-mangle/b.zig b/test/link/wasm/extern-mangle/b.zig
@@ -0,0 +1 @@
+pub extern "b" fn hello() i32;
diff --git a/test/link/wasm/extern-mangle/build.zig b/test/link/wasm/extern-mangle/build.zig
@@ -0,0 +1,24 @@
+const std = @import("std");
+const Builder = std.build.Builder;
+
+pub fn build(b: *Builder) void {
+ const mode = b.standardReleaseOptions();
+
+ const test_step = b.step("test", "Test");
+ test_step.dependOn(b.getInstallStep());
+
+ const lib = b.addSharedLibrary("lib", "lib.zig", .unversioned);
+ lib.setBuildMode(mode);
+ lib.setTarget(.{ .cpu_arch = .wasm32, .os_tag = .freestanding });
+ lib.install();
+
+ const check_lib = lib.checkObject(.wasm);
+ check_lib.checkStart("Section import");
+ check_lib.checkNext("entries 2"); // a.hello & b.hello
+ check_lib.checkNext("module a");
+ check_lib.checkNext("name hello");
+ check_lib.checkNext("module b");
+ check_lib.checkNext("name hello");
+
+ test_step.dependOn(&check_lib.step);
+}
diff --git a/test/link/wasm/extern-mangle/lib.zig b/test/link/wasm/extern-mangle/lib.zig
@@ -0,0 +1,6 @@
+const a = @import("a.zig").hello;
+const b = @import("b.zig").hello;
+export fn foo() void {
+ _ = a();
+ _ = b();
+}