Introduce STP_USE_LIB flag #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |