diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 7a278e070e..52b047dc36 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -15,16 +15,28 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Build and Test - run: sh ./ci/linux/build-x86_64-debug.sh - - name: Print Version - run: echo "$(build-debug/stage3-debug/bin/zig version)" + run: sh ci/x86_64-linux-debug.sh x86_64-linux-release: runs-on: [self-hosted, Linux, x86_64] steps: - name: Checkout uses: actions/checkout@v3 - name: Build and Test - run: sh ./ci/linux/build-x86_64-release.sh + run: sh ci/x86_64-linux-release.sh + aarch64-linux-debug: + runs-on: [self-hosted, Linux, aarch64] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Build and Test + run: sh ci/aarch64-linux-debug.sh + aarch64-linux-release: + runs-on: [self-hosted, Linux, aarch64] + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Build and Test + run: sh ci/aarch64-linux-release.sh x86_64-macos: runs-on: "macos-11" env: @@ -33,23 +45,7 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Build and Test - run: ./ci/macos/build-x86_64.sh - x86_64-windows: - runs-on: windows-latest - env: - ARCH: "x86_64" - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Build and Test - run: ./ci/windows/build.ps1 - aarch64-linux: - runs-on: [self-hosted, Linux, aarch64] - steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Build and Test - run: sh ./ci/linux/build-aarch64.sh + run: ci/x86_64-macos.sh aarch64-macos: runs-on: [self-hosted, macOS, aarch64] env: @@ -58,4 +54,13 @@ jobs: - name: Checkout uses: actions/checkout@v3 - name: Build and Test - run: ./ci/macos/build-aarch64.sh + run: ci/aarch64-macos.sh + x86_64-windows: + runs-on: windows-latest + env: + ARCH: "x86_64" + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Build and Test + run: ci/x86_64-windows.ps1 diff --git a/ci/aarch64-linux-debug.sh b/ci/aarch64-linux-debug.sh new file mode 100644 index 0000000000..13bcef5aa9 --- /dev/null +++ b/ci/aarch64-linux-debug.sh @@ -0,0 +1,66 @@ +#!/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.11.0-dev.256+271cc52a1" +PREFIX="$HOME/deps/$CACHE_BASENAME" +ZIG="$PREFIX/bin/zig" + +export PATH="$HOME/deps/wasmtime-v2.0.2-$ARCH-linux:$PATH" + +# Make the `zig version` number consistent. +# This will affect the cmake command below. +git config core.abbrev 9 +git fetch --unshallow || true +git fetch --tags + +export CC="$ZIG cc -target $TARGET -mcpu=$MCPU" +export CXX="$ZIG c++ -target $TARGET -mcpu=$MCPU" + +rm -rf build-debug +mkdir build-debug +cd build-debug +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 \ + -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 + +echo "Looking for non-conforming code formatting..." +stage3-debug/bin/zig fmt --check .. \ + --exclude ../test/cases/ \ + --exclude ../build-debug + +# simultaneously test building self-hosted without LLVM and with 32-bit arm +stage3-debug/bin/zig build -Dtarget=arm-linux-musleabihf + +# TODO: add -fqemu back to this line + +stage3-debug/bin/zig build test docs \ + -fwasmtime \ + -Dstatic-llvm \ + -Dtarget=native-native-musl \ + --search-prefix "$PREFIX" \ + --zig-lib-dir "$(pwd)/../lib" + +# Look for HTML errors. +tidy --drop-empty-elements no -qe ../zig-cache/langref.html + +# Produce the experimental std lib documentation. +stage3-debug/bin/zig test ../lib/std/std.zig -femit-docs -fno-emit-bin --zig-lib-dir ../lib diff --git a/ci/linux/build-aarch64.sh b/ci/aarch64-linux-release.sh similarity index 100% rename from ci/linux/build-aarch64.sh rename to ci/aarch64-linux-release.sh diff --git a/ci/macos/build-aarch64.sh b/ci/aarch64-macos.sh similarity index 100% rename from ci/macos/build-aarch64.sh rename to ci/aarch64-macos.sh diff --git a/ci/linux/build-x86_64-debug.sh b/ci/x86_64-linux-debug.sh similarity index 96% rename from ci/linux/build-x86_64-debug.sh rename to ci/x86_64-linux-debug.sh index b6e98efec2..84529ab471 100755 --- a/ci/linux/build-x86_64-debug.sh +++ b/ci/x86_64-linux-debug.sh @@ -45,8 +45,7 @@ ninja install echo "Looking for non-conforming code formatting..." stage3-debug/bin/zig fmt --check .. \ --exclude ../test/cases/ \ - --exclude ../build-debug \ - --exclude ../build-release + --exclude ../build-debug # simultaneously test building self-hosted without LLVM and with 32-bit arm stage3-debug/bin/zig build -Dtarget=arm-linux-musleabihf diff --git a/ci/linux/build-x86_64-release.sh b/ci/x86_64-linux-release.sh similarity index 100% rename from ci/linux/build-x86_64-release.sh rename to ci/x86_64-linux-release.sh diff --git a/ci/macos/build-x86_64.sh b/ci/x86_64-macos.sh similarity index 100% rename from ci/macos/build-x86_64.sh rename to ci/x86_64-macos.sh diff --git a/ci/windows/build.ps1 b/ci/x86_64-windows.ps1 similarity index 100% rename from ci/windows/build.ps1 rename to ci/x86_64-windows.ps1 diff --git a/doc/langref.html.in b/doc/langref.html.in index 1a7ef8f563..bd81484d6f 100644 --- a/doc/langref.html.in +++ b/doc/langref.html.in @@ -7029,8 +7029,7 @@ test "fibonacci" { undefined behavior, which is always a compile error if the compiler knows it happened. But what would have happened if we used a signed integer?
- {#code_begin|test_err|evaluation exceeded 1000 backwards branches#} - {#backend_stage1#} + {#code_begin|syntax#} const assert = @import("std").debug.assert; fn fibonacci(index: i32) i32 { @@ -7045,13 +7044,22 @@ test "fibonacci" { } {#code_end#}- The compiler noticed that evaluating this function at compile-time took a long time, - and thus emitted a compile error and gave up. If the programmer wants to increase - the budget for compile-time computation, they can use a built-in function called - {#link|@setEvalBranchQuota#} to change the default number 1000 to something else. + The compiler is supposed to notice that evaluating this function at + compile-time took more than 1000 branches, and thus emits an error and + gives up. If the programmer wants to increase the budget for compile-time + computation, they can use a built-in function called + {#link|@setEvalBranchQuota#} to change the default number 1000 to + something else.
- What if we fix the base case, but put the wrong value in the {#syntax#}expect{#endsyntax#} line? + However, there is a design + flaw in the compiler causing it to stack overflow instead of having the proper + behavior here. I'm terribly sorry about that. I hope to get this resolved + before the next release. +
++ What if we fix the base case, but put the wrong value in the + {#syntax#}expect{#endsyntax#} line?
{#code_begin|test_err|reached unreachable#} const assert = @import("std").debug.assert;