FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス <a href="https://msyksphinz.github.io/github_pages/">

RISC-VツールセットをインストールしたDockerコンテナ作成(1. 検討)

f:id:msyksphinz:20180418005224p:plain

RISC-V 対応の自作エミュレータを作成している。テストパタンセットであるriscv-toolsがかなりPassできるようになってきた。

満足したところで公開したいので、一応リグレッションテストをいつでも実行できるような状態にしておきたい。

というわけで、RISC-VのツールセットをインストールしたDockerコンテナの作成方法について調査を始めよう。 というか、Dockerコンテナについてあまり詳しくないから、勉強しなければ...

RISC-Vのツール群が入ったDockerコンテナ

手っ取り早くDockerコンテナを用意したければ、以下のコンテナがGitHubに用意されていた。

github.com

以下で起動することができた。

sudo docker pull sbates130272/riscv
sudo docker run -it sbates130272/riscv

これでもいいのだけれど、自分で管理できるRISC-V環境を維持しておきたいし、自作エミュレータをリグレッションする環境を構築したいので、自分でDockerコンテナを管理しておきたい。

というわけで自分で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 \
...
  libtool \
  ncurses-dev \
  patchutils \
  squashfs-tools \
  texinfo

さらにビルドを行うために、riscv-tools をcloneしてビルドする環境を作っておく。

# Make a working folder and set the necessary environment variables.
ENV RISCV /opt/riscv
ENV NUMJOBS 1
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 $RISCV
RUN git clone https://github.com/riscv/riscv-tools.git && \
  cd riscv-tools && git submodule update --init --recursive

ここまでで、RISC-Vのツールチェインが動作するDockerコンテナを作ることができた。

docker build -t msyksphinz/riscv-docker
sudo docker run -it msyksphinz/riscv-docker   # Login

2018/04/20追記。自作RISC-Vエミュレータのビルドも行ってみた。以下でDocker上でエミュレータをclone, コンパイルすることができる。 あとはリグレッションだな。

RUN git clone https://msyksphinz:PASSWORD@bitbucket.org/msyksphinz/riscv_swimmer.git && \
  cd riscv_swimmer/ && git submodule update --init --recursive

RUN cd riscv_swimmer/vendor/gflags && cmake . && make
RUN cd riscv_swimmer/vendor/softfloat/build && cmake . && make
RUN cd riscv_swimmer/build_riscvforest/ && cmake . && make