FPGA開発日記

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

RISC-Vの開発環境をcrosstool-ngとriscv-toolsでセットアップする方法

RISC-Vでのハードウェア・ソフトウェア開発をするにあたり、まず必要になるのがツール群だ。

RISC-Vのソフトウェアツール群は、riscv-toolsというリポジトリにまとめられており、まずはこのリポジトリをダウンロードしてコンパイラなどを構築する必要がある。 しかし、このリポジトリはサブリポジトリを含めコンパイラソースコードをすべてダウンロードするなど、すべてダウンロードすると数GBになってしまうためディスク容量を食ったり、ネットワーク要領を食ったりして非常に不便なものだった。

github.com

ところがここ最近、このriscv-toolsがアップデートされ、コンパイラなどの重たいツール群が除去された。 リポジトリが軽くなったのは良いことなのだが、ではコンパイラはどこから持ってくるのか?READMEを参照すると、crosstool-ngを使用する、と書いてある。 なるほど、crosstool-ngはもうRISC-Vに対応しているのか。ならば、crosstool-ngとriscv-toolsでRISC-Vの開発環境を構築できるはずだ。やってみよう。

crosstool-ngのインストール

crosstool-ngは以下のページからダウンロードする。

crosstool-ng.github.io

cd /tmp
curl -L http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.24.0.tar.xz | tar Jx
cd crosstool-ng-1.24.0
./configure
make -j$(nproc)
sudo make install

これでct-ngコマンドが使えるようになった。

ct-ngコマンドで、サンプルターゲットを確認しよう。

ct-ng update-samples
ct-ng list-samples | grep riscv
$ ct-ng list-samples | grep riscv
[G..X]   riscv32-hifive1-elf
[G..X]   riscv32-unknown-elf
[G..X]   riscv64-unknown-elf
[G..X]   riscv64-unknown-linux-gnu

そこで、riscv64-unknown-elfをインストールしてみる。

$ ct-ng riscv64-unknown-elf
  CONF  riscv64-unknown-elf
#
# configuration written to .config
#

***********************************************************

Initially reported by: Paul Walmsley <paul.walmsley@sifive.com>
URL: https://www.sifive.com/

***********************************************************

WARNING! This sample may enable experimental features.
         Please be sure to review the configuration prior
         to building and using your toolchain!
Now, you have been warned!

***********************************************************

Now configured for "riscv64-unknown-elf"

ct-ng menuconfigで、PREFIXを設定してインストールする先を指定する。

f:id:msyksphinz:20190510015507p:plain
ct-ng menuconfigでのPREFIXの設定

ビルドする。

ct-ng build
[INFO ]  Performing some trivial sanity checks
[WARN ]  Number of open files 1024 may not be sufficient to build the toolchain; increasing to 2048
[INFO ]  Build started 20190509.232202
[INFO ]  Building environment variables
[WARN ]  Directory '/home/msyksphinz/src' does not exist.
[WARN ]  Will not save downloaded tarballs to local storage.
[EXTRA]  Preparing working directories
[EXTRA]  Installing user-supplied crosstool-NG configuration
[EXTRA]  =================================================================
[EXTRA]  Dumping internal crosstool-NG configuration
[EXTRA]    Building a toolchain for:
...
[INFO ]    Stripping all toolchain executables
[EXTRA]    Creating toolchain aliases
[EXTRA]    Removing installed documentation
[EXTRA]    Collect license information from: /tmp/riscv64/.build/riscv64-unknown-elf/src
[EXTRA]    Put the license information to: /home/msyksphinz/riscv64-ctng/share/licenses
[INFO ]  Finalizing the toolchain's directory: done in 40.42s (at 87:59)
[INFO ]  Build completed at 20190510.004957
[INFO ]  (elapsed: 87:55.45)
[INFO ]  Finishing installation (may take a few seconds)...
[87:59] / %

ここまでで、インストール先を確認する。PREFIX=/home/msyksphinz/riscv64-ctngにインストールした。

$ ls -l riscv64-ctng
total 764
dr-xr-xr-x 1 msyksphinz msyksphinz   4096  5月 10 00:49 bin
-r--r--r-- 1 msyksphinz msyksphinz 782011  5月 10 00:49 build.log.bz2
dr-xr-xr-x 1 msyksphinz msyksphinz   4096  5月 10 00:38 include
dr-xr-xr-x 1 msyksphinz msyksphinz   4096  5月 10 00:38 lib
dr-xr-xr-x 1 msyksphinz msyksphinz   4096  5月 10 00:38 libexec
dr-xr-xr-x 1 msyksphinz msyksphinz   4096  5月 10 00:26 riscv64-unknown-elf
dr-xr-xr-x 1 msyksphinz msyksphinz   4096  5月 10 00:49 share

このツール群は、PATHLD_LIBRARY_PATHを通しておく。次にriscv-toolsをダウンロードして、ビルドする。

cd riscv-tools
export PATH=${HOME}/riscv64-ctng-tools
MAKEFLAGS="-j$(nproc)" ./build.sh

これでしばらく待っているとビルドが完了する。これで、crosstool-ngを使ったRISC-Vコンパイラの構成とriscv-toolsのツール群の構築が完了した。