name: cereal linux ci on: [push, pull_request] jobs: test_cereal_linux: runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DSKIP_PERFORMANCE_COMPARISON=ON' COMPILER: 'g++-4.7' EXTRA_APT_PACKAGES: 'g++-4.7' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-g++4.7 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DSKIP_PERFORMANCE_COMPARISON=ON' COMPILER: 'g++-4.8' EXTRA_APT_PACKAGES: 'g++-4.8' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-g++4.8 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DSKIP_PERFORMANCE_COMPARISON=ON' COMPILER: 'g++-4.9' EXTRA_APT_PACKAGES: 'g++-4.9' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-g++4.9 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON' COMPILER: 'g++-5' EXTRA_APT_PACKAGES: 'g++-5' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-g++4.5 - COMPILER: 'g++-5' EXTRA_APT_PACKAGES: 'gcc-multilib g++-5-multilib linux-libc-dev' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-g++5-multilib - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON' COMPILER: 'g++-6' EXTRA_APT_PACKAGES: 'g++-6' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-g++6 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17' COMPILER: 'g++-7' EXTRA_APT_PACKAGES: 'g++-7' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-g++7 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17' COMPILER: 'g++-8' EXTRA_APT_PACKAGES: 'g++-8' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-g++8 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17' COMPILER: 'g++-9' EXTRA_APT_PACKAGES: 'g++-9' CONTAINER: ubuntu:20.04 NAME: ubuntu-20.04-g++9 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17' COMPILER: 'g++-10' EXTRA_APT_PACKAGES: 'g++-10' CONTAINER: ubuntu:20.04 NAME: ubuntu-20.04-g++10 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON' COMPILER: 'clang++-3.5' EXTRA_APT_PACKAGES: 'clang-3.5' LLVM_APT_SOURCE: 'deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.5 main' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-clang-3.5 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON' COMPILER: 'clang++-3.6' EXTRA_APT_PACKAGES: 'clang-3.6' LLVM_APT_SOURCE: 'deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.6 main' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-clang-3.6 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON' COMPILER: 'clang++-3.7' EXTRA_APT_PACKAGES: 'clang-3.7' LLVM_APT_SOURCE: 'deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.7 main' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-clang-3.7 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON' COMPILER: 'clang++-3.8' EXTRA_APT_PACKAGES: 'clang-3.8' LLVM_APT_SOURCE: 'deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.8 main' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-clang-3.8 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON' COMPILER: 'clang++-3.9' EXTRA_APT_PACKAGES: 'clang-3.9' LLVM_APT_SOURCE: 'deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.9 main' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-clang-3.9 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON' COMPILER: 'clang++-4.0' EXTRA_APT_PACKAGES: 'clang-4.0 g++-5' LLVM_APT_SOURCE: 'deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-4.0 main' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-clang-4.0 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON' COMPILER: 'clang++-5.0' EXTRA_APT_PACKAGES: 'clang-5.0 g++-7' LLVM_APT_SOURCE: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-5.0 main' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-clang-5.0 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17' COMPILER: 'clang++-5.0' EXTRA_APT_PACKAGES: 'clang-5.0 g++-7' LLVM_APT_SOURCE: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-5.0 main' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-clang-5.0-cpp17 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17' COMPILER: 'clang++-7' EXTRA_APT_PACKAGES: 'clang-7 g++-7' LLVM_APT_SOURCE: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-7 main' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-clang-7-cpp17 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17 -DCLANG_USE_LIBCPP=ON -DSKIP_PERFORMANCE_COMPARISON=ON' COMPILER: 'clang++-8' EXTRA_APT_PACKAGES: 'clang-8 g++-8 libc++-8-dev libc++abi-8-dev' LLVM_APT_SOURCE: 'deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main' CONTAINER: ubuntu:16.04 NAME: ubuntu-16.04-clang-8-cpp17 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17' COMPILER: 'clang++-9' EXTRA_APT_PACKAGES: 'clang-9' CONTAINER: ubuntu:20.04 NAME: ubuntu-20.04-clang-9-cpp17 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17' COMPILER: 'clang++-10' EXTRA_APT_PACKAGES: 'clang-10' CONTAINER: ubuntu:20.04 NAME: ubuntu-20.04-clang-10-cpp17 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17' COMPILER: 'clang++-11' EXTRA_APT_PACKAGES: 'clang-11' CONTAINER: ubuntu:20.04 NAME: ubuntu-20.04-clang-11-cpp17 - CMAKE_OPTIONS: '-DSKIP_PORTABILITY_TEST=ON -DCMAKE_CXX_STANDARD=17' COMPILER: 'clang++-12' EXTRA_APT_PACKAGES: 'clang-12' CONTAINER: ubuntu:20.04 NAME: ubuntu-20.04-clang-12-cpp17 name: ${{ matrix.name }} steps: - name: Check out the repo uses: actions/checkout@v4 - name: install deps and test uses: addnab/docker-run-action@v3 with: image: ${{ matrix.CONTAINER }} options: -v ${{ github.workspace }}:/var/workspace shell: bash run: | set -ex apt-get update -y DEBIAN_FRONTEND=noninteractive TZ=America/Los_Angeles apt-get install -y software-properties-common wget python3-pip make apt-transport-https # Add apt repositories for older Ubuntu . /etc/os-release if [[ "${VERSION_ID}" == "16.04" ]]; then add-apt-repository ppa:ubuntu-toolchain-r/test -y add-apt-repository ppa:mhier/libboost-latest -y fi if [[ "${{ matrix.LLVM_APT_SOURCE }}" != "" ]]; then wget -qO - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - add-apt-repository "${{ matrix.LLVM_APT_SOURCE }}" fi apt-get update -y # Install apt packages apt-get install libboost-serialization-dev libboost-dev ${{ matrix.EXTRA_APT_PACKAGES }} -y pip3 install --upgrade "pip < 21.0" pip3 install cmake # Set compiler and env variables cd /var/workspace export CXX=${{ matrix.COMPILER }} ${CXX} --version DEPS_DIR="${PWD}/deps" mkdir -p "${DEPS_DIR}" pushd "${DEPS_DIR}" JOBS=2 # Install the right version of libc++ LLVM_INSTALL=${DEPS_DIR}/llvm/install # if in linux and compiler clang and llvm not installed if [[ "${CXX}" == "clang"* && -n "$(ls -A ${LLVM_INSTALL})" ]]; then if [[ "${CXX}" == "clang++-3.6" ]]; then LLVM_VERSION="3.6.2"; elif [[ "${CXX}" == "clang++-3.7" ]]; then LLVM_VERSION="3.7.1"; elif [[ "${CXX}" == "clang++-3.8" ]]; then LLVM_VERSION="3.8.1"; elif [[ "${CXX}" == "clang++-3.9" ]]; then LLVM_VERSION="3.9.1"; fi LLVM_URL="http://llvm.org/releases/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz" LIBCXX_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxx-${LLVM_VERSION}.src.tar.xz" LIBCXXABI_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxxabi-${LLVM_VERSION}.src.tar.xz" mkdir -p llvm llvm/build llvm/projects/libcxx llvm/projects/libcxxabi wget -O - ${LLVM_URL} | tar --strip-components=1 -xJ -C llvm wget -O - ${LIBCXX_URL} | tar --strip-components=1 -xJ -C llvm/projects/libcxx wget -O - ${LIBCXXABI_URL} | tar --strip-components=1 -xJ -C llvm/projects/libcxxabi (cd llvm/build && cmake .. -DCMAKE_INSTALL_PREFIX=${LLVM_INSTALL}) (cd llvm/build/projects/libcxx && make install -j2) (cd llvm/build/projects/libcxxabi && make install -j2) export CXXFLAGS="-isystem ${LLVM_INSTALL}/include/c++/v1" export LDFLAGS="-L ${LLVM_INSTALL}/lib -l c++ -l c++abi" export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${LLVM_INSTALL}/lib" fi popd # Build cereal and test cmake --version mkdir build && cd build cmake ${{ matrix.CMAKE_OPTIONS }} .. && make -j4 VERBOSE=1 ctest . --output-on-failure