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' - 'gcc-11' cpp_std: - 'c++11' - 'c++14' - 'c++17' - 'c++20' include: # Limit the older compilers to C++11 mode - os: { id: ubuntu-20.04, name: focal } compiler: 'clang-11' cpp_std: 'c++11' - os: { id: ubuntu-20.04, name: focal } compiler: 'gcc-10' 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 echo "CXXFLAGS=-Wp,-D_GLIBCXX_ASSERTIONS" >> $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@v4 with: submodules: true - name: Get iverilog shell: bash run: | git clone https://github.com/steveicarus/iverilog.git cd iverilog echo "IVERILOG_GIT=$(git rev-parse HEAD)" >> $GITHUB_ENV - name: Cache iverilog id: cache-iverilog uses: actions/cache@v4 with: path: .local/ key: ${{ matrix.os.id }}-${{ env.IVERILOG_GIT }} - 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 shell: bash run: | make config-${CC%%-*} make -j${{ env.procs }} CXXSTD=${{ matrix.cpp_std }} CC=$CC CXX=$CC LD=$CC - name: Store build artifact if: (matrix.cpp_std == 'c++11') && (matrix.compiler == 'gcc-11') uses: actions/upload-artifact@v4 with: name: compiled-yosys path: yosys - name: Run tests if: (matrix.cpp_std == 'c++11') && (matrix.compiler == 'gcc-11') shell: bash run: | make -j${{ env.procs }} test CXXSTD=${{ matrix.cpp_std }} CC=$CC CXX=$CC LD=$CC - name: Log yosys-config output run: | ./yosys-config || true