FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

GitHub Actionsを用いたsanity checkerをDockerを用いて構築する

自作RISC-Vコアの実装はGitHubを使って管理しているのだが、GitHub Actionsを使ってせいぜいVerilatorのLintチェッカーが落ちないように管理している。

このとき、GitHub Actionsを動かすためのYAMLを書く必要があるのだが、VerilatorのLintチェッカーを使うということはActionsを動かす環境にVerilatorが無いといけないということで、どうやってVerilatorを用意すればいいのか良く分からなかった。

最悪、これまではVerilatorを外部からダウンロードしてビルドし、それを動かすという無理やりなスクリプトを書いて動かしていたのだが、そうすると当然ビルドだけで時間を食ってしまい、GitHub Actionsを無料で使用できる1か月の最大時間容量を超えてしまいとても不便だった。

つまり無理やり以下のような「VerilatorをダウンロードしてビルドするGitHub Actions」を書いていたのだが、絶対このやり方は正しくない。

      # Build Verilator
      - name: Cache Verilator ${{ matrix.verilator }}
        uses: actions/cache@v2.1.6
        id: cache-verilator
        with:
          path: verilator-${{ matrix.verilator }}
          key: ${{ matrix.system }}-verilator-${{ matrix.verilator }}
      
      - name: Compile Verilator ${{ matrix.verilator }}
        # if: steps.cache-verilator.outputs.cache-hit != 'true'
        run: |
          wget https://github.com/verilator/verilator/archive/refs/tags/v${{ matrix.verilator }}.tar.gz
          tar xvf v${{ matrix.verilator }}.tar.gz
          cd verilator-${{ matrix.verilator }}
          autoconf
          ./configure
          make
      - name: Install Verilator ${{ matrix.verilator }}
        # if: steps.cache-verilator.outputs.cache-hit != 'true'
        run: |
          cd verilator-${{ matrix.verilator }}
          sudo make install
          verilator --version

これを変更して、VerilatorのインストールされたDockerコンテナを利用すればいいということらしい。

    strategy:
      matrix:
        system: ["ubuntu-20.04"]
        verilator: ["4.214"]

    # The type of runner that the job will run on
    runs-on: ${{ matrix.system }}
    container:
        image: verilator/verilator:latest

これだけでできた!簡単!今までどうしてちゃんと調べなかったんだろう。

f:id:msyksphinz:20220409230612p:plain