FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

CMakeとISSテスト環境を構築する手順

ISSのリグレッションテストを実行するための環境を構築していこう。

CMakeを使ってリグレッションの環境を構築する

CMakeLists.txtの記述

CMakeには、CTestというテスト環境を構築するためのパッケージがある。

CMake/Testing With CTest - KitwarePublic

CTestの使い方は簡単だ。CMakeListsに、テストしたい内容をadd_testとして記述しておけば、あとでCTestのコマンドを叩くだけで、add_testの内容を実行してくれる。

add_test — CMake 3.0.2 Documentation

add_testの使い方は、上記のマニュアルに書いてあるとおり、

add_test(NAME <name> COMMAND <command> [<arg>...]
         [CONFIGURATIONS <config>...]
         [WORKING_DIRECTORY <dir>])

ISSでのテストパタンを実行するために、CMakeLists.txtにテストパタンを追加していった。

github.com

# CTest
enable_testing()

add_test (NAME rv32mi-p-csr          COMMAND ./swimmer_riscv --binfile ./isa-test-caf75e5/rv32mi-p-csr         --debug | grep mtohost)
add_test (NAME rv32mi-p-illegal      COMMAND ./swimmer_riscv --binfile ./isa-test-caf75e5/rv32mi-p-illegal     --debug | grep mtohost)
add_test (NAME rv32mi-p-ma_addr      COMMAND ./swimmer_riscv --binfile ./isa-test-caf75e5/rv32mi-p-ma_addr     --debug | grep mtohost)
...
  • NAME : テストパタンの名前
  • COMMAND : テストを実行する際のコマンド 上記のパタンでは、ISSでパタンを実行して、その結果を回収している(ただし、まだ実装途中なので、grepで結果を抽出しているだけでPass/Failをうまく処理できていないが...)

CTestのためのパッケージを追加

CTestで実行するためには、リグレッションのパタンを用意していなければならない。これにはriscv-testsのISAパタンを利用するのが最適だが、バイナリを用意するためにはRISC-V用のGCCまで用意しなければならない。 後述するが、これをTravis-CIの上で実行するのは時間がかかりすぎる。それよりも、事前にコンパイルしたパタンをリポジトリに用意しておいたほうが良い。

github.com

Travis-CIを使ってリグレッションを実行する

Travis-CIは、githubと連携してリグレッションを実行するためのサービスだ。

.travis.ymlを記述する

github.com

ISSC++で記述してあるので、cmakeを使ってテストパタンリストを構築し、ctestでリグレッションを実行するだけで良い。

script:
    cmake ./build_riscv
    ctest ./build_riscv

Travis-CIのCMakeのバージョンを上げることは可能なのか?

ISSのCMakeは3.1以上を必要としているのだが、Travis-CIのCMakeは2.8だったので、コンパイルすることができない。これは何とかならないかなあ?

stackoverflow.com

このバグがあるので、CMake 2.8は御法度なのだ。バージョンアップしてほしい。