crosstool-NGを使ってRISC-VのCコンパイラを用意する
クロスコンパイラを生成するツール「crosstool-NG」を使ってRISC-V向けのクロスコンパイラを生成してみる。
crosstoo-NG
事前準備
$ sudo apt install texinfo help2man libtool-bin
インストール
$ cd ~/src
$ cd crosstool-ng
$ ./bootstrap
$ ./configure
$ make
$ sudo make install
コマンドが実行できればインストールは完了
$ ct-ng
ビルド前の設定作業ディレクトリを作成
$ mkdir ~/src/riscv32
$ cd ~/src/riscv32
インストール可能なプラットフォームを確認
$ ct-ng list-samples
インストールするプラットフォームを選択
$ ct-ng riscv32-unknown-elf
riscv32-unknown-elfのコンパイラツールチェインをビルド
$ ct-ng build
/home/thata/x-tools/riscv32-unknown-elf/ へインストールされる
ビルドしたコンパイラツールチェインにパスを通す
export PATH=$PATH:/home/thata/x-tools/riscv32-unknown-elf/bin
ビルドしたコンパイラでコンパイルしてみる
$ riscv32-unknown-elf-gcc -S return_zero.c
Cのソース
code:return_zero.c
int main() {
return 0;
}
生成されたアセンブリファイル(なんとなく良さそう)
code:return_zero.s
.file "return_zero.c"
.option nopic
.attribute arch, "rv32i2p0_m2p0_a2p0_f2p0_d2p0_c2p0"
.attribute unaligned_access, 0
.attribute stack_align, 16
.text
.align 1
.globl main
.type main, @function
main:
addi sp,sp,-16
sw s0,12(sp)
addi s0,sp,16
li a5,0
mv a0,a5
lw s0,12(sp)
addi sp,sp,16
jr ra
.size main, .-main
.ident "GCC: (crosstool-NG 1.24.0.193_99ce9d3) 10.2.0"
参考