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にテストパタンを追加していった。
# 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の上で実行するのは時間がかかりすぎる。それよりも、事前にコンパイルしたパタンをリポジトリに用意しておいたほうが良い。
Travis-CIを使ってリグレッションを実行する
Travis-CIは、githubと連携してリグレッションを実行するためのサービスだ。
.travis.ymlを記述する
ISSはC++で記述してあるので、cmakeを使ってテストパタンリストを構築し、ctestでリグレッションを実行するだけで良い。
script: cmake ./build_riscv ctest ./build_riscv
Travis-CIのCMakeのバージョンを上げることは可能なのか?
ISSのCMakeは3.1以上を必要としているのだが、Travis-CIのCMakeは2.8だったので、コンパイルすることができない。これは何とかならないかなあ?
このバグがあるので、CMake 2.8は御法度なのだ。バージョンアップしてほしい。