Skip to content

Update GHC support in INSTALL.md #1

Update GHC support in INSTALL.md

Update GHC support in INSTALL.md #1

Workflow file for this run

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@v3
- 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@v3
- name: Check CONFDIR
run: |
cd testsuite
../.github/workflows/check_confdir.py
../.github/workflows/check_symlinks.py
build-ubuntu:
strategy:
matrix:
os: [ ubuntu-20.04, ubuntu-22.04 ]
name: "Build: ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- 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.2.8
ghcup set ghc 9.2.8
# 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@v3
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"
# if this step fails, it may mean you need to update
# util/haskell-language-server/gen_hie.py to
# reflect the locations of any new haskell sources
- name: Test Haskell Language Server
run: |
ghcup install hls
pip3 install pyyaml
python3 util/haskell-language-server/gen_hie.py
pushd src/comp
haskell-language-server-9.2.8 bsc.hs
popd
# 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@v3
with:
name: ${{ matrix.os }} build
path: inst.tar.gz
build-macOS:
strategy:
matrix:
os: [ macos-11, macos-12, macos-13 ]
name: "Build: ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- 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.2.8
ghcup set ghc 9.2.8
# 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@v3
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"
# if this step fails, it may mean you need to update
# util/haskell-language-server/gen_hie.py to
# reflect the locations of any new haskell sources
- name: Test Haskell Language Server
run: |
ghcup install hls
pip3 install pyyaml
python3 util/haskell-language-server/gen_hie.py
pushd src/comp
haskell-language-server-9.2.8 bsc.hs
popd
# 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@v3
with:
name: ${{ matrix.os }} build
path: inst.tar.gz
build-doc-ubuntu:
strategy:
matrix:
os: [ ubuntu-20.04, ubuntu-22.04 ]
name: "Build doc: ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- 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
# The next two actions upload the PDFs as an artifact that can be downloaded.
# We provide two versions: one for release packaging and one for users.
# This is because the GitHub download will provide the artifact as a zip-file,
# even if the artifact itself is just one file:
# https://github.com/actions/upload-artifact/issues/3
# https://github.com/actions/upload-artifact/issues/14
# It is inconvenient for users to access PDFs inside a tarfile inside a zipfile,
# therefore we provide an option without the tarfile layer.
- name: Upload artifact
# This artifact (PDFs inside inst.tar.gz inside artifact.zip) is for release packaging.
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }} build doc
path: inst.tar.gz
- name: Upload doc not tar
# This artifact (PDFs inside artifact.zip) is for viewing the built documents.
uses: actions/upload-artifact@v3
with:
name: ${{matrix.os}}-doc-not-tar
path: inst/doc
build-doc-macOS:
strategy:
matrix:
os: [ macos-11, macos-12, macos-13 ]
name: "Build doc: ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- 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
# The next two actions upload the PDFs as an artifact that can be downloaded.
# We provide two versions: one for release packaging and one for users.
# This is because the GitHub download will provide the artifact as a zip-file,
# even if the artifact itself is just one file:
# https://github.com/actions/upload-artifact/issues/3
# https://github.com/actions/upload-artifact/issues/14
# It is inconvenient for users to access PDFs inside a tarfile inside a zipfile,
# therefore we provide an option without the tarfile layer.
- name: Upload artifact
# This artifact (PDFs inside inst.tar.gz inside artifact.zip) is for release packaging.
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }} build doc
path: inst.tar.gz
- name: Upload doc not tar
# This artifact (PDFs inside artifact.zip) is for viewing the built documents.
uses: actions/upload-artifact@v3
with:
name: ${{matrix.os}}-doc-not-tar
path: inst/doc
build-releasenotes-ubuntu:
# Release Notes only need to be built once, so we build on recent
# Ubuntu, not Mac OS. Later, the release script will copy the
# generated release notes to all release tarballs.
strategy:
matrix:
os: [ ubuntu-22.04 ]
name: "Build releasenotes: ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Install dependencies
shell: bash
run: "sudo .github/workflows/install_dependencies_releasenotes_ubuntu.sh"
- name: Build
run: |
make install-release
tar czf inst.tar.gz inst
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.os }} releasenotes
path: inst.tar.gz
test-ubuntu:
strategy:
matrix:
os: [ ubuntu-20.04, ubuntu-22.04 ]
fail-fast: false
name: "Test ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
needs: build-ubuntu
steps:
- uses: actions/checkout@v3
- name: Install dependencies
shell: bash
run: "sudo .github/workflows/install_dependencies_testsuite_ubuntu.sh"
- name: Download bsc
uses: actions/download-artifact@v3
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@v3
with:
path: ${{ GITHUB.WORKSPACE }}/ccache
key: test-${{ matrix.os }}-ccache-${{ github.sha }}
restore-keys: |
test-${{ matrix.os }}-ccache-
# 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"
# 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@v3
with:
name: test-logs-${{ matrix.os }}
path: logs.tar.gz
test-macOS:
strategy:
matrix:
os: [ macos-11, macos-12, macos-13 ]
name: "Test ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
needs: build-macos
steps:
- uses: actions/checkout@v3
- name: Install dependencies
shell: bash
run: ".github/workflows/install_dependencies_testsuite_macos.sh"
- name: Download bsc
uses: actions/download-artifact@v3
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@v3
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 \
TEST_SYSTEMC_CXXFLAGS=-std=c++11
# 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@v3
with:
name: test-logs-${{ matrix.os }}
path: logs.tar.gz
test-toooba-ubuntu:
strategy:
matrix:
os: [ 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@v3
- name: Install dependencies
run: |
sudo apt-get install -y ccache libelf-dev
- name: Download bsc
uses: actions/download-artifact@v3
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@v3
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-11, macos-12, macos-13 ]
name: "Test Toooba ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
needs: build-macos
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: |
brew install ccache libelf
- name: Download bsc
uses: actions/download-artifact@v3
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@v3
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-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@v3
- name: Install dependencies
shell: bash
run: "sudo .github/workflows/install_dependencies_testsuite_ubuntu.sh"
- name: Download bsc
uses: actions/download-artifact@v3
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@v3
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@v3
with:
name: test-contrib-logs-${{ matrix.os }}
path: logs.tar.gz
test-contrib-macOS:
strategy:
matrix:
os: [ macos-11, macos-12, macos-13 ]
name: "Test bsc-contrib ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
needs: build-macos
steps:
- uses: actions/checkout@v3
- name: Install dependencies
shell: bash
run: ".github/workflows/install_dependencies_testsuite_macos.sh"
- name: Download bsc
uses: actions/download-artifact@v3
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@v3
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@v3
with:
name: test-contrib-logs-${{ matrix.os }}
path: logs.tar.gz
test-bdw-ubuntu:
strategy:
matrix:
os: [ 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@v3
- name: Download bsc
uses: actions/download-artifact@v3
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@v3
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@v3
with:
name: test-bdw-logs-${{ matrix.os }}
path: logs.tar.gz
test-bdw-macOS:
strategy:
matrix:
os: [ macos-11, macos-12, macos-13 ]
name: "Test bdw ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
needs: build-macos
steps:
- uses: actions/checkout@v3
- name: Download bsc
uses: actions/download-artifact@v3
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@v3
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@v3
with:
name: test-bdw-logs-${{ matrix.os }}
path: logs.tar.gz