FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

FreeBSD 11.0ではRISC-Vをサポートしている (環境構築試行)

http://riscv.wpengine.com/wp-content/uploads/2015/01/riscv-logo.png https://www.freebsd.org/logo/logo-full-thumb.png

(画像はriscv.org, freebsd.orgより拝借)

The FreeBSD Project

FreeBSD 11.0-RELEASE Announcement

FreeBSD 11.0がリリースされた。アーキテクチャのサポートとして、ARM64およびRISC-Vのサポートが追加されたらしい。

FreeBSDは、昔から積極的にRISC-Vをサポートしている。今年頭のRISC-V Workshopでも既にFreeBSDの話題が上がっていた。また、11.0でなくても、10.x台でもFreeBSDRISC-Vで動作させることが出来るようだ。

riscv - FreeBSD Wiki

https://riscv.org/wp-content/uploads/2016/01/Tues1445-freebsd-riscv-1.pdf

筆者も、以前少し試行していた。

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

以下はその際にいくつか試行した記録。

msyksphinz.hatenablog.com

FreeBSDのビルドまではうまく行くのだが、FreebSDをブートさせるためのBBL?のビルドが上手く行かない。

../configure --prefix=$PREFIX --host=riscv64-unknown-freebsd11.0 --with-payload=path_to_freebsd_kernel

うーん、ビルドツールとしてriscv64-unknown-freebsd11.0-gccはインストールされているのだが、どうやら実行ファイルを作ることが出来ないのが原因のようだ。 確かに、単純にmain()だけが入っているファイルをクロスコンパイルしようとしてもエラーが発生してしまう。crt1などが生成できていないようだ。これは何故だろう?

vagrant@:~/work % cat main
cat: main: No such file or directory
vagrant@:~/work % cat main.c
int main ()
{
  ;
  return 0;
}
vagrant@:~/work % riscv64-unknown-freebsd11.0-gcc main.c
/home/vagrant/riscv/lib/gcc/riscv64-unknown-freebsd11.0/6.1.0/../../../../riscv64-unknown-freebsd11.0/bin/ld: cannot find crt1.o: No such file or directory
/home/vagrant/riscv/lib/gcc/riscv64-unknown-freebsd11.0/6.1.0/../../../../riscv64-unknown-freebsd11.0/bin/ld: cannot find crti.o: No such file or directory
/home/vagrant/riscv/lib/gcc/riscv64-unknown-freebsd11.0/6.1.0/../../../../riscv64-unknown-freebsd11.0/bin/ld: cannot find crtbegin.o: No such file or directory
/home/vagrant/riscv/lib/gcc/riscv64-unknown-freebsd11.0/6.1.0/../../../../riscv64-unknown-freebsd11.0/bin/ld: cannot find -lgcc
/home/vagrant/riscv/lib/gcc/riscv64-unknown-freebsd11.0/6.1.0/../../../../riscv64-unknown-freebsd11.0/bin/ld: cannot find -lc
/home/vagrant/riscv/lib/gcc/riscv64-unknown-freebsd11.0/6.1.0/../../../../riscv64-unknown-freebsd11.0/bin/ld: cannot find -lgcc
/home/vagrant/riscv/lib/gcc/riscv64-unknown-freebsd11.0/6.1.0/../../../../riscv64-unknown-freebsd11.0/bin/ld: cannot find crtend.o: No such file or directory
/home/vagrant/riscv/lib/gcc/riscv64-unknown-freebsd11.0/6.1.0/../../../../riscv64-unknown-freebsd11.0/bin/ld: cannot find crtn.o: No such file or directory
collect2: error: ld returned 1 exit status

そもそも、riscv-toolchainをビルドする際にmakeターゲットとしてfreebsdを設定しているのも良く分からない。

make freebsd

これを単純にmakeのみとすると、エラーが発生してしまった。

...
checking whether compiler driver understands Ada... no
checking how to compare bootstrapped objects... cmp $$f1 $$f2 16 16
checking for objdir... .libs
checking for the correct version of gmp.h... no
configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.

うーんお、GMP等はインストールしているんだけどなあ。しかもバージョンは5.1.3と十分に最新だ。。。

もうちょっと調査してみる必要がありそうだ。