--- /dev/null
+name: Build and run tests (Linux)
+
+on: [push, pull_request]
+
+jobs:
+ test-linux:
+ runs-on: ${{ matrix.os.id }}
+ strategy:
+ matrix:
+ os:
+ - { id: ubuntu-20.04, name: focal }
+ compiler:
+ - 'clang-12'
+ - 'clang-11'
+ - 'gcc-11'
+ - 'gcc-10'
+ cpp_std:
+ - 'c++11'
+ - 'c++14'
+ - 'c++17'
+ - 'c++20'
+ include:
+ # Limit the older compilers to C++11 mode
+ - os: { id: ubuntu-18.04, name: bionic }
+ compiler: 'clang-3.9'
+ cpp_std: 'c++11'
+ - os: { id: ubuntu-18.04, name: bionic }
+ compiler: 'gcc-4.8'
+ cpp_std: 'c++11'
+ fail-fast: false
+ steps:
+ - name: Install Dependencies
+ shell: bash
+ run: |
+ sudo apt-get update
+ sudo apt-get install gperf build-essential bison flex libreadline-dev gawk tcl-dev libffi-dev git graphviz xdot pkg-config python python3 libboost-system-dev libboost-python-dev libboost-filesystem-dev zlib1g-dev
+
+ - name: Setup GCC
+ if: startsWith(matrix.compiler, 'gcc')
+ shell: bash
+ run: |
+ CXX=${CC/#gcc/g++}
+ sudo apt-add-repository ppa:ubuntu-toolchain-r/test
+ sudo apt-get update
+ sudo apt-get install $CC $CXX
+ echo "CC=$CC" >> $GITHUB_ENV
+ echo "CXX=$CXX" >> $GITHUB_ENV
+ env:
+ CC: ${{ matrix.compiler }}
+
+ - name: Setup Clang
+ if: startsWith(matrix.compiler, 'clang')
+ shell: bash
+ run: |
+ wget https://apt.llvm.org/llvm-snapshot.gpg.key
+ sudo apt-key add llvm-snapshot.gpg.key
+ rm llvm-snapshot.gpg.key
+ sudo apt-add-repository "deb https://apt.llvm.org/${{ matrix.os.name }}/ llvm-toolchain-${{ matrix.os.name }} main"
+ sudo apt-get update
+ CXX=${CC/#clang/clang++}
+ sudo apt-get install $CC $CXX
+ echo "CC=$CC" >> $GITHUB_ENV
+ echo "CXX=$CXX" >> $GITHUB_ENV
+ env:
+ CC: ${{ matrix.compiler }}
+
+ - name: Runtime environment
+ shell: bash
+ env:
+ WORKSPACE: ${{ github.workspace }}
+ run: |
+ echo "GITHUB_WORKSPACE=`pwd`" >> $GITHUB_ENV
+ echo "$GITHUB_WORKSPACE/.local/bin" >> $GITHUB_PATH
+ echo "procs=$(nproc)" >> $GITHUB_ENV
+
+ - name: Tool versions
+ shell: bash
+ run: |
+ $CC --version
+ $CXX --version
+
+ - name: Checkout Yosys
+ uses: actions/checkout@v2
+
+ - name: Get iverilog
+ shell: bash
+ run: |
+ git clone git://github.com/steveicarus/iverilog.git
+
+ - name: Cache iverilog
+ id: cache-iverilog
+ uses: actions/cache@v2
+ with:
+ path: .local/
+ key: ${{ matrix.os.id }}-${{ hashFiles('iverilog/.git/refs/heads/master') }}
+
+ - name: Build iverilog
+ if: steps.cache-iverilog.outputs.cache-hit != 'true'
+ shell: bash
+ run: |
+ mkdir -p $GITHUB_WORKSPACE/.local/
+ cd iverilog
+ autoconf
+ CC=gcc CXX=g++ ./configure --prefix=$GITHUB_WORKSPACE/.local
+ make -j${{ env.procs }}
+ make install
+
+ - name: Build yosys (gcc-4.8)
+ if: matrix.compiler == 'gcc-4.8'
+ shell: bash
+ run: |
+ make config-${{ matrix.compiler }}
+ make -j${{ env.procs }} CCXXSTD=${{ matrix.cpp_std }} CC=$CC CXX=$CC LD=$CC
+
+ - name: Build yosys
+ if: matrix.compiler != 'gcc-4.8'
+ shell: bash
+ run: |
+ make config-${CC%%-*}
+ make -j${{ env.procs }} CCXXSTD=${{ matrix.cpp_std }} CC=$CC CXX=$CC LD=$CC
+
+ - name: Run tests
+ shell: bash
+ run: |
+ make -j${{ env.procs }} test CXXSTD=${{ matrix.cpp_std }} CC=$CC CXX=$CC LD=$CC