riscv-gnu-toolchainをビルドした

サイボウズ・ラボユース 自作OS RISC-V

前回の記事でお話したように、RISC-Vで動作する自作OSを作成することになりました。そのためには、RISC-Vのクロスコンパイラが必要になります。今回は、RISC-Vのクロスコンパイラであるriscv-gnu-toolchainをビルドします。

なぜriscv-gnu-toolchainをビルドするのか

CPUにはアーキテクチャというものがあり、例えばx86-64だとか、Armだとか、今回のようなRISC-Vなどがあります。それぞれは、異なる命令セットを持っているため、たとえ、同じC言語のコードであったとしても、コンパイルした後の機械語は全く異なるものになります。今回の自作OSはRISC-V上で動かすため、RISC-Vに対応するコンパイラが必要です。それが、riscv-gnu-toolchainです。

Buildしていく

公式リポジトリはhttps://github.com/riscv-collab/riscv-gnu-toolchainです。このREADMEを見ておけば、特に難しいことはありません。

# buildに必要な依存関係をインストールします
sudo apt-get install 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 ninja-build
# cloneします(時間がかかります。最新のものを使用するだけなら、--depth 1ですぐにcloneできます)
git clone --recursive https://github.com/riscv-collab/riscv-gnu-toolchain
# 移動します
cd riscv-gnu-toolchain
# build directoryを作成します
mkdir build
# build directoryに移動します
cd build
# configureします
../configure --prefix=/path/to/riscv --with-arch=rv32ima --with-abi=ilp32
# buildします
make -j $(nproc)
# installします
make install

これで、~/opt/riscv/binに、RISC-Vのクロスコンパイラがインストールされました。

configureではいくつかのオプションを設定することで、本当にビルドしたいものを定めます。ここでは、--prefix=/path/to/riscvで、ビルドされたバイナリをインストールする場所を指定し、--with-arch=rv32imaで使用する命令セットを指定しました。--with-abi=ilp32は、ABIを指定しています。どんなデータ型が使用可能化をこれで指定しています。

詳しくはSiFiveのブログを見るのが良いと思います。

https://www.sifive.com/blog/all-aboard-part-1-compiler-args

最後に、PATHを通しておきます。

# ~/.bashrcに以下を追記します
export PATH=$PATH:/path/to/riscv/bin

これで、riscv32-unknown-elf-gccなどが使えるようになり、一旦準備は完了です。


© 2023 Yuto Nakamura   •  Theme  Moonwalk