zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit fc3142aa9a54f014c07aac6ac2aab75f57c5a75f (tree)
parent c37afa2811677b7602cdde8120049358c0d8c467
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Thu,  1 Dec 2022 00:38:21 -0700

Merge branch 'ci-add-debug-aarch64-linux'

Diffstat:
M.github/workflows/ci.yaml | 41+++++++++++++++++++++++------------------
Aci/aarch64-linux-debug.sh | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Rci/linux/build-aarch64.sh -> ci/aarch64-linux-release.sh | 0
Rci/macos/build-aarch64.sh -> ci/aarch64-macos.sh | 0
Dci/linux/build-x86_64-debug.sh | 66------------------------------------------------------------------
Aci/x86_64-linux-debug.sh | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Rci/linux/build-x86_64-release.sh -> ci/x86_64-linux-release.sh | 0
Rci/macos/build-x86_64.sh -> ci/x86_64-macos.sh | 0
Rci/windows/build.ps1 -> ci/x86_64-windows.ps1 | 0
Mdoc/langref.html.in | 22+++++++++++++++-------
10 files changed, 169 insertions(+), 91 deletions(-)

diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml @@ -15,41 +15,37 @@ 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 - x86_64-macos: - runs-on: "macos-11" - env: - ARCH: "x86_64" + 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: ./ci/macos/build-x86_64.sh - x86_64-windows: - runs-on: windows-latest - env: - ARCH: "x86_64" + 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: ./ci/windows/build.ps1 - aarch64-linux: - runs-on: [self-hosted, Linux, aarch64] + run: sh ci/aarch64-linux-release.sh + x86_64-macos: + runs-on: "macos-11" + env: + ARCH: "x86_64" 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 @@ -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 diff --git a/ci/macos/build-aarch64.sh b/ci/aarch64-macos.sh diff --git a/ci/linux/build-x86_64-debug.sh b/ci/linux/build-x86_64-debug.sh @@ -1,66 +0,0 @@ -#!/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:$HOME/deps/qemu-linux-x86_64-6.1.0.1/bin:$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 \ - --exclude ../build-release - -# simultaneously test building self-hosted without LLVM and with 32-bit arm -stage3-debug/bin/zig build -Dtarget=arm-linux-musleabihf - -stage3-debug/bin/zig build test docs \ - -fqemu \ - -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/x86_64-linux-debug.sh b/ci/x86_64-linux-debug.sh @@ -0,0 +1,65 @@ +#!/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:$HOME/deps/qemu-linux-x86_64-6.1.0.1/bin:$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 + +stage3-debug/bin/zig build test docs \ + -fqemu \ + -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-x86_64-release.sh b/ci/x86_64-linux-release.sh diff --git a/ci/macos/build-x86_64.sh b/ci/x86_64-macos.sh diff --git a/ci/windows/build.ps1 b/ci/x86_64-windows.ps1 diff --git 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? </p> - {#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#} <p> - 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. + </p> + <p> + However, there is a <a href="https://github.com/ziglang/zig/issues/13724">design + flaw in the compiler</a> 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. </p> <p> - What if we fix the base case, but put the wrong value in the {#syntax#}expect{#endsyntax#} line? + What if we fix the base case, but put the wrong value in the + {#syntax#}expect{#endsyntax#} line? </p> {#code_begin|test_err|reached unreachable#} const assert = @import("std").debug.assert;