Update team.md #205
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: Linux CI | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
jobs: | |
build64: | |
name: Ubuntu 64-bit | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# Linux with GCC | |
- {os: ubuntu-20.04, llvm: '6.0', compiler: gcc} | |
- {os: ubuntu-20.04, llvm: 7, compiler: gcc} | |
- {os: ubuntu-20.04, llvm: 8, compiler: gcc} | |
- {os: ubuntu-20.04, llvm: 9, compiler: gcc} | |
- {os: ubuntu-20.04, llvm: 10, compiler: gcc} | |
- {os: ubuntu-20.04, llvm: 10, compiler: gcc, type: Debug} | |
# FIXME: Edit when KLEE is rebased to latest upstream. | |
- {os: ubuntu-20.04, llvm: 11, compiler: gcc, klee: 'no-klee'} | |
- {os: ubuntu-20.04, llvm: 12, compiler: gcc, klee: 'no-klee'} | |
- {os: ubuntu-22.04, llvm: 13, compiler: gcc, klee: 'no-klee'} | |
# Linux with Clang | |
- {os: ubuntu-20.04, llvm: '6.0', compiler: clang} | |
- {os: ubuntu-20.04, llvm: 7, compiler: clang} | |
- {os: ubuntu-20.04, llvm: 8, compiler: clang} | |
- {os: ubuntu-20.04, llvm: 9, compiler: clang} | |
- {os: ubuntu-20.04, llvm: 10, compiler: clang} | |
- {os: ubuntu-20.04, llvm: 10, compiler: clang, type: Debug} | |
# FIXME: Edit when KLEE is rebased to latest upstream. | |
- {os: ubuntu-20.04, llvm: 11, compiler: clang, klee: 'no-klee'} | |
- {os: ubuntu-20.04, llvm: 12, compiler: clang, klee: 'no-klee'} | |
- {os: ubuntu-22.04, llvm: 13, compiler: clang, klee: 'no-klee'} | |
runs-on: ${{matrix.os}} | |
steps: | |
- name: Checkout Symbiotic and submodules | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Install dependencies | |
run: | | |
sudo apt update | |
sudo apt install ccache cmake clang-${{matrix.llvm}} \ | |
llvm-${{matrix.llvm}}-dev gcc-multilib \ | |
libz3-dev | |
- name: Set environment | |
id: env | |
run: | | |
# Set buildtype | |
if [[ "${{matrix.type}}" != "" ]]; then | |
echo "BUILD_TYPE=${{matrix.type}}" >> $GITHUB_ENV | |
else | |
echo "BUILD_TYPE=RelWithDebInfo" >> $GITHUB_ENV | |
fi | |
# Build with sanitizers | |
CFLAGS="-fsanitize=address,undefined -g -fno-omit-frame-pointer" | |
CXXFLAGS="-fsanitize=address,undefined -g -fno-omit-frame-pointer" | |
LDFLAGS="-fsanitize=address,undefined" | |
# TODO: Fail on UBSAN | |
# CFLAGS="-fno-sanitize-recover=all $CFLAGS" | |
# CXXFLAGS="-fno-sanitize-recover=all $CXXFLAGS" | |
# Select compiler and set compiler flags | |
if [[ "${{matrix.compiler}}" = "clang" ]]; then | |
# Clang | |
CC="clang-${{matrix.llvm}}" | |
CXX="clang++-${{matrix.llvm}}" | |
# Use shared libasan otherwise LLVMsbt.so would be underlinked. | |
CFLAGS="-shared-libasan $CFLAGS" | |
CXXFLAGS="-shared-libasan $CXXFLAGS" | |
# Dynamic compiler-rt libraries are not in /usr/lib | |
tmp="$(clang-${{matrix.llvm}} -print-file-name=libclang_rt.asan-x86_64.so)" | |
LD_LIBRARY_PATH="$(dirname "$tmp")" | |
# Force coloured output | |
CFLAGS="-fcolor-diagnostics $CFLAGS" | |
CXXFLAGS="-fcolor-diagnostics $CXXFLAGS" | |
else | |
# GCC | |
CC="gcc" | |
CXX="g++" | |
# Force coloured output | |
CFLAGS="-fdiagnostics-color $CFLAGS" | |
CXXFLAGS="-fdiagnostics-color $CXXFLAGS" | |
fi | |
# Save the environment | |
echo "CC=$CC" >> $GITHUB_ENV | |
echo "CXX=$CXX" >> $GITHUB_ENV | |
echo "CFLAGS=$CFLAGS" >> $GITHUB_ENV | |
echo "CXXFLAGS=$CXXFLAGS" >> $GITHUB_ENV | |
echo "LDFLAGS=$LDFLAGS" >> $GITHUB_ENV | |
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >> $GITHUB_ENV | |
# Set up ccache | |
sudo /usr/sbin/update-ccache-symlinks | |
echo "/usr/lib/ccache" >> $GITHUB_PATH | |
# Store the environment | |
echo "CCACHE_BASEDIR=$GITHUB_WORKSPACE" >> $GITHUB_ENV | |
echo "CCACHE_COMPRESS=true" >> $GITHUB_ENV | |
echo "CCACHE_COMPRESSLEVEL=6" >> $GITHUB_ENV | |
echo "CCACHE_DIR=$GITHUB_WORKSPACE/.ccache" >> $GITHUB_ENV | |
echo "CCACHE_MAXSIZE=400M" >> $GITHUB_ENV | |
echo "timestamp=$(date -u -Iseconds)" >> $GITHUB_OUTPUT | |
- name: Set up ccache | |
uses: actions/cache@v3 | |
with: | |
path: .ccache | |
key: ${{matrix.os}}-${{matrix.llvm}}-${{matrix.compiler}}-${{matrix.type}}-${{steps.env.outputs.timestamp}} | |
restore-keys: ${{matrix.os}}-${{matrix.llvm}}-${{matrix.compiler}}-${{matrix.type}} | |
- name: Build Symbiotic | |
run: | | |
./system-build.sh -j$(nproc) \ | |
build-type=${BUILD_TYPE} ${{matrix.klee}} \ | |
llvm-config=$(which llvm-config-${{matrix.llvm}}) | |
- name: Run tests | |
# FIXME: Remove when KLEE is rebased to latest upstream. | |
if: matrix.llvm < 11 | |
run: | | |
if [[ "${{matrix.compiler}}" = "clang" ]]; then | |
# libclang_rt.asan-x86_64.so must be loaded as the first library | |
# See https://systemd.io/TESTING_WITH_SANITIZERS for details. | |
export LD_PRELOAD="$(clang-${{matrix.llvm}} -print-file-name=libclang_rt.asan-x86_64.so)" | |
else | |
export LD_PRELOAD="$(gcc -print-file-name=libasan.so)" | |
fi | |
# Make symbiotic use correct clang & friends from PATH (e.g. no | |
# disguised ccache or problems with unversioned tools not being | |
# in PATH). | |
# | |
# Also, clang's ASAN and UBSAN expect unversioned llvm-symbolizer | |
# in PATH. | |
export PATH="$(llvm-config-${{matrix.llvm}} --bindir):$PATH" | |
# Due to LD_PRELOAD above, leak sanitizer was reporting leaks | |
# literally in everything that was executed, e.g. make, shell, | |
# python and other tools that are not under our control. | |
ASAN_OPTIONS=detect_leaks=0 make -C tests | |
- name: ccache statistics | |
run: ccache -s |