LoginSignup
1
0

More than 1 year has passed since last update.

RISC-Vのコンパイル・シミュレーション環境構築

Last updated at Posted at 2023-05-26

RISC-V命令セットの実行環境

RISC-Vのアセンブリコードを実行するためには以下のツールが必要です。

これらをビルドする

これらのツールは手動でビルドするので正直めんどうですし、ビルド時間が長いです(特にtoolchain)

めんどうなのでDockerに環境を構築しました

これらのツールをDockerに構築しました。
ちなみにアーキテクチャはRV64G、ABIはLP64Dです。

docker pull reten/riscv_exe:latest

Dockerfile

一応Dockerfileも。
初めてDockerfileを書いたということもあって結構苦戦しました。
オプションでアーキテクチャとABIを指定しないとうまくいきません。(当たり前ですが)
/opt/riscv/にインストールしてますが、ここはどこでも大丈夫です。
prefixとアーキテクチャやABIは自由に変えてください。

参考:

FROM ubuntu:bionic

WORKDIR /app
 
ENV PATH=$PATH:/opt/riscv/bin
ENV PATH=$PATH:/opt/riscv/spike/bin
ENV HOME=/root
ENV USER=root 
ENV TOOL_PATH=/app/riscv-gnu-toolchain/build
ENV SPIKE_PATH=/app/riscv-isa-sim/build
ENV PK_PATH=/app/riscv-pk/build

RUN apt update && \
	apt install -y \
	autoconf \
	automake \
	autotools-dev \
	curl \
	python3 \
	libmpc-dev \
	libmpfr-dev \
	libgmp-dev \
	gawk \
	build-essential \
	bison \
	flex \
	texinfo \
	gperf \
	libtool \
	patchutils \
	bc \
	zlib1g-dev \
	libexpat-dev \
	git \
	device-tree-compiler \
	vim 
	
RUN git clone --recursive https://github.com/riscv/riscv-gnu-toolchain

WORKDIR /app/riscv-gnu-toolchain
	
WORKDIR $TOOL_PATH

RUN	../configure --prefix=/opt/riscv --with-arch=rv64g --with-abi=lp64d && \
	make -j$(nproc)

WORKDIR /app

RUN 	rm -r riscv-gnu-toolchain && \
	git clone https://github.com/riscv/riscv-isa-sim

WORKDIR $SPIKE_PATH

RUN	../configure --prefix=/opt/riscv/spike --with-isa=rv64g && \
	make && \
	make install

WORKDIR /app

RUN 	rm -r riscv-isa-sim && \
	git clone https://github.com/riscv/riscv-pk

WORKDIR $PK_PATH

RUN	../configure --prefix=/opt/riscv/pk --host=riscv64-unknown-elf --with-arch=rv64g --with-abi=lp64d && \
	make && \
	make install

WORKDIR /app

COPY script /app/script

RUN	rm -r riscv-pk && \
	cp script/env.sh /app/.env.sh && echo ". /app/.env.sh" >> ${HOME}/.bashrc

補足:Dockerfileの書き方

余談ですが、Dockerfileの書き方を書いておきます。(ほぼ自分用)

ubuntuのバージョン
https://hub.docker.com/_/ubuntu/tags

Dockerfileベストプラクティス
https://docs.docker.jp/develop/develop-images/dockerfile_best-practices.html#cmd

Dockerfileはcdコマンド、mkdirコマンドが使えません。
ENVで指定したパスをWORKDIRで指定することで、ディレクトリを移動します。
また構築環境内で通したいパスはDockerfileをビルドする際には指定することができません。(Dockerfile内のENVはあくまでもビルドするときに通すパスです)
上記のDockerfileは、containerを起動するときにディレクトリscriptにあるenv.shを実行することでパスを通します。
詳しくは以下のリポジトリを確認してください。
https://github.com/rei0515reten/pointerbook-sample/tree/main/image

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0