aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows/test-linux.yml
blob: b974757c4e8cbfbc659ac61b59e399fb4c10f38e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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'
          - 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@v3

      - name: Get iverilog
        shell: bash
        run: |
          git clone https://github.com/steveicarus/iverilog.git

      - name: Cache iverilog
        id: cache-iverilog
        uses: actions/cache@v3
        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
        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