ハードウェアの気になるあれこれ

技術的に興味のあることを調べて書いてくブログ。主にハードウェアがネタ。

riscv-toolsリポジトリのデータでRV32Iのビルド環境を作りなおした話

スポンサーリンク

RISC-Vのビルド環境を作りなおす必要が出てきたので、せっかくだから最新のriscv-toolsのリポジトリの環境を使って作りなおすことにした。 今回はその際に幾つか躓いた部分があったのでそれについてまとめておく。

crosstool-ngを使ったRISC-Vのコンパイラのビルド

既にmsyksphinzさんが試してくれているので、ほぼ以下の記事に従って作業を進めさせてもらいました。

上記記事にもあるとおりで今年の3月の終わりくらいのタイミングでriscv-toolsのリポジトリにriscv-gnu-toolchaint等のリポジトリのサブモジュール登録が削除された。 その代替としてcrosstool-ngを使ったビルド方法が記載されている。

環境

作業の前に今回ビルドに使った際の環境は以下

Ubuntu 18.04 LTS gcc : gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)

crosstool-ngのインストール

ソースコードの取得

以下で本記事執筆時点での最新版であるv1.24.0のソースを取得する。

curl -L http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.24.0.tar.xz | tar Jx

configure & build & install

解凍したディレクトリに入りconfigureを実行する。

 ./configure --prefix=/usr/local
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
~略~
checking for readlink... readlink
checking for tar... tar
checking for gzip... gzip
checking for bzip2... bzip2
checking for xz... xz
checking for unzip... unzip
checking for help2man... no
configure: error: missing required tool: help2man

configureが途中で止まってしまった。help2manが無いと怒られたのでインストール。

$ sudo apt install help2man
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  help2man
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
162 kB のアーカイブを取得する必要があります。
この操作後に追加で 475 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu bionic/universe amd64 help2man amd64 1.47.6 [162 kB]
162 kB を 1秒 で取得しました (130 kB/s)
以前に未選択のパッケージ help2man を選択しています。
(データベースを読み込んでいます ... 現在 347193 個のファイルとディレクトリがインストールされています。)
.../help2man_1.47.6_amd64.deb を展開する準備をしています ...
help2man (1.47.6) を展開しています...
help2man (1.47.6) を設定しています ...
install-info (6.5.0.dfsg.1-2) のトリガを処理しています ...
man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ...

インストール後に再度configureを実行し直す。

$ ./configure --prefix=/usr/local
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
~略~
checking for help2man... help2man
~略~
checking for GNU libtool >= 2.4... no
configure: error: Required tool not found: libtool

今度はlibtoolが無いと言われるのでとりあえず適当にインストールを試みる。

$ sudo apt install libtool
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
libtool はすでに最新バージョン (2.4.6-2) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。

上記だと既に最新と言われてしまったので、apt searchでそれっぽいのが無いかを探してみた。

$ apt search ^libtool
ソート中... 完了
全文検索... 完了
libtool/bionic,bionic,now 2.4.6-2 all [インストール済み]
  汎用ライブラリサポートスクリプト

libtool-bin/bionic 2.4.6-2 amd64
  Generic library support script (libtool binary)

libtool-doc/bionic,bionic,now 2.4.6-2 all [インストール済み]
  汎用ライブラリサポートスクリプト

libtoolkit-perl/bionic,bionic 0.0.2-2 all
  Keep your handy modules organized

libtools-analyzer-clojure/bionic,bionic 0.6.9-1 all
  analyzer for host agnostic Clojure code

libtools-analyzer-jvm-clojure/bionic,bionic 0.7.1-3 all
  analyzer for Clojure code providing additional jvm-specific passes

libtools-cli-clojure/bionic,bionic 0.3.5-2 all
  command line argument parser for Clojure

libtools-logging-clojure/bionic,bionic 0.2.3-6 all
  Logging macros for Clojure

libtools-macro-clojure/bionic,bionic 0.1.5-2 all
  Clojure tools for writing macros

libtools-namespace-clojure/bionic,bionic 0.2.11-1 all
  tools for managing namespaces in Clojure

libtools-nrepl-clojure/bionic,bionic 0.2.12-1 all
  Clojure network REPL

libtools-reader-clojure/bionic,bionic 1.0.0-1 all
  complete Clojure and EDN-only reader

libtools-trace-clojure/bionic,bionic 0.7.9-1 all
  Clojure tracing facility in Clojure

以下のパッケージが怪しいので、インストールして再度トライ。

libtool-bin/bionic 2.4.6-2 amd64
  Generic library support script (libtool binary)
  • libtool-binのインストール
$ sudo apt install libtool-bin
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  libtool-bin
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
79.5 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 395 kB のディスク容量が消費されます。
以前に未選択のパッケージ libtool-bin を選択しています。
(データベースを読み込んでいます ... 現在 347255 個のファイルとディレクトリがインストールされています。)
.../libtool-bin_2.4.6-2_amd64.deb を展開する準備をしています ...
libtool-bin (2.4.6-2) を展開しています...
libtool-bin (2.4.6-2) を設定しています ...
man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ...

libtool-binをインストール後に再度configureを実行。

$ ./configure --prefix=/usr/local
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
~略~
checking for libtool... /usr/bin/libtool
checking for GNU libtool >= 2.4... yes
~略~
configure: creating ./config.status
config.status: creating Makefile
config.status: creating paths.sh
config.status: creating kconfig/Makefile
config.status: creating config/configure.in
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands

無事configureが通った。

ビルド&インストール

後は通常の手順に従いビルドをインストールを実施。

make && sudo make install

コマンドが使えるかを確認して、問題なさそう。

$ ct-ng --version
GNU Make 4.1
このプログラムは x86_64-pc-linux-gnu 用にビルドされました
Copyright (C) 1988-2014 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 以降 <http://gnu.org/licenses/gpl.html>
これはフリーソフトウェアです: 自由に変更および配布できます.
法律の許す限り、 無保証 です.

crosstool-ngを使ったRISC-V環境の構築

ここからがcrosstool-ngを使ったRISC-Vのコンパイラのビルドになる。

アップデートの確認

冒頭に紹介させてもらった記事に従いupdateを実施。

$ ct-ng update-samples
Updating moxie-unknown-elf
Updating x86_64-multilib-linux-uclibc,moxie-unknown-moxiebox
Updating moxiebox
Updating riscv64-unknown-linux-gnu

RISC-V targetの確認すると、現時点では以下の4つが登録されていた。

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

riscv32-unknown-elfをビルドしてみる

今回は自分で作っている自作RISC-Vの環境を新しくしたかったのでriscv32-unknown-elfをビルドした。

基本設定を反映

まずは基本のconfigを反映するために以下のコマンドを実行。

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

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

Initially reported by: Antony Pavlov
URL: https://github.com/frantony/crosstool-ng

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

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 "riscv32-unknown-elf"

インストール先の変更(&必要に応じて設定のカスタマイズ)

次にインストール先を変更しておく。

ct-ng menuconfig

インストール先の設定は以下画像の赤枠部分の"Prefix directory"

f:id:diningyo-kpuku-jougeki:20190826230155p:plain
インストール先ディレクトリの設定

初期設定のままだと以下の設定になっている。

CT_PREFIX:-${HOME}/x-tools}/${CT_HOST:+HOST-${CT_HOST}/}${CT_TARGET}

どこやねん!!と思いつつ何となく察しはつくと思うが、今回の"riscv32-unknown-elf"の場合は以下の場所にインストールされる。

  • ~/x-tools/riscv32-unknown-elf/

設定し終わったら"Save"を選んで".config"を更新して"Exit"。

ビルドの実行

".config"を保存したディレクトリでct-ng buildを実行。 すると以下のような感じで、必要なパッケージ等をダウンロード&ビルドして最終的に"riscv32-unknown-elf"が生成される。

$ 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 20190826.135432
[INFO ]  Building environment variables
[WARN ]  Directory '/home/diningyo/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:
[EXTRA]      build  = x86_64-pc-linux-gnu
[EXTRA]      host   = x86_64-pc-linux-gnu
[EXTRA]      target = riscv32-unknown-elf
[EXTRA]  Dumping internal crosstool-NG configuration: done in 0.07s (at 00:02)
[INFO ]  =================================================================
[INFO ]  Retrieving needed toolchain components' tarballs
[EXTRA]    Retrieving 'zlib-1.2.11'
[EXTRA]    Verifying SHA512 checksum for 'zlib-1.2.11.tar.xz'
[EXTRA]    Retrieving 'gmp-6.1.2'
[EXTRA]    Verifying SHA512 checksum for 'gmp-6.1.2.tar.xz'
[EXTRA]    Retrieving 'mpfr-4.0.2'
[EXTRA]    Verifying SHA512 checksum for 'mpfr-4.0.2.tar.xz'
[EXTRA]    Retrieving 'isl-0.20'
[EXTRA]    Verifying SHA512 checksum for 'isl-0.20.tar.xz'
[WARN ]    Downloaded file isl-0.20.tar.xz reference digest not available
[EXTRA]    Retrieving 'mpc-1.1.0'
[EXTRA]    Verifying SHA512 checksum for 'mpc-1.1.0.tar.gz'
[EXTRA]    Retrieving 'binutils-2.32'
[EXTRA]    Verifying SHA512 checksum for 'binutils-2.32.tar.xz'
[EXTRA]    Retrieving 'gcc-8.3.0'
[EXTRA]    Verifying SHA512 checksum for 'gcc-8.3.0.tar.xz'
[INFO ]  Retrieving needed toolchain components' tarballs: done in 171.71s (at 02:54)
[INFO ]  =================================================================
[INFO ]  Extracting and patching toolchain components
[EXTRA]    Extracting zlib-1.2.11
[EXTRA]    Patching zlib-1.2.11
[EXTRA]    Extracting gmp-6.1.2
[EXTRA]    Patching gmp-6.1.2
[EXTRA]    Extracting mpfr-4.0.2
[EXTRA]    Patching mpfr-4.0.2
[EXTRA]    Extracting isl-0.20
[EXTRA]    Patching isl-0.20
[EXTRA]    Extracting mpc-1.1.0
[EXTRA]    Patching mpc-1.1.0
[EXTRA]    Extracting binutils-2.32
[EXTRA]    Patching binutils-2.32
[EXTRA]    Extracting gcc-8.3.0
[EXTRA]    Patching gcc-8.3.0
[INFO ]  Extracting and patching toolchain components: done in 15.78s (at 03:10)
[INFO ]  =================================================================
[INFO ]  Installing zlib for host
[EXTRA]    Configuring zlib
[EXTRA]    Building zlib
[EXTRA]    Installing zlib
[INFO ]  Installing zlib for host: done in 1.22s (at 03:11)
[INFO ]  =================================================================
[INFO ]  Installing GMP for host
[EXTRA]    Configuring GMP
[EXTRA]    Building GMP
[EXTRA]    Installing GMP
[INFO ]  Installing GMP for host: done in 30.05s (at 03:41)
[INFO ]  =================================================================
[INFO ]  Installing MPFR for host
[EXTRA]    Configuring MPFR
[EXTRA]    Building MPFR
[EXTRA]    Installing MPFR
[INFO ]  Installing MPFR for host: done in 14.39s (at 03:55)
[INFO ]  =================================================================
[INFO ]  Installing ISL for host
[EXTRA]    Configuring ISL
[EXTRA]    Building ISL
[EXTRA]    Installing ISL
[INFO ]  Installing ISL for host: done in 14.59s (at 04:10)
[INFO ]  =================================================================
[INFO ]  Installing MPC for host
[EXTRA]    Configuring MPC
[EXTRA]    Building MPC
[EXTRA]    Installing MPC
[INFO ]  Installing MPC for host: done in 6.09s (at 04:16)
[INFO ]  =================================================================
[INFO ]  Installing binutils for host
[EXTRA]    Configuring binutils
[EXTRA]    Building binutils
[EXTRA]    Installing binutils
[INFO ]  Installing binutils for host: done in 41.50s (at 04:58)
[INFO ]  =================================================================
[INFO ]  Installing final gcc compiler
[EXTRA]    Configuring final gcc compiler
[EXTRA]    Building final gcc compiler
[EXTRA]    Installing final gcc compiler
[EXTRA]    Housekeeping for core gcc compiler
[EXTRA]       '' --> lib (gcc)   lib (os)
[INFO ]  Installing final gcc compiler: done in 168.08s (at 07:46)
[INFO ]  =================================================================
[INFO ]  Finalizing the toolchain's directory
[INFO ]    Stripping all toolchain executables
[EXTRA]    Creating toolchain aliases
[EXTRA]    Removing installed documentation
[EXTRA]    Collect license information from: /usr/local/src/app/crosstool-ng/crosstool-ng-1.24.0/.build/riscv32-unknown-elf/src
[EXTRA]    Put the license information to: /home/diningyo/x-tools/riscv32-unknown-elf/share/licenses
[INFO ]  Finalizing the toolchain's directory: done in 2.92s (at 07:49)
[INFO ]  Build completed at 20190826.140220
[INFO ]  (elapsed: 7:47.55)
[INFO ]  Finishing installation (may take a few seconds)...
[07:49] /

成果物の確認

先程ct-ng menuconfigで設定したパスにツールがインストールされているので確認。

$ ls ~/x-tools/riscv32-unknown-elf
合計 576
dr-xr-xr-x 2 diningyo diningyo   4096  8月 26 14:02 bin
-r--r--r-- 1 diningyo diningyo 562726  8月 26 14:02 build.log.bz2
dr-xr-xr-x 2 diningyo diningyo   4096  8月 26 14:02 include
dr-xr-xr-x 4 diningyo diningyo   4096  8月 26 14:02 lib
dr-xr-xr-x 3 diningyo diningyo   4096  8月 26 14:02 libexec
dr-xr-xr-x 7 diningyo diningyo   4096  8月 26 13:59 riscv32-unknown-elf
dr-xr-xr-x 3 diningyo diningyo   4096  8月 26 14:02 share
$ ls -l bin/
合計 84316
-r-xr-xr-x 1 diningyo diningyo 4926000  8月 26 13:59 riscv32-unknown-elf-addr2line
-r-xr-xr-x 2 diningyo diningyo 5157728  8月 26 13:59 riscv32-unknown-elf-ar
-r-xr-xr-x 2 diningyo diningyo 7228752  8月 26 13:59 riscv32-unknown-elf-as
-r-xr-xr-x 1 diningyo diningyo 4876968  8月 26 13:59 riscv32-unknown-elf-c++filt
lrwxrwxrwx 1 diningyo diningyo      23  8月 26 14:02 riscv32-unknown-elf-cc -> riscv32-unknown-elf-gcc
-r-xr-xr-x 1 diningyo diningyo  981832  8月 26 14:02 riscv32-unknown-elf-cpp
-r-xr-xr-x 1 diningyo diningyo    3745  8月 26 13:54 riscv32-unknown-elf-ct-ng.config
-r-xr-xr-x 1 diningyo diningyo  266824  8月 26 13:59 riscv32-unknown-elf-elfedit
-r-xr-xr-x 2 diningyo diningyo  981832  8月 26 14:02 riscv32-unknown-elf-gcc
-r-xr-xr-x 2 diningyo diningyo  981832  8月 26 14:02 riscv32-unknown-elf-gcc-8.3.0
-r-xr-xr-x 1 diningyo diningyo   27096  8月 26 14:02 riscv32-unknown-elf-gcc-ar
-r-xr-xr-x 1 diningyo diningyo   27096  8月 26 14:02 riscv32-unknown-elf-gcc-nm
-r-xr-xr-x 1 diningyo diningyo   27096  8月 26 14:02 riscv32-unknown-elf-gcc-ranlib
-r-xr-xr-x 1 diningyo diningyo  659464  8月 26 14:02 riscv32-unknown-elf-gcov
-r-xr-xr-x 1 diningyo diningyo  503680  8月 26 14:02 riscv32-unknown-elf-gcov-dump
-r-xr-xr-x 1 diningyo diningyo  528320  8月 26 14:02 riscv32-unknown-elf-gcov-tool
-r-xr-xr-x 1 diningyo diningyo 5607096  8月 26 13:59 riscv32-unknown-elf-gprof
-r-xr-xr-x 4 diningyo diningyo 6533248  8月 26 13:59 riscv32-unknown-elf-ld
-r-xr-xr-x 4 diningyo diningyo 6533248  8月 26 13:59 riscv32-unknown-elf-ld.bfd
-r-xr-xr-x 2 diningyo diningyo 4975152  8月 26 13:59 riscv32-unknown-elf-nm
-r-xr-xr-x 2 diningyo diningyo 5778392  8月 26 13:59 riscv32-unknown-elf-objcopy
-r-xr-xr-x 2 diningyo diningyo 6781192  8月 26 13:59 riscv32-unknown-elf-objdump
-r-xr-xr-x 2 diningyo diningyo 5157760  8月 26 13:59 riscv32-unknown-elf-ranlib
-r-xr-xr-x 2 diningyo diningyo 2134336  8月 26 13:59 riscv32-unknown-elf-readelf
-r-xr-xr-x 1 diningyo diningyo 4917808  8月 26 13:59 riscv32-unknown-elf-size
-r-xr-xr-x 1 diningyo diningyo 4916456  8月 26 13:59 riscv32-unknown-elf-strings
-r-xr-xr-x 2 diningyo diningyo 5778392  8月 26 13:59 riscv32-unknown-elf-strip
$ ls -l include
合計 0
$ ls -l lib
合計 896
dr-xr-xr-x 3 diningyo diningyo   4096  8月 26 14:02 gcc
dr-xr-xr-x 2 diningyo diningyo   4096  8月 26 13:59 ldscripts
lrwxrwxrwx 1 diningyo diningyo     15  8月 26 14:02 libcc1.so -> libcc1.so.0.0.0
lrwxrwxrwx 1 diningyo diningyo     15  8月 26 14:02 libcc1.so.0 -> libcc1.so.0.0.0
-r-xr-xr-x 1 diningyo diningyo 909192  8月 26 14:02 libcc1.so.0.0.0
$ ls -l libexec/
合計 4
dr-xr-xr-x 3 diningyo diningyo 4096  8月 26 14:02 gcc
$ ls -l riscv32-unknown-elf/
合計 20
dr-xr-xr-x 2 diningyo diningyo 4096  8月 26 13:59 bin
dr-xr-xr-x 2 diningyo diningyo 4096  8月 26 13:54 include
dr-xr-xr-x 2 diningyo diningyo 4096  8月 26 13:54 lib
dr-xr-xr-x 2 diningyo diningyo 4096  8月 26 13:54 sys-include
dr-xr-xr-x 3 diningyo diningyo 4096  8月 26 13:54 usr
$ ls -l share/
合計 4
dr-xr-xr-x 10 diningyo diningyo 4096  8月 26 14:02 licenses

動作確認

なんか大丈夫っぽい??という感じだったので、とりあえず簡単なCソースをコンパイルしてみる。

簡単に"hello-world"のプログラムをビルドして確認する。まずは環境のソースの作成と環境設定を実施。

$ echo -e '#include <stdio.h>\n int main(void) { printf("Hello world!\\n"); return 0; }' > hello.c
$ export PATH="/home/diningyo/riscv32-unknown-elf/bin:$PATH"
$ export LD_LIBRARY_PATH=/home/diningyo/x-tools/riscv32-unknown-elf/lib

ってやってからコンパイルを試したらエラーが出た。。。

$ riscv32-unknown-elf-gcc ./hello.c
/home/diningyo/x-tools/riscv32-unknown-elf/lib/gcc/riscv32-unknown-elf/8.3.0/../../../../riscv32-unknown-elf/bin/ld: cannot find crt0.o: そのようなファイルやディレクトリはありません
/home/diningyo/x-tools/riscv32-unknown-elf/lib/gcc/riscv32-unknown-elf/8.3.0/../../../../riscv32-unknown-elf/bin/ld: cannot find -lc
/home/diningyo/x-tools/riscv32-unknown-elf/lib/gcc/riscv32-unknown-elf/8.3.0/../../../../riscv32-unknown-elf/bin/ld: cannot find -lgloss
collect2: error: ld returned 1 exit status

なんでだろーって思ってconfig見直してたら"crosstool-ng"の"riscv32-unknown-elf"の設定には"newlib"のビルドが 含まれていないためライブラリが足りていないからだった。

f:id:diningyo-kpuku-jougeki:20190826230224p:plain
newlibの設定がnone

f:id:diningyo-kpuku-jougeki:20190826230245p:plain
newlibの設定を有効にしたところ

newlibの設定を有効にして再度ct-ng buildを実行し、先ほどのCソースをコンパイルしなおしたところ、正常にコンパイル出来ることが確認できた。

riscv-toolsのビルド

ここからはこれまでのriscv-toolsのビルド手順とほぼ同様。 環境変数RISCVを設定して所望のビルドスクリプトを実行すればOK。 今回はct-ngでビルドしたriscv32-unknown-elfと同じディレクトリにインストールする設定にしていたが、こうしておいたらディレクトリの書き込み権限がなくて書き込め なかったので書き込み権を付与しておく。

$ chmod 755 /home/diningyo/x-tools/riscv32-unknown-elf/*
$ chmod 755 /home/diningyo/x-tools/riscv32-unknown-elf/riscv32-unknown-elf/*
$ git clone https://github.com/riscv/riscv-tools.git
Cloning into 'riscv-tools'...
remote: Enumerating objects: 1222, done.
remote: Total 1222 (delta 0), reused 0 (delta 0), pack-reused 1222
Receiving objects: 100% (1222/1222), 735.04 KiB | 1.07 MiB/s, done.
Resolving deltas: 100% (613/613), done.
$ git submodule update --init --recursive
Submodule 'riscv-isa-sim' (https://github.com/riscv/riscv-isa-sim.git) registered for path 'riscv-isa-sim'
Submodule 'riscv-opcodes' (https://github.com/riscv/riscv-opcodes.git) registered for path 'riscv-opcodes'
Submodule 'riscv-openocd' (https://github.com/riscv/riscv-openocd.git) registered for path 'riscv-openocd'
Submodule 'riscv-pk' (https://github.com/riscv/riscv-pk.git) registered for path 'riscv-pk'
Submodule 'riscv-tests' (https://github.com/riscv/riscv-tests.git) registered for path 'riscv-tests'
Cloning into '/home/diningyo/ct-ng-riscv32-unknown-elf/riscv-tools/riscv-isa-sim'...
Cloning into '/home/diningyo/ct-ng-riscv32-unknown-elf/riscv-tools/riscv-opcodes'...
Cloning into '/home/diningyo/ct-ng-riscv32-unknown-elf/riscv-tools/riscv-openocd'...
Cloning into '/home/diningyo/ct-ng-riscv32-unknown-elf/riscv-tools/riscv-pk'...
Cloning into '/home/diningyo/ct-ng-riscv32-unknown-elf/riscv-tools/riscv-tests'...
Submodule path 'riscv-isa-sim': checked out '2710fe575e7e6a4e2418224f8d254d5ca31f6c0e'
Submodule path 'riscv-opcodes': checked out '7c3db437d8d3b6961f8eb2931792eaea1c469ff3'
Submodule path 'riscv-openocd': checked out '35eed36ffdd082f5abfc16d4cc93511f6e225284'
Submodule 'jimtcl' (https://github.com/msteveb/jimtcl) registered for path 'riscv-openocd/jimtcl'
Cloning into '/home/diningyo/ct-ng-riscv32-unknown-elf/riscv-tools/riscv-openocd/jimtcl'...
Submodule path 'riscv-openocd/jimtcl': checked out '51f65c6d38fbf86e1f0b036ad336761fd2ab7fa0'
Submodule path 'riscv-pk': checked out '97b683ed3cbeeb059e5ad3de8f884db734447d56'
Submodule path 'riscv-tests': checked out '79064081503b53fdb44094e32ff54a3ab20a9bf2'
Submodule 'env' (https://github.com/riscv/riscv-test-env.git) registered for path 'riscv-tests/env'
Cloning into '/home/diningyo/ct-ng-riscv32-unknown-elf/riscv-tools/riscv-tests/env'...
Submodule path 'riscv-tests/env': checked out '68cad7baf3ed0a4553fffd14726d24519ee1296a'

サブモジュールの更新が終わったのでriscv32向けのビルドスクリプトを使ってビルドを実行。

$ ./build-rv32ima.sh
Starting RISC-V Toolchain build process

Removing existing riscv-isa-sim/build directory
Configuring project riscv-isa-sim
Building project riscv-isa-sim
../spike_main/disasm.cc: In constructor ‘disassembler_t::disassembler_t(int)’:
../spike_main/disasm.cc:275:1: note: variable tracking size limit exceeded with -fvar-tracking-assignments, retrying without
 disassembler_t::disassembler_t(int xlen)
 ^~~~~~~~~~~~~~
Installing project riscv-isa-sim

Removing existing riscv-pk/build directory
Configuring project riscv-pk
configure: WARNING: using cross tools not prefixed with host triplet
Building project riscv-pk
../dummy_payload/dummy_entry.S: Assembler messages:
../dummy_payload/dummy_entry.S:23: Warning: unterminated string; newline inserted
../dummy_payload/dummy_entry.S:24: Warning: unterminated string; newline inserted
../dummy_payload/dummy_entry.S:25: Warning: unterminated string; newline inserted
../dummy_payload/dummy_entry.S:26: Warning: unterminated string; newline inserted
../dummy_payload/dummy_entry.S:27: Warning: unterminated string; newline inserted
../dummy_payload/dummy_entry.S:28: Warning: unterminated string; newline inserted
../dummy_payload/dummy_entry.S:29: Warning: unterminated string; newline inserted
Installing project riscv-pk
mkdir //home/diningyo/x-tools/riscv32-unknown-elf/riscv32-unknown-elf/include/riscv-pk
mkdir //home/diningyo/x-tools/riscv32-unknown-elf/riscv32-unknown-elf/lib/riscv-pk

libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'build-aux'.
libtoolize: copying file 'build-aux/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: copying file 'm4/libtool.m4'
libtoolize: copying file 'm4/ltoptions.m4'
libtoolize: copying file 'm4/ltsugar.m4'
libtoolize: copying file 'm4/ltversion.m4'
libtoolize: copying file 'm4/lt~obsolete.m4'
configure.ac:42: installing 'build-aux/ar-lib'
configure.ac:37: installing 'build-aux/compile'
configure.ac:28: installing 'build-aux/config.guess'
configure.ac:28: installing 'build-aux/config.sub'
configure.ac:30: installing 'build-aux/install-sh'
configure.ac:30: installing 'build-aux/missing'
Makefile.am: installing './INSTALL'
libjaylink/Makefile.am: installing 'build-aux/depcomp'
libtoolize: putting auxiliary files in '.'.
libtoolize: copying file './ltmain.sh'
libtoolize: Consider adding 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac,
libtoolize: and rerunning libtoolize and aclocal.
libtoolize: Consider adding '-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
libtoolize: 'AC_PROG_RANLIB' is rendered obsolete by 'LT_INIT'
configure.ac:26: installing './compile'
configure.ac:37: installing './config.guess'
configure.ac:37: installing './config.sub'
configure.ac:16: installing './install-sh'
configure.ac:16: installing './missing'
Makefile.am:46: warning: wildcard $(srcdir: non-POSIX variable name
Makefile.am:46: (probably a GNU make extension)
Makefile.am: installing './INSTALL'
Makefile.am: installing './depcomp'
Makefile.am:23: installing './mdate-sh'
Makefile.am:23: installing './texinfo.tex'
Configuring project riscv-openocd
Building project riscv-openocd
Makefile:4509: 警告: ターゲット 'check-recursive' のためのレシピを置き換えます
Makefile:3920: 警告: ターゲット 'check-recursive' のための古いレシピは無視されます
Makefile:4509: 警告: ターゲット 'check-recursive' のためのレシピを置き換えます
Makefile:3920: 警告: ターゲット 'check-recursive' のための古いレシピは無視されます
ar: `u' modifier ignored since `D' is the default (see `U')
Makefile:4509: 警告: ターゲット 'check-recursive' のためのレシピを置き換えます
Makefile:3920: 警告: ターゲット 'check-recursive' のための古いレシピは無視されます
Makefile:4509: 警告: ターゲット 'check-recursive' のためのレシピを置き換えます
Makefile:3920: 警告: ターゲット 'check-recursive' のための古いレシピは無視されます
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
ar: `u' modifier ignored since `D' is the default (see `U')
Installing project riscv-openocd
Makefile:4509: 警告: ターゲット 'check-recursive' のためのレシピを置き換えます
Makefile:3920: 警告: ターゲット 'check-recursive' のための古いレシピは無視されます
Makefile:4509: 警告: ターゲット 'check-recursive' のためのレシピを置き換えます
Makefile:3920: 警告: ターゲット 'check-recursive' のための古いレシピは無視されます
Makefile:4509: 警告: ターゲット 'check-recursive' のためのレシピを置き換えます
Makefile:3920: 警告: ターゲット 'check-recursive' のための古いレシピは無視されます
Makefile:4509: 警告: ターゲット 'check-recursive' のためのレシピを置き換えます
Makefile:3920: 警告: ターゲット 'check-recursive' のための古いレシピは無視されます
Makefile:4509: 警告: ターゲット 'check-recursive' のためのレシピを置き換えます
Makefile:3920: 警告: ターゲット 'check-recursive' のための古いレシピは無視されます

RISC-V Toolchain installation completed!

ということでcrosstool-ngを使ってRISC-Vのビルド環境を作りなおした話でした。