| name: GCC Rust build and test |
| |
| on: |
| push: |
| branches: |
| - trying |
| - staging |
| pull_request: |
| branches: [ master ] |
| merge_group: |
| |
| env: |
| ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true |
| |
| jobs: |
| build-and-check-ubuntu-64bit: |
| |
| env: |
| # Force locale, in particular for reproducible results re '.github/log_expected_warnings' (see below). |
| LC_ALL: C.UTF-8 |
| |
| runs-on: ubuntu-22.04 |
| |
| steps: |
| - uses: actions/checkout@v4 |
| |
| - name: Install Deps |
| run: | |
| sudo apt-get update; |
| sudo apt-get install -y \ |
| automake \ |
| autoconf \ |
| libtool \ |
| autogen \ |
| bison \ |
| flex \ |
| libgmp3-dev \ |
| libmpfr-dev \ |
| libmpc-dev \ |
| build-essential \ |
| gcc-multilib \ |
| g++-multilib \ |
| dejagnu; |
| # install Rust directly using rustup |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain=1.72.0; |
| |
| - name: Make Source Read-Only |
| run: chmod -R a-w ./* |
| |
| - name: Configure |
| run: | |
| mkdir -p gccrs-build; |
| cd gccrs-build; |
| ../configure \ |
| --enable-languages=rust \ |
| --disable-bootstrap \ |
| --enable-multilib |
| |
| - name: Build |
| shell: bash |
| run: | |
| cd gccrs-build; \ |
| # Add cargo to our path quickly |
| . "$HOME/.cargo/env"; \ |
| # Build without network access |
| unshare --net --ipc -r /bin/bash -c "make -Otarget -j $(nproc) 2>&1 | tee log ; exit \${PIPESTATUS[0]}" |
| |
| - name: Check for new warnings |
| run: | |
| cd gccrs-build |
| < log grep 'warning: ' | sort > log_warnings |
| if diff -U0 ../.github/log_expected_warnings log_warnings; then |
| : |
| else |
| echo 'See <https://github.com/Rust-GCC/gccrs/pull/1026>.' |
| exit 1 |
| fi >&2 |
| |
| - name: Run Tests |
| run: | |
| cd gccrs-build; \ |
| make check-rust RUNTESTFLAGS="--target_board=unix\{-m64}" |
| - name: Archive check-rust results |
| uses: actions/upload-artifact@v4 |
| with: |
| name: check-rust-logs-ubuntu-64 |
| path: | |
| gccrs-build/gcc/testsuite/rust/ |
| - name: Check regressions |
| run: | |
| cd gccrs-build; \ |
| if grep -e "unexpected" -e "unresolved" -e "ERROR:" gcc/testsuite/rust/rust.sum;\ |
| then \ |
| echo "::error title=Regression test failed::some tests are not correct"; \ |
| perl -n ../.github/emit_test_errors.pl < gcc/testsuite/rust/rust.sum; \ |
| exit 1; \ |
| else \ |
| exit 0; \ |
| fi |
| |
| build-and-check-ubuntu-64bit-glibcxx: |
| |
| env: |
| # Force locale, in particular for reproducible results re '.github/log_expected_warnings' (see below). |
| LC_ALL: C.UTF-8 |
| |
| runs-on: ubuntu-22.04 |
| |
| steps: |
| - uses: actions/checkout@v4 |
| |
| - name: Install Deps |
| run: | |
| sudo apt-get update; |
| sudo apt-get install -y \ |
| automake \ |
| autoconf \ |
| libtool \ |
| autogen \ |
| bison \ |
| flex \ |
| libgmp3-dev \ |
| libmpfr-dev \ |
| libmpc-dev \ |
| build-essential \ |
| gcc-multilib \ |
| g++-multilib \ |
| dejagnu; |
| # install Rust directly using rustup |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain=1.72.0; |
| |
| - name: Make Source Read-Only |
| run: chmod -R a-w ./* |
| |
| - name: Configure |
| run: | |
| mkdir -p gccrs-build; |
| cd gccrs-build; |
| export CXXFLAGS="$CXXFLAGS -D_GLIBCXX_ASSERTIONS" |
| ../configure \ |
| --enable-languages=rust \ |
| --disable-bootstrap \ |
| --enable-multilib |
| |
| - name: Build |
| shell: bash |
| run: | |
| cd gccrs-build; \ |
| # Add cargo to our path quickly |
| . "$HOME/.cargo/env"; |
| make -Otarget -j $(nproc) 2>&1 | tee log |
| |
| - name: Check for new warnings |
| run: | |
| cd gccrs-build |
| < log grep 'warning: ' | sort > log_warnings |
| if diff -U0 ../.github/glibcxx_ubuntu64b_log_expected_warnings log_warnings; then |
| : |
| else |
| echo 'See <https://github.com/Rust-GCC/gccrs/pull/1026>.' |
| exit 1 |
| fi >&2 |
| |
| - name: Run Tests |
| run: | |
| cd gccrs-build; \ |
| make check-rust RUNTESTFLAGS="--target_board=unix\{-m64}" |
| - name: Archive check-rust results |
| uses: actions/upload-artifact@v4 |
| with: |
| name: check-rust-logs-ubuntu-64-glibcxx |
| path: | |
| gccrs-build/gcc/testsuite/rust/ |
| - name: Check regressions |
| run: | |
| cd gccrs-build; \ |
| if grep -e "unexpected" -e "unresolved" -e "ERROR:" gcc/testsuite/rust/rust.sum;\ |
| then \ |
| echo "::error title=Regression test failed::some tests are not correct"; \ |
| perl -n ../.github/emit_test_errors.pl < gcc/testsuite/rust/rust.sum; \ |
| exit 1; \ |
| else \ |
| exit 0; \ |
| fi |
| |
| build-and-check-ubuntu-32bit: |
| |
| env: |
| # Force locale, in particular for reproducible results re '.github/log_expected_warnings' (see below). |
| LC_ALL: C.UTF-8 |
| |
| runs-on: ubuntu-22.04 |
| |
| steps: |
| - uses: actions/checkout@v4 |
| |
| - name: Install Deps |
| run: | |
| sudo apt-get update; |
| sudo apt-get install -y \ |
| automake \ |
| autoconf \ |
| libtool \ |
| autogen \ |
| bison \ |
| flex \ |
| libgmp3-dev \ |
| libmpfr-dev \ |
| libmpc-dev \ |
| build-essential \ |
| gcc-multilib \ |
| g++-multilib \ |
| dejagnu; |
| # install Rust directly using rustup |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain=1.72.0; |
| |
| - name: Make Source Read-Only |
| run: chmod -R a-w ./* |
| |
| - name: Configure |
| run: | |
| mkdir -p gccrs-build; |
| cd gccrs-build; |
| ../configure \ |
| --enable-languages=rust \ |
| --disable-bootstrap \ |
| --enable-multilib |
| |
| - name: Build |
| shell: bash |
| run: | |
| cd gccrs-build; \ |
| # Add cargo to our path quickly |
| . "$HOME/.cargo/env"; |
| make -Otarget -j $(nproc) 2>&1 | tee log |
| |
| - name: Check for new warnings |
| run: | |
| cd gccrs-build |
| < log grep 'warning: ' | sort > log_warnings |
| if diff -U0 ../.github/log_expected_warnings log_warnings; then |
| : |
| else |
| echo 'See <https://github.com/Rust-GCC/gccrs/pull/1026>.' |
| exit 1 |
| fi >&2 |
| |
| - name: Run Tests |
| run: | |
| cd gccrs-build; \ |
| make check-rust RUNTESTFLAGS="--target_board=unix\{-m32}" |
| - name: Archive check-rust results |
| uses: actions/upload-artifact@v4 |
| with: |
| name: check-rust-logs-ubuntu-32 |
| path: | |
| gccrs-build/gcc/testsuite/rust/ |
| - name: Check regressions |
| run: | |
| cd gccrs-build; \ |
| if grep -e "unexpected" -e "unresolved" -e "ERROR:" gcc/testsuite/rust/rust.sum;\ |
| then \ |
| echo "::error title=Regression test failed::some tests are not correct"; \ |
| perl -n ../.github/emit_test_errors.pl < gcc/testsuite/rust/rust.sum; \ |
| exit 1; \ |
| else \ |
| exit 0; \ |
| fi |
| |
| build-and-check-gcc-5: |
| |
| runs-on: ubuntu-22.04 |
| env: |
| # otherwise we hang when installing tzdata |
| DEBIAN_FRONTEND: noninteractive |
| steps: |
| - uses: actions/checkout@v4 |
| |
| - name: Install Deps |
| run: | |
| sudo apt-get update; |
| sudo apt-get install -y \ |
| curl \ |
| automake \ |
| autoconf \ |
| libtool \ |
| autogen \ |
| bison \ |
| flex \ |
| libc6-dev \ |
| libc6-dev-i386 \ |
| libgmp3-dev \ |
| libmpfr-dev \ |
| libmpc-dev \ |
| build-essential \ |
| dejagnu; |
| # install Rust directly using rustup |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain=1.72.0; |
| |
| - name: Restore cached gcc-5.4 |
| id: restore-gcc5 |
| uses: actions/cache/restore@v4 |
| with: |
| key: ce-tar-gcc-5 |
| path: ~/gcc-5.4.0/ |
| |
| - name: Download and install gcc5.4 |
| if: ${{ steps.restore-gcc5.outputs.cache-hit != 'true' }} |
| run: | |
| curl "https://s3.amazonaws.com/compiler-explorer/opt/gcc-5.4.0.tar.xz" -o /tmp/gcc.tar.xz; |
| cd ~; |
| tar xvf /tmp/gcc.tar.xz |
| |
| - name: Store gcc-5.4 to cache |
| id: cache-gcc5 |
| if: always() && steps.restore-gcc5.outputs.cache-hit != 'true' |
| uses: actions/cache/save@v4 |
| with: |
| key: ce-tar-gcc-5 |
| path: ~/gcc-5.4.0/ |
| |
| - name: Make Source Read-Only |
| run: chmod -R a-w ./* |
| |
| - name: Configure |
| run: | |
| mkdir -p gccrs-build; |
| cd gccrs-build; |
| |
| # Add cargo to our path quickly |
| . "$HOME/.cargo/env"; |
| |
| PATH=$HOME/gcc-5.4.0/bin:$PATH \ |
| ../configure \ |
| --enable-languages=rust \ |
| --disable-bootstrap \ |
| --enable-multilib |
| |
| - name: Build |
| shell: bash |
| run: | |
| # Add cargo to our path quickly |
| . "$HOME/.cargo/env"; |
| PATH=$HOME/gcc-5.4.0/bin:$PATH \ |
| make -C gccrs-build -j $(nproc) |
| |
| - name: Run Tests |
| run: | |
| cd gccrs-build; \ |
| PATH=$HOME/gcc-5.4.0/bin:$PATH \ |
| make check-rust RUNTESTFLAGS="--target_board=unix\{-m32,-m64}" |
| |
| - name: Archive check-rust results |
| uses: actions/upload-artifact@v4 |
| with: |
| name: check-rust-logs-5 |
| path: | |
| gccrs-build/gcc/testsuite/rust/ |
| |
| - name: Check regressions |
| run: | |
| cd gccrs-build; \ |
| if grep -e "unexpected" -e "unresolved" -e "ERROR:" gcc/testsuite/rust/rust.sum;\ |
| then \ |
| echo "::error title=Regression test failed::some tests are not correct"; \ |
| exit 1; \ |
| else \ |
| exit 0; \ |
| fi |
| |
| # build-and-check-clang-macos: |
| |
| # env: |
| # # Force CC/CXX to be explicitly clang to make it clear which compiler is used |
| # CC: clang |
| # CXX: clang++ |
| |
| # runs-on: macos-13 |
| |
| # steps: |
| # - uses: actions/checkout@v4 |
| |
| # - name: Install Deps |
| # run: | |
| # brew install dejagnu mpfr libmpc gmp; |
| # # install Rust directly using rustup |
| # curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain=1.72.0; |
| |
| # - name: Make Source Read-Only |
| # run: chmod -R a-w ./* |
| |
| # - name: Configure |
| # run: | |
| # mkdir -p gccrs-build; |
| # cd gccrs-build; |
| # ../configure \ |
| # --enable-languages=rust \ |
| # --disable-bootstrap \ |
| # --enable-multilib \ |
| # --with-native-system-header-dir=/usr/include \ |
| # --with-sysroot=$(xcrun --show-sdk-path) |
| |
| # - name: Build |
| # shell: bash |
| # run: | |
| # cd gccrs-build; \ |
| # make -j $(sysctl -n hw.ncpu) 2>&1 | tee log |
| |
| # - name: Run Tests |
| # run: | |
| # cd gccrs-build; \ |
| # make check-rust |
| # - name: Archive check-rust results |
| # uses: actions/upload-artifact@v4 |
| # with: |
| # name: check-rust-logs-macos |
| # path: | |
| # gccrs-build/gcc/testsuite/rust/ |
| # - name: Check regressions |
| # run: | |
| # cd gccrs-build; \ |
| # if grep -e "unexpected" -e "unresolved" -e "ERROR:" gcc/testsuite/rust/rust.sum;\ |
| # then \ |
| # echo "::error title=Regression test failed::some tests are not correct"; \ |
| # exit 1; \ |
| # else \ |
| # exit 0; \ |
| # fi |
| |
| build-and-check-asan: |
| |
| env: |
| # Force locale, in particular for reproducible results re '.github/log_expected_warnings' (see below). |
| LC_ALL: C.UTF-8 |
| |
| runs-on: ubuntu-22.04 |
| |
| steps: |
| - uses: actions/checkout@v4 |
| |
| - name: Install Deps |
| run: | |
| sudo apt-get update; |
| sudo apt-get install -y \ |
| automake \ |
| autoconf \ |
| libtool \ |
| autogen \ |
| bison \ |
| flex \ |
| libgmp3-dev \ |
| libmpfr-dev \ |
| libmpc-dev \ |
| build-essential \ |
| gcc-multilib \ |
| g++-multilib \ |
| dejagnu; |
| # install Rust directly using rustup |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain=1.72.0; |
| |
| - name: Make Source Read-Only |
| run: chmod -R a-w ./* |
| |
| - name: Configure |
| run: | |
| mkdir -p gccrs-build; |
| cd gccrs-build; |
| ../configure \ |
| --enable-languages=rust \ |
| --disable-bootstrap \ |
| --enable-multilib \ |
| --with-build-config=../.github/no-bootstrap-asan |
| |
| - name: Build |
| shell: bash |
| run: | |
| cd gccrs-build; \ |
| # Add cargo to our path quickly |
| . "$HOME/.cargo/env"; |
| make -Otarget -j $(nproc) 2>&1 | tee log |
| |
| # Skip warnings check |
| # - name: Check for new warnings |
| # run: | |
| # cd gccrs-build |
| # < log grep 'warning: ' | sort > log_warnings |
| # if diff -U0 ../.github/log_expected_warnings log_warnings; then |
| # : |
| # else |
| # echo 'See <https://github.com/Rust-GCC/gccrs/pull/1026>.' |
| # exit 1 |
| # fi >&2 |
| |
| - name: Run Tests |
| run: | |
| cd gccrs-build; \ |
| ASAN_OPTIONS=detect_leaks=0:use_odr_indicator=1 \ |
| make check-rust RUNTESTFLAGS="--target_board=unix\{-m64}" |
| - name: Archive check-rust results |
| uses: actions/upload-artifact@v4 |
| with: |
| name: check-rust-logs-asan |
| path: | |
| gccrs-build/gcc/testsuite/rust/ |
| - name: Check regressions |
| run: | |
| cd gccrs-build; \ |
| if grep -e "unexpected" -e "unresolved" -e "ERROR:" gcc/testsuite/rust/rust.sum;\ |
| then \ |
| echo "::error title=Regression test failed::some tests are not correct"; \ |
| perl -n ../.github/emit_test_errors.pl < gcc/testsuite/rust/rust.sum; \ |
| exit 1; \ |
| else \ |
| exit 0; \ |
| fi |