zig/test/link/wasm/bss/build.zig
Luuk de Gram 8033767082
wasm-linker: Implement linker tests (#12006)
* test/link: initial wasm support

This adds basic parsing and dumping of wasm section so they
can be tested using the new linker-test infrastructure.

* test/link: all wasm sections parsing and dumping

We now parse and dump all sections for the wasm binary format.
Currently, this only dumps the name of a custom section.
Later this should also dump symbol table, name, linking metadata and relocations.
All of those live within the custom sections.

* Add wasm linker test

This also fixes a parser mistake in reading the flags.

* test/link: implement linker tests wasm & fixes

Adds several test cases to test the wasm self-hosted linker.
This also introduces fixes that were caught during the implementation
of those tests.

* test-runner: obey omit_stage2 for standalone

When a standalone test requires stage2, but stage2 is omit
from the compiler, such test case will not be included as part
of the test suite that is being ran. This is to support CI's
where we omit stage2 to lower the memory usage.
2022-07-12 14:36:33 +02:00

42 lines
1.5 KiB
Zig

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.use_llvm = false;
lib.use_stage1 = false;
lib.use_lld = false;
// to make sure the bss segment is emitted, we must import memory
lib.import_memory = true;
lib.install();
const check_lib = lib.checkObject(.wasm);
// since we import memory, make sure it exists with the correct naming
check_lib.checkStart("Section import");
check_lib.checkNext("entries 1");
check_lib.checkNext("module env"); // default module name is "env"
check_lib.checkNext("name memory"); // as per linker specification
// since we are importing memory, ensure it's not exported
check_lib.checkStart("Section export");
check_lib.checkNext("entries 1"); // we're exporting function 'foo' so only 1 entry
// validate the name of the stack pointer
check_lib.checkStart("Section custom");
check_lib.checkNext("type data_segment");
check_lib.checkNext("names 2");
check_lib.checkNext("index 0");
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);
}