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"
初期設定のままだと以下の設定になっている。
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"のビルドが 含まれていないためライブラリが足りていないからだった。
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のビルド環境を作りなおした話でした。