ci: expanded the Linux test suite to cover more compilers and C++ versions
authorAki Van Ness <aki@yosyshq.com>
Wed, 27 Oct 2021 23:18:16 +0000 (19:18 -0400)
committerAki Van Ness <aki@yosyshq.com>
Mon, 1 Nov 2021 00:07:43 +0000 (20:07 -0400)
.github/workflows/test-linux.yml [new file with mode: 0644]

diff --git a/.github/workflows/test-linux.yml b/.github/workflows/test-linux.yml
new file mode 100644 (file)
index 0000000..ef47d4d
--- /dev/null
@@ -0,0 +1,125 @@
+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