RISC-V 対応の自作エミュレータを作成している。テストパタンセットであるriscv-toolsがかなりPassできるようになってきた。
満足したところで公開したいので、一応リグレッションテストをいつでも実行できるような状態にしておきたい。
とりあえず自分で色々改造できるDockerのコンテナを持っておきたい。 このため、自分のRISC-VツールをインストールしたDockerコンテナを構築した。
これを使って、常にそのコンテナを呼び出すことによってRISC-Vのツールを呼び出すことができ、それに外部ボリュームとして自作エミュレータを接続することでRISC-Vのツールセットを使ったテストができるような環境を構築しておく。
やっていることは非常に単純なはずなのだが、なにぶんDockerはあまり慣れていないので常にトラブルが頻発する。
っていうか自宅のネットが遅すぎてDockerのためにUbuntuをダウンロードしたり、パッケージをダウンロードするのが非常に遅い... 一度Dockefileを間違えて修正すると一からコンテナを作り始めたのには閉口した。もう一回あのRISC-Vの大量のパッケージ群をダウンロードしなおしかよ...
とりあえず以下のようなDockerfileと、リグレッション用のスクリプトを用意している。
- Dockerfile
# Pull base image (use Wily for now). FROM ubuntu:17.10 # Set the maintainer MAINTAINER msyksphinz # Install some base tools that we will need to get the risc-v # toolchain working. RUN apt update && apt install -y \ autoconf \ automake \ autotools-dev \ bc \ ... # Make a working folder and set the necessary environment variables. ENV RISCV /riscv ENV NUMJOBS 4 RUN mkdir -p $RISCV # Add the GNU utils bin folder to the path. ENV PATH $RISCV/bin:$PATH # Obtain the RISCV-tools repo which consists of a number of submodules # so make sure we get those too. WORKDIR /opt/riscv RUN git clone https://github.com/riscv/riscv-tools.git && \ cd riscv-tools && git submodule update --init --recursive RUN apt update && apt install -y pkg-config libbfd-dev device-tree-compiler zlib1g-dev libz-dev # Now build the toolchain for RISCV. Set -j 1 to avoid issues on VMs. WORKDIR /opt/riscv/riscv-tools ENV MAKEFLAGS="-j4" RUN ./build.sh
ちなみにずーっと以下のエラーで悩まされ続けていたのだが、libexpat-dev
パッケージをダウンロードすることで解消可能らしい。
riscv-tools の情報は古いな...
RUN apt update && apt install -y pkg-config libbfd-dev device-tree-compiler zlib1g-dev libz-dev libexpat-dev
そして、ボリュームのマウントおよびコンテナの起動を行うためのスクリプトを用意した。
run_docker_test.sh
#!/bin/sh sudo docker run -v ${PWD}/riscv_iss:/root/riscv_iss\ -v ${PWD}/scripts:/root/scripts \ -it msyksphinz/riscv-docker \ /root/scripts/test_run.sh
そしてtest_run.sh
は実際にテストを行うスクリプトだ。
test_run.sh
#!/bin/sh export RISCV=/opt/riscv/ cd /root/riscv_iss/build_riscv_iss/isa_test/ make ISA_DIR=/root/