自作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
これだけでできた!簡単!今までどうしてちゃんと調べなかったんだろう。