name: CI # Trigger the workflow on push or pull request on: [ push, pull_request ] jobs: build-check-src: name: "Check: code cleanliness" runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Check tabs and whitespace shell: bash run: ".github/workflows/check_whitespace.sh" build-check-testsuite: name: "Check: testsuite lint" runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Check CONFDIR run: | cd testsuite ../.github/workflows/check_confdir.py ../.github/workflows/check_symlinks.py build-ubuntu: strategy: matrix: os: [ ubuntu-18.04, ubuntu-20.04, ubuntu-22.04 ] name: "Build: ${{ matrix.os }}" runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - name: Checkout submodules shell: bash run: | auth_header="$(git config --local --get http.https://github.com/.extraheader)" git submodule sync --recursive git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 - name: Install dependencies shell: bash run: | sudo .github/workflows/install_dependencies_ubuntu.sh # Don't rely on the VM to pick the GHC version ghcup install ghc 9.0.1 ghcup set ghc 9.0.1 # Until BSC uses cabal to build, pre-install these packages - name: Install Haskell dependencies shell: bash run: | cabal update cabal v1-install old-time regex-compat split syb # Restore previous ccache cache of compiled object files. Use a SHA # in the key so that a new cache file is generated after every build, # and have the restore-key use the most recent. - name: CCache cache files uses: actions/cache@v2 with: path: ${{ GITHUB.WORKSPACE }}/ccache key: build-${{ matrix.os }}-ccache-${{ github.sha }} restore-keys: | build-${{ matrix.os }}-ccache- - name: Build env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: | ccache --zero-stats --max-size 250M export PATH=/usr/lib/ccache:$PATH make -j3 GHCJOBS=2 GHCRTSFLAGS='+RTS -M5G -A128m -RTS' install-src tar czf inst.tar.gz inst - name: CCache stats env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: ccache --show-stats - name: Smoketest run: "make check-smoke" # Check that .ghci has all the right flags to load the source. # This is important for text editor integration & tools like ghcid # NB stp, yices and htcl must be built first, so do this after Build. - name: Check GHCI :load run: | cd src/comp export NOGIT=0 export NOUPDATEBUILDVERSION=0 ./update-build-version.sh ./update-build-system.sh echo ':load bsc.hs' | ghci 2>&1 | tee ghci.log if grep '\(Failed\|error:\)' ghci.log then echo "GHCi reported errors." exit 1 else echo "GHCi loaded successfully." exit 0 fi - name: Upload artifact uses: actions/upload-artifact@v1 with: name: ${{ matrix.os }} build path: inst.tar.gz build-macOS: strategy: matrix: os: [ macos-10.15, macos-11, macos-12 ] name: "Build: ${{ matrix.os }}" runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - name: Checkout submodules shell: bash run: | auth_header="$(git config --local --get http.https://github.com/.extraheader)" git submodule sync --recursive git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 - name: Install dependencies shell: bash run: | .github/workflows/install_dependencies_macos.sh # Don't rely on the VM to pick the GHC version ghcup install ghc 9.0.1 ghcup set ghc 9.0.1 # Until BSC uses cabal to build, pre-install these packages - name: Install Haskell dependencies shell: bash run: | cabal update cabal v1-install old-time regex-compat split syb # Restore previous ccache cache of compiled object files. Use a SHA # in the key so that a new cache file is generated after every build, # and have the restore-key use the most recent. - name: CCache cache files uses: actions/cache@v2 with: path: ${{ GITHUB.WORKSPACE }}/ccache key: build-${{ matrix.os }}-ccache-${{ github.sha }} restore-keys: | build-${{ matrix.os }}-ccache- - name: Build env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: | ccache --zero-stats --max-size 250M export PATH=$(brew --prefix)/opt/ccache/libexec:$PATH # Hack: Remove incompatible TCL header that something has installed # in /usr/local/include in the GitHub CI image. This dir is at the # start of the compiler's default search path, and overrides the # system tcl.h, and causes a linker failure (because of a macro that # renames Tcl_Main to Tcl_MainEx). We want to build against the # system TCL so we don't introduce any extra deps for the bluetcl # binary. rm -f /usr/local/include/tcl.h make -j3 GHCJOBS=2 GHCRTSFLAGS='+RTS -M4500M -A128m -RTS' install-src tar czf inst.tar.gz inst - name: CCache stats env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: ccache --show-stats - name: Smoketest run: "make check-smoke" # Check that .ghci has all the right flags to load the source. # This is important for text editor integration & tools like ghcid # NB stp, yices and htcl must be built first, so do this after Build. - name: Check GHCI :load run: | cd src/comp export NOGIT=0 export NOUPDATEBUILDVERSION=0 ./update-build-version.sh ./update-build-system.sh echo ':load bsc.hs' | ghci 2>&1 | tee ghci.log if grep '\(Failed\|error:\)' ghci.log then echo "GHCi reported errors." exit 1 else echo "GHCi loaded successfully." exit 0 fi - name: Upload artifact uses: actions/upload-artifact@v1 with: name: ${{ matrix.os }} build path: inst.tar.gz build-doc-ubuntu: strategy: matrix: os: [ ubuntu-18.04, ubuntu-20.04, ubuntu-22.04 ] name: "Build doc: ${{ matrix.os }}" runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - name: Install dependencies shell: bash run: "sudo .github/workflows/install_dependencies_doc_ubuntu.sh" - name: Build run: | make -j3 install-doc tar czf inst.tar.gz inst - name: Upload artifact uses: actions/upload-artifact@v1 with: name: ${{ matrix.os }} build doc path: inst.tar.gz build-doc-macOS: strategy: matrix: os: [ macos-10.15, macos-11, macos-12 ] name: "Build doc: ${{ matrix.os }}" runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - name: Install dependencies shell: bash run: ".github/workflows/install_dependencies_doc_macos.sh" - name: Build run: | # Brew install of mactex doesn't update the path until a new shell is opened export PATH=/Library/TeX/texbin/:$PATH make -j3 install-doc tar czf inst.tar.gz inst - name: Upload artifact uses: actions/upload-artifact@v1 with: name: ${{ matrix.os }} build doc path: inst.tar.gz test-ubuntu: strategy: matrix: os: [ ubuntu-18.04, ubuntu-20.04, ubuntu-22.04 ] fail-fast: false name: "Test ${{ matrix.os }}" runs-on: ${{ matrix.os }} needs: build-ubuntu steps: - uses: actions/checkout@v2 - name: Install dependencies shell: bash run: "sudo .github/workflows/install_dependencies_testsuite_ubuntu.sh" - name: Download bsc uses: actions/download-artifact@v2 with: name: ${{ matrix.os }} build - name: Install bsc run: "tar xzf inst.tar.gz" # Restore previous ccache cache of compiled object files. Use a SHA # in the key so that a new cache file is generated after every # successful build, and have the restore-key use the most recent. - name: CCache cache files uses: actions/cache@v2 with: path: ${{ GITHUB.WORKSPACE }}/ccache key: test-${{ matrix.os }}-ccache-${{ github.sha }} restore-keys: | test-${{ matrix.os }}-ccache- # Restore the cache of a SystemC build if it exists and the # build script hasn't changed. # Don't do this on newer Ubuntu because we apt-get install libsystemc-dev - name: Cache SystemC build id: systemc-cache if: matrix.os == 'ubuntu-18.04' uses: actions/cache@v2 env: cache-name: systemc-build with: path: ~/systemc key: ${{ matrix.os }}-build-${{ env.cache-name }}-${{ hashFiles('.github/workflows/build_systemc.sh') }} # If there's no cached build, download the source tarball, # do the build (and the cache action will save it for us at # the end of a successful workflow) # Don't do this on newer Ubuntu because we apt-get install libsystemc-dev - name: Build SystemC if: matrix.os == 'ubuntu-18.04' && steps.systemc-cache.outputs.cache-hit != 'true' shell: bash run: ".github/workflows/build_systemc.sh" # Finally, after all this setup, run the testsuite! - name: Run testsuite env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: | # Use ccache to avoid recompiling generated .cxx every run. ccache --zero-stats --max-size 500M export PATH=/usr/lib/ccache:$PATH # Use the LLVM linker as the C++ linker # for a moderate build-time speedup over ld.bfd export LINKER=lld export LDFLAGS="-Wl,-fuse-ld=$LINKER" # Use -O0 for significantly faster C++ compiles (which more # than make up for slower simulations) export CXXFLAGS="-O0" # For Ubuntu without a SystemC package, use the local build REL=$(lsb_release -rs | tr -d .) if [ $REL -lt 1910 ]; then export TEST_SYSTEMC_INC=$HOME/systemc/include export TEST_SYSTEMC_LIB=$HOME/systemc/lib-linux64 fi # Always archive logs, even if make fails (and terminates this script # because it's invoked with :set -eo pipefile) trap ./testsuite/archive_logs.sh EXIT make -C testsuite # Show ccache stats so we can see what the hit-rate is like. - name: CCache stats env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: ccache --show-stats # Save test logs on failure so we can diagnose - name: Archive test logs if: failure() uses: actions/upload-artifact@v1 with: name: test-logs-${{ matrix.os }} path: logs.tar.gz test-macOS: strategy: matrix: os: [ macos-10.15, macos-11, macos-12 ] name: "Test ${{ matrix.os }}" runs-on: ${{ matrix.os }} needs: build-macos steps: - uses: actions/checkout@v2 - name: Install dependencies shell: bash run: ".github/workflows/install_dependencies_testsuite_macos.sh" - name: Download bsc uses: actions/download-artifact@v2 with: name: ${{ matrix.os }} build - name: Install bsc run: "tar xzf inst.tar.gz" # Restore previous ccache cache of compiled object files. Use a SHA # in the key so that a new cache file is generated after every # successful build, and have the restore-key use the most recent. - name: CCache cache files uses: actions/cache@v2 with: path: ${{ GITHUB.WORKSPACE }}/ccache key: test-${{ matrix.os }}-ccache-${{ github.sha }} restore-keys: | test-${{ matrix.os }}-ccache- - name: Run testsuite env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: | # Use ccache to avoid recompiling generated .cxx every run. ccache --zero-stats --max-size 500M export PATH=$(brew --prefix)/opt/ccache/libexec:$PATH # Use -O0 for significantly faster C++ compiles (which more # than make up for slower simulations). export CXXFLAGS="-O0" # Always archive logs, even if make fails (and terminates this script # because it's invoked with :set -eo pipefile) trap ./testsuite/archive_logs.sh EXIT make -C testsuite \ TEST_SYSTEMC_INC=$(brew --prefix systemc)/include \ TEST_SYSTEMC_LIB=$(brew --prefix systemc)/lib # Show ccache stats so we can see what the hit-rate is like. - name: CCache stats env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: ccache --show-stats # Save test logs on failure so we can diagnose - name: Archive test logs if: failure() uses: actions/upload-artifact@v2 with: name: test-logs-${{ matrix.os }} path: logs.tar.gz test-toooba-ubuntu: strategy: matrix: os: [ ubuntu-18.04, ubuntu-20.04, ubuntu-22.04 ] fail-fast: false name: "Test Toooba ${{ matrix.os }}" runs-on: ${{ matrix.os }} needs: build-ubuntu steps: - uses: actions/checkout@v2 - name: Install dependencies run: | sudo apt-get install -y ccache libelf-dev - name: Download bsc uses: actions/download-artifact@v2 with: name: ${{ matrix.os }} build - name: Install bsc run: "tar xzf inst.tar.gz" - name: Download Toooba run: | git clone --recursive https://github.com/bluespec/Toooba ../Toooba # Restore previous ccache cache of compiled object files. Use a SHA # in the key so that a new cache file is generated after every # successful build, and have the restore-key use the most recent. - name: CCache cache files uses: actions/cache@v2 with: path: ${{ GITHUB.WORKSPACE }}/ccache key: test-toooba-${{ matrix.os }}-ccache-${{ github.sha }} restore-keys: | test-toooba-${{ matrix.os }}-ccache- - name: Compile and link Toooba env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: | # Use ccache to avoid recompiling generated .cxx every run. ccache --zero-stats --max-size 500M export PATH=/usr/lib/ccache:$PATH export PATH=$PWD/../bsc/inst/bin:$PATH cd ../Toooba/builds/RV64ACDFIMSU_Toooba_bluesim/ # Use -O0 for significantly faster C++ compiles (which more # than make up for slower simulations) export CXXFLAGS="-O0" # Workaround hardcoded parallelism sed -i 's/-parallel-sim-link 8/-parallel-sim-link 2/' ../Resources/Include_bluesim.mk # For ccache to be effective, the output needs to be reproducible make BSC_C_FLAGS="-no-show-version -no-show-timestamps" all - name: Test Toooba run: | export PATH=$PWD/../bsc/inst/bin:$PATH cd ../Toooba/Tests/elf_to_hex # Workaround a build failure on Ubuntu 22.04 REL=$(lsb_release -rs | tr -d .) if [ $REL -lt 2204 ]; then make else gcc -g -o elf_to_hex elf_to_hex.c -lelf -mcmodel=medium fi cd ../../builds/RV64ACDFIMSU_Toooba_bluesim/ # Workaround bugs in the regression script #make isa_tests | tee isa_tests.log #grep -q 'FAIL: 0 tests' isa_tests.log make test | tee test.log grep -q 'PASS' test.log # Show ccache stats so we can see what the hit-rate is like. - name: CCache stats env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: ccache --show-stats test-toooba-macOS: strategy: matrix: os: [ macos-10.15, macos-11, macos-12 ] name: "Test Toooba ${{ matrix.os }}" runs-on: ${{ matrix.os }} needs: build-macos steps: - uses: actions/checkout@v2 - name: Install dependencies run: | brew install ccache libelf - name: Download bsc uses: actions/download-artifact@v2 with: name: ${{ matrix.os }} build - name: Install bsc run: "tar xzf inst.tar.gz" - name: Download Toooba run: | git clone --recursive https://github.com/bluespec/Toooba ../Toooba # Restore previous ccache cache of compiled object files. Use a SHA # in the key so that a new cache file is generated after every # successful build, and have the restore-key use the most recent. - name: CCache cache files uses: actions/cache@v2 with: path: ${{ GITHUB.WORKSPACE }}/ccache key: test-toooba-${{ matrix.os }}-ccache-${{ github.sha }} restore-keys: | test-toooba-${{ matrix.os }}-ccache- - name: Compile and link Toooba env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: | # Use ccache to avoid recompiling generated .cxx every run. ccache --zero-stats --max-size 500M export PATH=$(brew --prefix)/opt/ccache/libexec:$PATH export PATH=$PWD/../bsc/inst/bin:$PATH cd ../Toooba/builds/RV64ACDFIMSU_Toooba_bluesim/ # Use -O0 for significantly faster C++ compiles (which more # than make up for slower simulations) export CXXFLAGS="-O0" # Workaround hardcoded parallelism sed -i -e 's/-parallel-sim-link 8/-parallel-sim-link 2/' ../Resources/Include_bluesim.mk # For ccache to be effective, the output needs to be reproducible make BSC_C_FLAGS="-no-show-version -no-show-timestamps" all - name: Test Toooba run: | export PATH=$PWD/../bsc/inst/bin:$PATH cd ../Toooba/Tests/elf_to_hex make CPATH=/usr/local/include/libelf cd ../../builds/RV64ACDFIMSU_Toooba_bluesim/ # Workaround bugs in the regression script #make isa_tests | tee isa_tests.log #grep -q 'FAIL: 0 tests' isa_tests.log make test | tee test.log grep -q 'PASS' test.log # Show ccache stats so we can see what the hit-rate is like. - name: CCache stats env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: ccache --show-stats test-contrib-ubuntu: strategy: matrix: os: [ ubuntu-18.04, ubuntu-20.04, ubuntu-22.04 ] fail-fast: false name: "Test bsc-contrib ${{ matrix.os }}" runs-on: ${{ matrix.os }} needs: build-ubuntu steps: - uses: actions/checkout@v2 - name: Install dependencies shell: bash run: "sudo .github/workflows/install_dependencies_testsuite_ubuntu.sh" - name: Download bsc uses: actions/download-artifact@v2 with: name: ${{ matrix.os }} build - name: Install bsc run: "tar xzf inst.tar.gz" - name: Download bsc-contrib run: | git clone --recursive https://github.com/B-Lang-org/bsc-contrib ../bsc-contrib - name: Build and install bsc-contrib run: | export PATH=$PWD/../bsc/inst/bin:$PATH make -C ../bsc-contrib/ # Restore previous ccache cache of compiled object files. Use a SHA # in the key so that a new cache file is generated after every # successful build, and have the restore-key use the most recent. - name: CCache cache files uses: actions/cache@v2 with: path: ${{ GITHUB.WORKSPACE }}/ccache key: test-contrib-${{ matrix.os }}-ccache-${{ github.sha }} restore-keys: | test-contrib-${{ matrix.os }}-ccache- - name: Run bsc-contrib tests env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: | # Use ccache to avoid recompiling generated .cxx every run. ccache --zero-stats --max-size 500M export PATH=/usr/lib/ccache:$PATH # Use the LLVM linker as the C++ linker # for a moderate build-time speedup over ld.bfd export LINKER=lld export LDFLAGS="-Wl,-fuse-ld=$LINKER" # Use -O0 for significantly faster C++ compiles (which more # than make up for slower simulations). export CXXFLAGS="-O0" # Copy the bsc-contrib tests into place cp -r ../bsc-contrib/testing/bsc.contrib testsuite/ # Inform the tests of the path to the bsc-contrib libraries export BSCCONTRIBDIR=$PWD/../bsc-contrib/inst # Always archive logs, even if make fails (and terminates this script # because it's invoked with :set -eo pipefile) trap ./testsuite/archive_logs.sh EXIT make -C testsuite/bsc.contrib check # Show ccache stats so we can see what the hit-rate is like. - name: CCache stats env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: ccache --show-stats # Save test logs on failure so we can diagnose - name: Archive test logs if: failure() uses: actions/upload-artifact@v1 with: name: test-contrib-logs-${{ matrix.os }} path: logs.tar.gz test-contrib-macOS: strategy: matrix: os: [ macos-10.15, macos-11, macos-12 ] name: "Test bsc-contrib ${{ matrix.os }}" runs-on: ${{ matrix.os }} needs: build-macos steps: - uses: actions/checkout@v2 - name: Install dependencies shell: bash run: ".github/workflows/install_dependencies_testsuite_macos.sh" - name: Download bsc uses: actions/download-artifact@v2 with: name: ${{ matrix.os }} build - name: Install bsc run: "tar xzf inst.tar.gz" - name: Download bsc-contrib run: | git clone --recursive https://github.com/B-Lang-org/bsc-contrib ../bsc-contrib - name: Build and install bsc-contrib run: | export PATH=$PWD/../bsc/inst/bin:$PATH make -C ../bsc-contrib/ # Restore previous ccache cache of compiled object files. Use a SHA # in the key so that a new cache file is generated after every # successful build, and have the restore-key use the most recent. - name: CCache cache files uses: actions/cache@v2 with: path: ${{ GITHUB.WORKSPACE }}/ccache key: test-contrib-${{ matrix.os }}-ccache-${{ github.sha }} restore-keys: | test-contrib-${{ matrix.os }}-ccache- - name: Run bsc-contrib tests env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: | # Use ccache to avoid recompiling generated .cxx every run. ccache --zero-stats --max-size 500M export PATH=$(brew --prefix)/opt/ccache/libexec:$PATH # Use -O0 for significantly faster C++ compiles (which more # than make up for slower simulations). export CXXFLAGS="-O0" # Copy the bsc-contrib tests into place cp -r ../bsc-contrib/testing/bsc.contrib testsuite/ # Inform the tests of the path to the bsc-contrib libraries export BSCCONTRIBDIR=$PWD/../bsc-contrib/inst # Always archive logs, even if make fails (and terminates this script # because it's invoked with :set -eo pipefile) trap ./testsuite/archive_logs.sh EXIT make -C testsuite/bsc.contrib check # Show ccache stats so we can see what the hit-rate is like. - name: CCache stats env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: ccache --show-stats # Save test logs on failure so we can diagnose - name: Archive test logs if: failure() uses: actions/upload-artifact@v2 with: name: test-contrib-logs-${{ matrix.os }} path: logs.tar.gz test-bdw-ubuntu: strategy: matrix: os: [ ubuntu-18.04, ubuntu-20.04, ubuntu-22.04 ] fail-fast: false name: "Test bdw ${{ matrix.os }}" runs-on: ${{ matrix.os }} needs: build-ubuntu steps: - uses: actions/checkout@v2 - name: Download bsc uses: actions/download-artifact@v2 with: name: ${{ matrix.os }} build - name: Install bsc run: "tar xzf inst.tar.gz" - name: Download bdw run: | git clone --recursive https://github.com/B-Lang-org/bdw ../bdw - name: Build and install bdw run: | export PATH=$PWD/../bsc/inst/bin:$PATH make -C ../bdw/ - name: Install dependencies shell: bash run: "sudo ../bdw/.github/workflows/install_dependencies_testsuite_ubuntu.sh" # Restore previous ccache cache of compiled object files. Use a SHA # in the key so that a new cache file is generated after every # successful build, and have the restore-key use the most recent. - name: CCache cache files uses: actions/cache@v2 with: path: ${{ GITHUB.WORKSPACE }}/ccache key: test-bdw-${{ matrix.os }}-ccache-${{ github.sha }} restore-keys: | test-bdw-${{ matrix.os }}-ccache- - name: Run bdw tests env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: | # Use ccache to avoid recompiling generated .cxx every run. ccache --zero-stats --max-size 500M export PATH=/usr/lib/ccache:$PATH # Use the LLVM linker as the C++ linker # for a moderate build-time speedup over ld.bfd export LINKER=lld export LDFLAGS="-Wl,-fuse-ld=$LINKER" # Use -O0 for significantly faster C++ compiles (which more # than make up for slower simulations). export CXXFLAGS="-O0" # Copy the bdw tests into place cp -r ../bdw/testing/bsc.bdw testsuite/ # Inform the tests of the path to bdw export BDW=$PWD/../bdw/inst/bin/bdw # Always archive logs, even if make fails (and terminates this script # because it's invoked with :set -eo pipefile) trap ./testsuite/archive_logs.sh EXIT xvfb-run -a make -C testsuite/bsc.bdw check # Show ccache stats so we can see what the hit-rate is like. - name: CCache stats env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: ccache --show-stats # Save test logs on failure so we can diagnose - name: Archive test logs if: failure() uses: actions/upload-artifact@v1 with: name: test-bdw-logs-${{ matrix.os }} path: logs.tar.gz test-bdw-macOS: strategy: matrix: os: [ macos-10.15, macos-11, macos-12 ] name: "Test bdw ${{ matrix.os }}" runs-on: ${{ matrix.os }} needs: build-macos steps: - uses: actions/checkout@v2 - name: Download bsc uses: actions/download-artifact@v2 with: name: ${{ matrix.os }} build - name: Install bsc run: "tar xzf inst.tar.gz" - name: Download bdw run: | git clone --recursive https://github.com/B-Lang-org/bdw ../bdw - name: Build and install bdw run: | export PATH=$PWD/../bsc/inst/bin:$PATH make -C ../bdw/ - name: Install dependencies shell: bash run: "../bdw/.github/workflows/install_dependencies_testsuite_macos.sh" # Restore previous ccache cache of compiled object files. Use a SHA # in the key so that a new cache file is generated after every # successful build, and have the restore-key use the most recent. - name: CCache cache files uses: actions/cache@v2 with: path: ${{ GITHUB.WORKSPACE }}/ccache key: test-bdw-${{ matrix.os }}-ccache-${{ github.sha }} restore-keys: | test-bdw-${{ matrix.os }}-ccache- - name: Run bdw tests env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: | # Use ccache to avoid recompiling generated .cxx every run. ccache --zero-stats --max-size 500M export PATH=$(brew --prefix)/opt/ccache/libexec:$PATH # Use -O0 for significantly faster C++ compiles (which more # than make up for slower simulations). export CXXFLAGS="-O0" # Copy the bdw tests into place cp -r ../bdw/testing/bsc.bdw testsuite/ # Inform the tests of the path to bdw export BDW=$PWD/../bdw/inst/bin/bdw # Always archive logs, even if make fails (and terminates this script # because it's invoked with :set -eo pipefile) trap ./testsuite/archive_logs.sh EXIT make -C testsuite/bsc.bdw check # Show ccache stats so we can see what the hit-rate is like. - name: CCache stats env: CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/ccache run: ccache --show-stats # Save test logs on failure so we can diagnose - name: Archive test logs if: failure() uses: actions/upload-artifact@v2 with: name: test-bdw-logs-${{ matrix.os }} path: logs.tar.gz