macOS で表題のことを行うには,brew install riscv64-elf-gcc とします.
Ubuntu で表題のことを行うには,riscv-gnu-toolchainをインストールします.
macOS
brew install riscv64-elf-gcc
すると /opt/homebrew/opt/riscv64-elf-gcc/binに,riscv64-elf-で始まるツールチェーンがインストールされます.2023年8月現在,次のコマンドがインストールされます.
riscv64-elf-c++riscv64-elf-cppriscv64-elf-g++riscv64-elf-gccriscv64-elf-gcc-13.2.0riscv64-elf-gcc-arriscv64-elf-gcc-nmriscv64-elf-gcc-ranlibriscv64-elf-gcovriscv64-elf-gcov-dumpriscv64-elf-gcov-toolriscv64-elf-lto-dump
またこれにより,riscv64-elf-binutilsもインストールされます./opt/homebrew/opt/riscv64-elf-binutils/binに,riscv64-elf-で始まるツールチェーンがインストールされます.2023年8月現在,次のコマンドがインストールされます.
riscv64-elf-addr2lineriscv64-elf-arriscv64-elf-asriscv64-elf-c++filtriscv64-elf-elfeditriscv64-elf-gprofriscv64-elf-ldriscv64-elf-ld.bfdriscv64-elf-nmriscv64-elf-objcopyriscv64-elf-objdumpriscv64-elf-ranlibriscv64-elf-readelfriscv64-elf-sizeriscv64-elf-stringsriscv64-elf-strip
Ubuntu 22.04
参考記事: https://msyksphinz.hatenablog.com/entry/2022/05/24/040000
次のようにしました.
sudo apt update
git clone https://github.com/riscv-collab/riscv-gnu-toolchain.git
cd riscv-gnu-toolchain
mkdir build
./configure --prefix=/usr/local/riscv
make -j$(nproc)
make install
すると /usr/local/riscv/bin に次のコマンドがインストールされます.
riscv64-unknown-elf-addr2lineriscv64-unknown-elf-arriscv64-unknown-elf-asriscv64-unknown-elf-c++riscv64-unknown-elf-c++filtriscv64-unknown-elf-cppriscv64-unknown-elf-elfeditriscv64-unknown-elf-g++riscv64-unknown-elf-gcc-
riscv64-unknown-elf-gcc-12.2.0このコマンドについてはバージョンが上がるとバージョンを表す数字が変わるものと思います. riscv64-unknown-elf-gcc-arriscv64-unknown-elf-gcc-nmriscv64-unknown-elf-gcc-ranlibriscv64-unknown-elf-gcovriscv64-unknown-elf-gcov-dumpriscv64-unknown-elf-gcov-toolriscv64-unknown-elf-gdbriscv64-unknown-elf-gdb-add-indexriscv64-unknown-elf-gprofriscv64-unknown-elf-ldriscv64-unknown-elf-ld.bfdriscv64-unknown-elf-lto-dumpriscv64-unknown-elf-nmriscv64-unknown-elf-objcopyriscv64-unknown-elf-objdumpriscv64-unknown-elf-ranlibriscv64-unknown-elf-readelfriscv64-unknown-elf-runriscv64-unknown-elf-sizeriscv64-unknown-elf-strings
使い方
標準状態では RV64G(RV64IMAFD) 向けにクロスコンパイルするものと思います(正確なところはドキュメント等で確認できませんでした).オプションでいうと,-march=rv64g -mabi=lp64dです.
もし異なる拡張を指定したい場合には,たとえば次のようにします.拡張の組み合わせについては,自由に設定できるわけではなく,下記以外の組み合わせでは,コンパイルできてもリンクしてコードを生成するときにエラーが出ることがありました.
- RV64G
-march=rv64g -mabi=lp64d - RV64GV
-march=rv64gv -mabi=lp64d - RV32I
-march=rv32i -mabi=ilp32 - RV32IMAC
-march=rv32imac -mabi=ilp32 - RV32IMAFC
-march=rv32imafc -mabi=ilp32f
Zで始まる拡張を指定するときには次のようにします.
- RV64GCZifencei
-march=rv64gc_zifencei -mabi=lp64d
Auto-vectorizationは働きませんでした.Auto-vectorizationの対応状況がどうなっているのかが,よくわかりません.Clang 16ではAuto-vectorizationできているらしいので,確認してみたいと思っています.