master
1const std = @import("std");
2
3pub fn build(b: *std.Build) void {
4 const test_step = b.step("test", "Test it");
5 b.default_step = test_step;
6
7 add(b, test_step, .Debug);
8}
9
10fn add(b: *std.Build, test_step: *std.Build.Step, optimize: std.builtin.OptimizeMode) void {
11 const no_export = b.addExecutable(.{
12 .name = "no-export",
13 .root_module = b.createModule(.{
14 .root_source_file = b.path("main-hidden.zig"),
15 .optimize = optimize,
16 .target = b.resolveTargetQuery(.{ .cpu_arch = .wasm32, .os_tag = .freestanding }),
17 }),
18 });
19 no_export.entry = .disabled;
20 no_export.use_llvm = false;
21 no_export.use_lld = false;
22 // Don't pull in ubsan, since we're just expecting a very minimal executable.
23 no_export.bundle_ubsan_rt = false;
24
25 const dynamic_export = b.addExecutable(.{
26 .name = "dynamic",
27 .root_module = b.createModule(.{
28 .root_source_file = b.path("main.zig"),
29 .optimize = optimize,
30 .target = b.resolveTargetQuery(.{ .cpu_arch = .wasm32, .os_tag = .freestanding }),
31 }),
32 });
33 dynamic_export.entry = .disabled;
34 dynamic_export.rdynamic = true;
35 dynamic_export.use_llvm = false;
36 dynamic_export.use_lld = false;
37 // Don't pull in ubsan, since we're just expecting a very minimal executable.
38 dynamic_export.bundle_ubsan_rt = false;
39
40 const force_export = b.addExecutable(.{
41 .name = "force",
42 .root_module = b.createModule(.{
43 .root_source_file = b.path("main-hidden.zig"),
44 .optimize = optimize,
45 .target = b.resolveTargetQuery(.{ .cpu_arch = .wasm32, .os_tag = .freestanding }),
46 }),
47 });
48 force_export.entry = .disabled;
49 force_export.root_module.export_symbol_names = &.{"foo"};
50 force_export.use_llvm = false;
51 force_export.use_lld = false;
52 // Don't pull in ubsan, since we're just expecting a very minimal executable.
53 force_export.bundle_ubsan_rt = false;
54
55 const check_no_export = no_export.checkObject();
56 check_no_export.checkInHeaders();
57 check_no_export.checkExact("Section export");
58 check_no_export.checkExact("entries 1");
59 check_no_export.checkExact("name memory");
60 check_no_export.checkExact("kind memory");
61
62 const check_dynamic_export = dynamic_export.checkObject();
63 check_dynamic_export.checkInHeaders();
64 check_dynamic_export.checkExact("Section export");
65 check_dynamic_export.checkExact("entries 2");
66 check_dynamic_export.checkExact("name foo");
67 check_dynamic_export.checkExact("kind function");
68
69 const check_force_export = force_export.checkObject();
70 check_force_export.checkInHeaders();
71 check_force_export.checkExact("Section export");
72 check_force_export.checkExact("entries 2");
73 check_force_export.checkExact("name foo");
74 check_force_export.checkExact("kind function");
75
76 test_step.dependOn(&check_no_export.step);
77 test_step.dependOn(&check_dynamic_export.step);
78 test_step.dependOn(&check_force_export.step);
79}