CI: add non-LLVM backends to the test matrix
We can't yet run the behavior tests with stage3, but at least we can run them with stage2, and we can use the proper test matrix. This commit also adds use_llvm and ofmt to the zig build system.
This commit is contained in:
12
build.zig
12
build.zig
@@ -445,6 +445,9 @@ pub fn build(b: *Builder) !void {
|
||||
false, // skip_single_threaded
|
||||
skip_non_native,
|
||||
skip_libc,
|
||||
skip_stage1,
|
||||
omit_stage2,
|
||||
is_stage1,
|
||||
));
|
||||
|
||||
toolchain_step.dependOn(tests.addPkgTests(
|
||||
@@ -457,6 +460,9 @@ pub fn build(b: *Builder) !void {
|
||||
true, // skip_single_threaded
|
||||
skip_non_native,
|
||||
true, // skip_libc
|
||||
skip_stage1,
|
||||
omit_stage2 or true, // TODO get these all passing
|
||||
is_stage1,
|
||||
));
|
||||
|
||||
toolchain_step.dependOn(tests.addPkgTests(
|
||||
@@ -469,6 +475,9 @@ pub fn build(b: *Builder) !void {
|
||||
true, // skip_single_threaded
|
||||
skip_non_native,
|
||||
true, // skip_libc
|
||||
skip_stage1,
|
||||
omit_stage2 or true, // TODO get these all passing
|
||||
is_stage1,
|
||||
));
|
||||
|
||||
toolchain_step.dependOn(tests.addCompareOutputTests(b, test_filter, modes));
|
||||
@@ -494,6 +503,9 @@ pub fn build(b: *Builder) !void {
|
||||
false,
|
||||
skip_non_native,
|
||||
skip_libc,
|
||||
skip_stage1,
|
||||
omit_stage2 or true, // TODO get these all passing
|
||||
is_stage1,
|
||||
);
|
||||
|
||||
const test_step = b.step("test", "Run all the tests");
|
||||
|
||||
@@ -48,25 +48,19 @@ cd $WORKSPACE
|
||||
$ZIG fmt --check . --exclude test/cases/
|
||||
|
||||
# Build stage2 standalone so that we can test stage2 against stage2 compiler-rt.
|
||||
$ZIG build -p stage2 -Dstatic-llvm -Dtarget=native-native-musl --search-prefix "$DEPS_LOCAL"
|
||||
$ZIG build -p stage2 -Dstatic-llvm -Dtarget=native-native-musl --search-prefix "$DEPS_LOCAL"
|
||||
|
||||
# Ensure that stage2 can build itself.
|
||||
./stage2/bin/zig build -p stage3 -Dstatic-llvm -Dtarget=native-native-musl --search-prefix "$DEPS_LOCAL"
|
||||
stage2/bin/zig build -p stage3 -Dstatic-llvm -Dtarget=native-native-musl --search-prefix "$DEPS_LOCAL"
|
||||
stage2/bin/zig build # test building self-hosted without LLVM
|
||||
stage2/bin/zig build -Dtarget=arm-linux-musleabihf # test building self-hosted for 32-bit arm
|
||||
|
||||
stage2/bin/zig test test/behavior.zig -I test -fLLVM
|
||||
stage2/bin/zig test test/behavior.zig -I test -fno-LLVM
|
||||
stage2/bin/zig test test/behavior.zig -I test -fLLVM -target aarch64-linux --test-cmd qemu-aarch64 --test-cmd-bin
|
||||
stage2/bin/zig test test/behavior.zig -I test -fno-LLVM -target aarch64-linux --test-cmd qemu-aarch64 --test-cmd-bin
|
||||
stage2/bin/zig test test/behavior.zig -I test -ofmt=c
|
||||
stage2/bin/zig test test/behavior.zig -I test -fno-LLVM -target wasm32-wasi --test-cmd wasmtime --test-cmd-bin
|
||||
stage2/bin/zig test test/behavior.zig -I test -fLLVM -target wasm32-wasi --test-cmd wasmtime --test-cmd-bin
|
||||
stage2/bin/zig test test/behavior.zig -I test -fno-LLVM -target arm-linux --test-cmd qemu-arm --test-cmd-bin
|
||||
stage2/bin/zig test test/behavior.zig -I test -fLLVM -target aarch64-macos --test-no-exec
|
||||
stage2/bin/zig test test/behavior.zig -I test -fno-LLVM -target aarch64-macos --test-no-exec
|
||||
stage2/bin/zig test test/behavior.zig -I test -fLLVM -target x86_64-macos --test-no-exec
|
||||
stage2/bin/zig test test/behavior.zig -I test -fno-LLVM -target x86_64-macos --test-no-exec
|
||||
# Here we use stage2 instead of stage3 because of two bugs remaining:
|
||||
# * https://github.com/ziglang/zig/issues/11367 (and corresponding workaround in compiler source)
|
||||
# * https://github.com/ziglang/zig/pull/11492#issuecomment-1112871321
|
||||
stage2/bin/zig build test-behavior -fqemu -fwasmtime
|
||||
|
||||
$ZIG build test-behavior -fqemu -fwasmtime
|
||||
$ZIG build test-behavior -fqemu -fwasmtime -Domit-stage2
|
||||
$ZIG build test-compiler-rt -fqemu -fwasmtime
|
||||
$ZIG build test-std -fqemu -fwasmtime
|
||||
$ZIG build test-minilibc -fqemu -fwasmtime
|
||||
@@ -79,8 +73,6 @@ $ZIG build test-runtime-safety -fqemu -fwasmtime
|
||||
$ZIG build test-translate-c -fqemu -fwasmtime
|
||||
$ZIG build test-run-translated-c -fqemu -fwasmtime
|
||||
$ZIG build docs -fqemu -fwasmtime
|
||||
$ZIG build # test building self-hosted without LLVM
|
||||
$ZIG build -Dtarget=arm-linux-musleabihf # test building self-hosted for 32-bit arm
|
||||
$ZIG build test-fmt -fqemu -fwasmtime
|
||||
$ZIG build test-stage2 -fqemu -fwasmtime
|
||||
|
||||
|
||||
@@ -1590,6 +1590,8 @@ pub const LibExeObjStep = struct {
|
||||
|
||||
want_lto: ?bool = null,
|
||||
use_stage1: ?bool = null,
|
||||
use_llvm: ?bool = null,
|
||||
ofmt: ?std.Target.ObjectFormat = null,
|
||||
|
||||
output_path_source: GeneratedFile,
|
||||
output_lib_path_source: GeneratedFile,
|
||||
@@ -2351,6 +2353,18 @@ pub const LibExeObjStep = struct {
|
||||
}
|
||||
}
|
||||
|
||||
if (self.use_llvm) |use_llvm| {
|
||||
if (use_llvm) {
|
||||
try zig_args.append("-fLLVM");
|
||||
} else {
|
||||
try zig_args.append("-fno-LLVM");
|
||||
}
|
||||
}
|
||||
|
||||
if (self.ofmt) |ofmt| {
|
||||
try zig_args.append(try std.fmt.allocPrint(builder.allocator, "-ofmt={s}", .{@tagName(ofmt)}));
|
||||
}
|
||||
|
||||
if (self.entry_symbol_name) |entry| {
|
||||
try zig_args.append("--entry");
|
||||
try zig_args.append(entry);
|
||||
|
||||
179
test/tests.zig
179
test/tests.zig
@@ -34,6 +34,7 @@ const TestTarget = struct {
|
||||
link_libc: bool = false,
|
||||
single_threaded: bool = false,
|
||||
disable_native: bool = false,
|
||||
backend: ?std.builtin.CompilerBackend = null,
|
||||
};
|
||||
|
||||
const test_targets = blk: {
|
||||
@@ -42,15 +43,73 @@ const test_targets = blk: {
|
||||
// lot of branches)
|
||||
@setEvalBranchQuota(50000);
|
||||
break :blk [_]TestTarget{
|
||||
TestTarget{},
|
||||
TestTarget{
|
||||
.{},
|
||||
.{
|
||||
.link_libc = true,
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.single_threaded = true,
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.link_libc = true,
|
||||
.backend = .stage2_c,
|
||||
},
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .x86_64,
|
||||
.os_tag = .linux,
|
||||
.abi = .none,
|
||||
},
|
||||
.backend = .stage2_x86_64,
|
||||
},
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .aarch64,
|
||||
.os_tag = .linux,
|
||||
},
|
||||
.backend = .stage2_aarch64,
|
||||
},
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .wasm32,
|
||||
.os_tag = .wasi,
|
||||
},
|
||||
.single_threaded = true,
|
||||
.backend = .stage2_wasm,
|
||||
},
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .arm,
|
||||
.os_tag = .linux,
|
||||
},
|
||||
.backend = .stage2_wasm,
|
||||
},
|
||||
.{
|
||||
.target = CrossTarget.parse(.{
|
||||
.arch_os_abi = "arm-linux-none",
|
||||
.cpu_features = "generic+v8a",
|
||||
}) catch unreachable,
|
||||
.backend = .stage2_arm,
|
||||
},
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .aarch64,
|
||||
.os_tag = .macos,
|
||||
.abi = .gnu,
|
||||
},
|
||||
.backend = .stage2_aarch64,
|
||||
},
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .x86_64,
|
||||
.os_tag = .macos,
|
||||
.abi = .gnu,
|
||||
},
|
||||
.backend = .stage2_x86_64,
|
||||
},
|
||||
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .wasm32,
|
||||
.os_tag = .wasi,
|
||||
@@ -58,7 +117,7 @@ const test_targets = blk: {
|
||||
.link_libc = false,
|
||||
.single_threaded = true,
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .wasm32,
|
||||
.os_tag = .wasi,
|
||||
@@ -67,14 +126,14 @@ const test_targets = blk: {
|
||||
.single_threaded = true,
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .x86_64,
|
||||
.os_tag = .linux,
|
||||
.abi = .none,
|
||||
},
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .x86_64,
|
||||
.os_tag = .linux,
|
||||
@@ -82,7 +141,7 @@ const test_targets = blk: {
|
||||
},
|
||||
.link_libc = true,
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .x86_64,
|
||||
.os_tag = .linux,
|
||||
@@ -91,14 +150,14 @@ const test_targets = blk: {
|
||||
.link_libc = true,
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .i386,
|
||||
.os_tag = .linux,
|
||||
.abi = .none,
|
||||
},
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .i386,
|
||||
.os_tag = .linux,
|
||||
@@ -106,7 +165,7 @@ const test_targets = blk: {
|
||||
},
|
||||
.link_libc = true,
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .i386,
|
||||
.os_tag = .linux,
|
||||
@@ -115,14 +174,14 @@ const test_targets = blk: {
|
||||
.link_libc = true,
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .aarch64,
|
||||
.os_tag = .linux,
|
||||
.abi = .none,
|
||||
},
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .aarch64,
|
||||
.os_tag = .linux,
|
||||
@@ -130,7 +189,7 @@ const test_targets = blk: {
|
||||
},
|
||||
.link_libc = true,
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .aarch64,
|
||||
.os_tag = .linux,
|
||||
@@ -138,7 +197,7 @@ const test_targets = blk: {
|
||||
},
|
||||
.link_libc = true,
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .aarch64,
|
||||
.os_tag = .windows,
|
||||
@@ -147,13 +206,13 @@ const test_targets = blk: {
|
||||
.link_libc = true,
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = CrossTarget.parse(.{
|
||||
.arch_os_abi = "arm-linux-none",
|
||||
.cpu_features = "generic+v8a",
|
||||
}) catch unreachable,
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.target = CrossTarget.parse(.{
|
||||
.arch_os_abi = "arm-linux-musleabihf",
|
||||
.cpu_features = "generic+v8a",
|
||||
@@ -161,7 +220,7 @@ const test_targets = blk: {
|
||||
.link_libc = true,
|
||||
},
|
||||
// https://github.com/ziglang/zig/issues/3287
|
||||
//TestTarget{
|
||||
//.{
|
||||
// .target = CrossTarget.parse(.{
|
||||
// .arch_os_abi = "arm-linux-gnueabihf",
|
||||
// .cpu_features = "generic+v8a",
|
||||
@@ -169,7 +228,7 @@ const test_targets = blk: {
|
||||
// .link_libc = true,
|
||||
//},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .mips,
|
||||
.os_tag = .linux,
|
||||
@@ -177,7 +236,7 @@ const test_targets = blk: {
|
||||
},
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .mips,
|
||||
.os_tag = .linux,
|
||||
@@ -187,7 +246,7 @@ const test_targets = blk: {
|
||||
},
|
||||
|
||||
// https://github.com/ziglang/zig/issues/4927
|
||||
//TestTarget{
|
||||
//.{
|
||||
// .target = .{
|
||||
// .cpu_arch = .mips,
|
||||
// .os_tag = .linux,
|
||||
@@ -196,7 +255,7 @@ const test_targets = blk: {
|
||||
// .link_libc = true,
|
||||
//},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .mipsel,
|
||||
.os_tag = .linux,
|
||||
@@ -204,7 +263,7 @@ const test_targets = blk: {
|
||||
},
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .mipsel,
|
||||
.os_tag = .linux,
|
||||
@@ -214,7 +273,7 @@ const test_targets = blk: {
|
||||
},
|
||||
|
||||
// https://github.com/ziglang/zig/issues/4927
|
||||
//TestTarget{
|
||||
//.{
|
||||
// .target = .{
|
||||
// .cpu_arch = .mipsel,
|
||||
// .os_tag = .linux,
|
||||
@@ -223,14 +282,14 @@ const test_targets = blk: {
|
||||
// .link_libc = true,
|
||||
//},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .powerpc,
|
||||
.os_tag = .linux,
|
||||
.abi = .none,
|
||||
},
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .powerpc,
|
||||
.os_tag = .linux,
|
||||
@@ -239,7 +298,7 @@ const test_targets = blk: {
|
||||
.link_libc = true,
|
||||
},
|
||||
// https://github.com/ziglang/zig/issues/2256
|
||||
//TestTarget{
|
||||
//.{
|
||||
// .target = .{
|
||||
// .cpu_arch = .powerpc,
|
||||
// .os_tag = .linux,
|
||||
@@ -248,7 +307,7 @@ const test_targets = blk: {
|
||||
// .link_libc = true,
|
||||
//},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .riscv64,
|
||||
.os_tag = .linux,
|
||||
@@ -256,7 +315,7 @@ const test_targets = blk: {
|
||||
},
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .riscv64,
|
||||
.os_tag = .linux,
|
||||
@@ -266,7 +325,7 @@ const test_targets = blk: {
|
||||
},
|
||||
|
||||
// https://github.com/ziglang/zig/issues/3340
|
||||
//TestTarget{
|
||||
//.{
|
||||
// .target = .{
|
||||
// .cpu_arch = .riscv64,
|
||||
// .os = .linux,
|
||||
@@ -275,7 +334,7 @@ const test_targets = blk: {
|
||||
// .link_libc = true,
|
||||
//},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .x86_64,
|
||||
.os_tag = .macos,
|
||||
@@ -283,7 +342,7 @@ const test_targets = blk: {
|
||||
},
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .aarch64,
|
||||
.os_tag = .macos,
|
||||
@@ -291,7 +350,7 @@ const test_targets = blk: {
|
||||
},
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .i386,
|
||||
.os_tag = .windows,
|
||||
@@ -299,7 +358,7 @@ const test_targets = blk: {
|
||||
},
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .x86_64,
|
||||
.os_tag = .windows,
|
||||
@@ -307,7 +366,7 @@ const test_targets = blk: {
|
||||
},
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .i386,
|
||||
.os_tag = .windows,
|
||||
@@ -316,7 +375,7 @@ const test_targets = blk: {
|
||||
.link_libc = true,
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.target = .{
|
||||
.cpu_arch = .x86_64,
|
||||
.os_tag = .windows,
|
||||
@@ -326,38 +385,38 @@ const test_targets = blk: {
|
||||
},
|
||||
|
||||
// Do the release tests last because they take a long time
|
||||
TestTarget{
|
||||
.{
|
||||
.mode = .ReleaseFast,
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.link_libc = true,
|
||||
.mode = .ReleaseFast,
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.mode = .ReleaseFast,
|
||||
.single_threaded = true,
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.mode = .ReleaseSafe,
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.link_libc = true,
|
||||
.mode = .ReleaseSafe,
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.mode = .ReleaseSafe,
|
||||
.single_threaded = true,
|
||||
},
|
||||
|
||||
TestTarget{
|
||||
.{
|
||||
.mode = .ReleaseSmall,
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.link_libc = true,
|
||||
.mode = .ReleaseSmall,
|
||||
},
|
||||
TestTarget{
|
||||
.{
|
||||
.mode = .ReleaseSmall,
|
||||
.single_threaded = true,
|
||||
},
|
||||
@@ -524,6 +583,9 @@ pub fn addPkgTests(
|
||||
skip_single_threaded: bool,
|
||||
skip_non_native: bool,
|
||||
skip_libc: bool,
|
||||
skip_stage1: bool,
|
||||
skip_stage2: bool,
|
||||
is_stage1: bool,
|
||||
) *build.Step {
|
||||
const step = b.step(b.fmt("test-{s}", .{name}), desc);
|
||||
|
||||
@@ -549,6 +611,11 @@ pub fn addPkgTests(
|
||||
continue;
|
||||
}
|
||||
|
||||
if (test_target.backend) |backend| switch (backend) {
|
||||
.stage1 => if (skip_stage1) continue,
|
||||
else => if (skip_stage2) continue,
|
||||
} else if (is_stage1 and skip_stage1) continue;
|
||||
|
||||
const want_this_mode = for (modes) |m| {
|
||||
if (m == test_target.mode) break true;
|
||||
} else false;
|
||||
@@ -565,12 +632,14 @@ pub fn addPkgTests(
|
||||
|
||||
const these_tests = b.addTest(root_src);
|
||||
const single_threaded_txt = if (test_target.single_threaded) "single" else "multi";
|
||||
these_tests.setNamePrefix(b.fmt("{s}-{s}-{s}-{s}-{s} ", .{
|
||||
const backend_txt = if (test_target.backend) |backend| @tagName(backend) else "default";
|
||||
these_tests.setNamePrefix(b.fmt("{s}-{s}-{s}-{s}-{s}-{s} ", .{
|
||||
name,
|
||||
triple_prefix,
|
||||
@tagName(test_target.mode),
|
||||
libc_prefix,
|
||||
single_threaded_txt,
|
||||
backend_txt,
|
||||
}));
|
||||
these_tests.single_threaded = test_target.single_threaded;
|
||||
these_tests.setFilter(test_filter);
|
||||
@@ -581,6 +650,24 @@ pub fn addPkgTests(
|
||||
}
|
||||
these_tests.overrideZigLibDir("lib");
|
||||
these_tests.addIncludePath("test");
|
||||
if (test_target.backend) |backend| switch (backend) {
|
||||
.stage1 => {
|
||||
these_tests.use_stage1 = true;
|
||||
},
|
||||
.stage2_llvm => {
|
||||
these_tests.use_stage1 = false;
|
||||
these_tests.use_llvm = true;
|
||||
},
|
||||
.stage2_c => {
|
||||
these_tests.use_stage1 = false;
|
||||
these_tests.use_llvm = false;
|
||||
these_tests.ofmt = .c;
|
||||
},
|
||||
else => {
|
||||
these_tests.use_stage1 = false;
|
||||
these_tests.use_llvm = false;
|
||||
},
|
||||
};
|
||||
|
||||
step.dependOn(&these_tests.step);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user