FPGA開発日記

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

Travis-CIで最新のツールを使ってリグレッションしたいときの対処法

僕のISSを、Travis-CIを使ってリグレッションをしてみることにした。基本的には、既にコンパイルしたパタンを一緒にアップロードしておき、これを流すことでリグレッションとする。 リグレッションには、CTestを使い、既にriscv-toolsより提供されているriscv-testsのパタンを流すことにした。

CMakeLists.txtは既に作成しており、500種類程度のパタンがCTestのパタンとして登録されている。

github.com

# CTest
enable_testing()

add_test (NAME rv32mi-p-csr          COMMAND ./isa_test.sh 32 ./isa-test-caf75e5/rv32mi-p-csr)
add_test (NAME rv32mi-p-illegal      COMMAND ./isa_test.sh 32 ./isa-test-caf75e5/rv32mi-p-illegal)
add_test (NAME rv32mi-p-ma_addr      COMMAND ./isa_test.sh 32 ./isa-test-caf75e5/rv32mi-p-ma_addr)
add_test (NAME rv32mi-p-ma_fetch     COMMAND ./isa_test.sh 32 ./isa-test-caf75e5/rv32mi-p-ma_fetch)
...

YAMLファイルを記述する

YAMLファイルとは、構造化データやオブジェクトを文字列としてシリアライズするためのファイル形式だ、、って何だか良く分からん。

YAML - Wikipedia

Rubyist Magazine - プログラマーのための YAML 入門 (初級編)

YAML (YAML Ain't Markup Language) とは、構造化されたデータを表現するためのフォーマットです。YAML は次のような用途に向いています。

各種設定ファイル データ保存用 (シリアライゼーション) データ交換用フォーマット ログファイル

そうなんだ。。。背景はさておき、リグレッションをするためのyamlファイルを記述していこう。Travis-CIで有効にするためには、.travis.ymlを記述する。

script:
    - cd ./vendor/gflags && cmake . && make && cd -
    - cd ./build_riscv && cmake . && make && cd -
    - cd ./build_riscv && ctest

このファイルをgit addし、pushすると、その時点でTravis-CIを動作させることができるようになる(もちろんgithubTravis-CIの事前の連携は必要になるが)。

ツールのバージョンが合わない場合

しかしいきなり詰まる。Travis-CI内で立ち上がる仮想マシンで、容易されるcmakeのバージョンが低すぎるのだ。どうしよう。。。

f:id:msyksphinz:20160112235555p:plain

$ cmake ./build_riscv ctest ./build_riscv
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 3.1 or higher is required.  You are running version 2.8.7

このままでは、C++11xを必要とするgccのバージョンも古いことになってしまう。あ、あとISSの実行にはliblua-5.2とbinutilsが必要だな。。。どうすれば良いんだろう。

リグレッションを実行する前に必要なツールをインストールする

これを解決するためには、yamlで before_script というラベルを用意する。

before_script:
    - sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
    - sudo apt-get -qq update
    - sudo apt-get -qq install liblua5.2-dev libbfd-dev g++-4.9 -y
    - wget --no-check-certificate -qO- http://www.cmake.org/files/v3.4/cmake-3.4.1-Linux-x86_64.tar.gz -O /tmp/cmake-3.4.1-Linux-x86_64.tar.gz
    - tar -xvf /tmp/cmake-3.4.1-Linux-x86_64.tar.gz
    - export PATH=$PWD/cmake-3.4.1-Linux-x86_64/bin/:$PATH

ずいぶんと長ったらしいが、まずはUbuntuリポジトリのアップデート、必要なライブラリのインストール、そして今回は最新のCMakeが必要なためダウンロードと展開(wgetの利用にはno-check-certificateが必要らしい)を行った。 さらにパスを設定することでCMakeの実行パスはインストールしたものに置き換わる。

ついでに、GCCのバージョンも最新にしてしまおう。

    - export CXX="g++-4.9"
    - export CC="gcc-4.9"

まだ設定するべきところがあるらしい(まだ途中)

f:id:msyksphinz:20160113000045p:plain

上記のバージョン問題はこれで解決したが、まだ解決しなければならない問題があるらしい。コンパイル中に失敗するので、これはのちのち追い掛けていこう。