From 125a9aa82b55f8d1e2b6d08d61e697e6dfacbba6 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 6 Jun 2025 12:50:14 -0700 Subject: [PATCH] restore debug llvm CI coverage and reduce redundant coverage in slow runs to save time --- .github/workflows/ci.yaml | 8 ++++ build.zig | 36 +++++++++++++++++- ci/x86_64-linux-debug-llvm.sh | 70 +++++++++++++++++++++++++++++++++++ ci/x86_64-linux-debug.sh | 42 ++------------------- test/src/Debugger.zig | 1 - test/tests.zig | 21 +++++++++++ 6 files changed, 138 insertions(+), 40 deletions(-) create mode 100644 ci/x86_64-linux-debug-llvm.sh diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6e3ab5bd57..fd07b9add4 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -20,6 +20,14 @@ jobs: uses: actions/checkout@v4 - name: Build and Test run: sh ci/x86_64-linux-debug.sh + x86_64-linux-debug-llvm: + timeout-minutes: 540 + runs-on: [self-hosted, Linux, x86_64] + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Build and Test + run: sh ci/x86_64-linux-debug-llvm.sh x86_64-linux-release: timeout-minutes: 540 runs-on: [self-hosted, Linux, x86_64] diff --git a/build.zig b/build.zig index 00aed04e80..c35a1632f9 100644 --- a/build.zig +++ b/build.zig @@ -92,6 +92,11 @@ pub fn build(b: *std.Build) !void { const skip_single_threaded = b.option(bool, "skip-single-threaded", "Main test suite skips tests that are single-threaded") orelse false; const skip_translate_c = b.option(bool, "skip-translate-c", "Main test suite skips translate-c tests") orelse false; const skip_run_translated_c = b.option(bool, "skip-run-translated-c", "Main test suite skips run-translated-c tests") orelse false; + const skip_freebsd = b.option(bool, "skip-freebsd", "Main test suite skips targets with freebsd OS") orelse false; + const skip_netbsd = b.option(bool, "skip-netbsd", "Main test suite skips targets with netbsd OS") orelse false; + const skip_windows = b.option(bool, "skip-windows", "Main test suite skips targets with windows OS") orelse false; + const skip_macos = b.option(bool, "skip-macos", "Main test suite skips targets with macos OS") orelse false; + const skip_linux = b.option(bool, "skip-linux", "Main test suite skips targets with linux OS") orelse false; const only_install_lib_files = b.option(bool, "lib-files-only", "Only install library files") orelse false; @@ -435,6 +440,11 @@ pub fn build(b: *std.Build) !void { .include_paths = &.{}, .skip_single_threaded = skip_single_threaded, .skip_non_native = skip_non_native, + .skip_freebsd = skip_freebsd, + .skip_netbsd = skip_netbsd, + .skip_windows = skip_windows, + .skip_macos = skip_macos, + .skip_linux = skip_linux, .skip_libc = skip_libc, .use_llvm = use_llvm, // 2923515904 was observed on an x86_64-linux-gnu host. @@ -452,6 +462,11 @@ pub fn build(b: *std.Build) !void { .include_paths = &.{"test/c_import"}, .skip_single_threaded = true, .skip_non_native = skip_non_native, + .skip_freebsd = skip_freebsd, + .skip_netbsd = skip_netbsd, + .skip_windows = skip_windows, + .skip_macos = skip_macos, + .skip_linux = skip_linux, .skip_libc = skip_libc, .use_llvm = use_llvm, })); @@ -467,6 +482,11 @@ pub fn build(b: *std.Build) !void { .include_paths = &.{}, .skip_single_threaded = true, .skip_non_native = skip_non_native, + .skip_freebsd = skip_freebsd, + .skip_netbsd = skip_netbsd, + .skip_windows = skip_windows, + .skip_macos = skip_macos, + .skip_linux = skip_linux, .skip_libc = true, .use_llvm = use_llvm, .no_builtin = true, @@ -483,6 +503,11 @@ pub fn build(b: *std.Build) !void { .include_paths = &.{}, .skip_single_threaded = true, .skip_non_native = skip_non_native, + .skip_freebsd = skip_freebsd, + .skip_netbsd = skip_netbsd, + .skip_windows = skip_windows, + .skip_macos = skip_macos, + .skip_linux = skip_linux, .skip_libc = true, .use_llvm = use_llvm, .no_builtin = true, @@ -499,6 +524,11 @@ pub fn build(b: *std.Build) !void { .include_paths = &.{}, .skip_single_threaded = skip_single_threaded, .skip_non_native = skip_non_native, + .skip_freebsd = skip_freebsd, + .skip_netbsd = skip_netbsd, + .skip_windows = skip_windows, + .skip_macos = skip_macos, + .skip_linux = skip_linux, .skip_libc = skip_libc, .use_llvm = use_llvm, // I observed a value of 5605064704 on the M2 CI. @@ -536,6 +566,11 @@ pub fn build(b: *std.Build) !void { test_step.dependOn(tests.addCAbiTests(b, .{ .test_target_filters = test_target_filters, .skip_non_native = skip_non_native, + .skip_freebsd = skip_freebsd, + .skip_netbsd = skip_netbsd, + .skip_windows = skip_windows, + .skip_macos = skip_macos, + .skip_linux = skip_linux, .skip_release = skip_release, })); test_step.dependOn(tests.addLinkTests(b, enable_macos_sdk, enable_ios_sdk, enable_symlinks_windows)); @@ -549,7 +584,6 @@ pub fn build(b: *std.Build) !void { .lldb = b.option([]const u8, "lldb", "path to lldb binary"), .optimize_modes = optimization_modes, .skip_single_threaded = skip_single_threaded, - .skip_non_native = skip_non_native, .skip_libc = skip_libc, })) |test_debugger_step| test_step.dependOn(test_debugger_step); if (tests.addLlvmIrTests(b, .{ diff --git a/ci/x86_64-linux-debug-llvm.sh b/ci/x86_64-linux-debug-llvm.sh new file mode 100644 index 0000000000..dfb440573f --- /dev/null +++ b/ci/x86_64-linux-debug-llvm.sh @@ -0,0 +1,70 @@ +#!/bin/sh + +# Requires cmake ninja-build + +set -x +set -e + +ARCH="$(uname -m)" +TARGET="$ARCH-linux-musl" +MCPU="baseline" +CACHE_BASENAME="zig+llvm+lld+clang-$TARGET-0.15.0-dev.233+7c85dc460" +PREFIX="$HOME/deps/$CACHE_BASENAME" +ZIG="$PREFIX/bin/zig" + +export PATH="$HOME/deps/wasmtime-v29.0.0-$ARCH-linux:$HOME/deps/qemu-linux-x86_64-9.2.0-rc1/bin:$HOME/local/bin:$PATH" + +# Make the `zig version` number consistent. +# This will affect the cmake command below. +git fetch --unshallow || true +git fetch --tags + +# Override the cache directories because they won't actually help other CI runs +# which will be testing alternate versions of zig, and ultimately would just +# fill up space on the hard drive for no reason. +export ZIG_GLOBAL_CACHE_DIR="$PWD/zig-global-cache" +export ZIG_LOCAL_CACHE_DIR="$PWD/zig-local-cache" + +mkdir build-debug-llvm +cd build-debug-llvm + +export CC="$ZIG cc -target $TARGET -mcpu=$MCPU" +export CXX="$ZIG c++ -target $TARGET -mcpu=$MCPU" + +cmake .. \ + -DCMAKE_INSTALL_PREFIX="stage3-debug" \ + -DCMAKE_PREFIX_PATH="$PREFIX" \ + -DCMAKE_BUILD_TYPE=Debug \ + -DZIG_TARGET_TRIPLE="$TARGET" \ + -DZIG_TARGET_MCPU="$MCPU" \ + -DZIG_STATIC=ON \ + -DZIG_NO_LIB=ON \ + -DZIG_EXTRA_BUILD_ARGS="-Duse-llvm=true" \ + -GNinja + +# Now cmake will use zig as the C/C++ compiler. We reset the environment variables +# so that installation and testing do not get affected by them. +unset CC +unset CXX + +ninja install + +# simultaneously test building self-hosted without LLVM and with 32-bit arm +stage3-debug/bin/zig build \ + -Dtarget=arm-linux-musleabihf \ + -Dno-lib + +stage3-debug/bin/zig build test docs \ + --maxrss 21000000000 \ + -Dlldb=$HOME/deps/lldb-zig/Debug-e0a42bb34/bin/lldb \ + -fqemu \ + -fwasmtime \ + -Dstatic-llvm \ + -Dskip-freebsd \ + -Dskip-netbsd \ + -Dskip-windows \ + -Dskip-macos \ + -Dtarget=native-native-musl \ + --search-prefix "$PREFIX" \ + --zig-lib-dir "$PWD/../lib" \ + -Denable-superhtml diff --git a/ci/x86_64-linux-debug.sh b/ci/x86_64-linux-debug.sh index 3974f07a95..2ac3893c33 100755 --- a/ci/x86_64-linux-debug.sh +++ b/ci/x86_64-linux-debug.sh @@ -25,12 +25,6 @@ git fetch --tags export ZIG_GLOBAL_CACHE_DIR="$PWD/zig-global-cache" export ZIG_LOCAL_CACHE_DIR="$PWD/zig-local-cache" -# Test building from source without LLVM. -cc -o bootstrap bootstrap.c -./bootstrap -./zig2 build -Dno-lib -./zig-out/bin/zig test test/behavior.zig - mkdir build-debug cd build-debug @@ -65,39 +59,11 @@ stage3-debug/bin/zig build test docs \ -fqemu \ -fwasmtime \ -Dstatic-llvm \ + -Dskip-freebsd \ + -Dskip-netbsd \ + -Dskip-windows \ + -Dskip-macos \ -Dtarget=native-native-musl \ --search-prefix "$PREFIX" \ --zig-lib-dir "$PWD/../lib" \ -Denable-superhtml - -# Ensure that updating the wasm binary from this commit will result in a viable build. -stage3-debug/bin/zig build update-zig1 - -mkdir ../build-new -cd ../build-new - -export CC="$ZIG cc -target $TARGET -mcpu=$MCPU" -export CXX="$ZIG c++ -target $TARGET -mcpu=$MCPU" - -cmake .. \ - -DCMAKE_PREFIX_PATH="$PREFIX" \ - -DCMAKE_BUILD_TYPE=Debug \ - -DZIG_TARGET_TRIPLE="$TARGET" \ - -DZIG_TARGET_MCPU="$MCPU" \ - -DZIG_STATIC=ON \ - -DZIG_NO_LIB=ON \ - -GNinja - -unset CC -unset CXX - -ninja install - -stage3/bin/zig test ../test/behavior.zig -stage3/bin/zig build -p stage4 \ - -Dstatic-llvm \ - -Dtarget=native-native-musl \ - -Dno-lib \ - --search-prefix "$PREFIX" \ - --zig-lib-dir "$PWD/../lib" -stage4/bin/zig test ../test/behavior.zig diff --git a/test/src/Debugger.zig b/test/src/Debugger.zig index ff0f2ae69c..08202f3130 100644 --- a/test/src/Debugger.zig +++ b/test/src/Debugger.zig @@ -9,7 +9,6 @@ pub const Options = struct { lldb: ?[]const u8, optimize_modes: []const std.builtin.OptimizeMode, skip_single_threaded: bool, - skip_non_native: bool, skip_libc: bool, }; diff --git a/test/tests.zig b/test/tests.zig index ab42dbba26..6b4e219079 100644 --- a/test/tests.zig +++ b/test/tests.zig @@ -2273,6 +2273,11 @@ const ModuleTestOptions = struct { include_paths: []const []const u8, skip_single_threaded: bool, skip_non_native: bool, + skip_freebsd: bool, + skip_netbsd: bool, + skip_windows: bool, + skip_macos: bool, + skip_linux: bool, skip_libc: bool, use_llvm: ?bool = null, max_rss: usize = 0, @@ -2295,6 +2300,12 @@ pub fn addModuleTests(b: *std.Build, options: ModuleTestOptions) *Step { if (options.skip_non_native and !test_target.target.isNative()) continue; + if (options.skip_freebsd and test_target.target.os_tag == .freebsd) continue; + if (options.skip_netbsd and test_target.target.os_tag == .netbsd) continue; + if (options.skip_windows and test_target.target.os_tag == .windows) continue; + if (options.skip_macos and test_target.target.os_tag == .macos) continue; + if (options.skip_linux and test_target.target.os_tag == .linux) continue; + const resolved_target = b.resolveTargetQuery(test_target.target); const target = resolved_target.result; const triple_txt = target.zigTriple(b.allocator) catch @panic("OOM"); @@ -2501,6 +2512,11 @@ pub fn addModuleTests(b: *std.Build, options: ModuleTestOptions) *Step { const CAbiTestOptions = struct { test_target_filters: []const []const u8, skip_non_native: bool, + skip_freebsd: bool, + skip_netbsd: bool, + skip_windows: bool, + skip_macos: bool, + skip_linux: bool, skip_release: bool, }; @@ -2514,6 +2530,11 @@ pub fn addCAbiTests(b: *std.Build, options: CAbiTestOptions) *Step { for (c_abi_targets) |c_abi_target| { if (options.skip_non_native and !c_abi_target.target.isNative()) continue; + if (options.skip_freebsd and c_abi_target.target.os_tag == .freebsd) continue; + if (options.skip_netbsd and c_abi_target.target.os_tag == .netbsd) continue; + if (options.skip_windows and c_abi_target.target.os_tag == .windows) continue; + if (options.skip_macos and c_abi_target.target.os_tag == .macos) continue; + if (options.skip_linux and c_abi_target.target.os_tag == .linux) continue; const resolved_target = b.resolveTargetQuery(c_abi_target.target); const target = resolved_target.result;