2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ubuntu 22.04 でRISC-V向けClang 16をビルドする

Last updated at Posted at 2023-05-15

Clang 16ではRVV向けAuto-vectorizationができるらしいというのを聞いて,ここ最近Clang16をビルドしようと四苦八苦していました.

基本的には下記公式ドキュメントをもとにしています.

バージョンは16.0.3となります.また,aptで足りないツール類は適宜インストールしてください.

下記の2つの記事のインストールは完了させてください.

あらかじめ,次の作業をしたのでした.

sudo ln --symbolic /usr/include/* /usr/local/riscv/include

(すでに存在する/usr/local/riscv/include/gdbのみエラーになると思います)

ではビルドするスクリプトを紹介します.

git clone https://github.com/llvm/llvm-project.git
cd llvm-project
git checkout llvmorg-16.0.3
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/riscv -DLLVM_ENABLE_PROJECTS="clang" -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DLLVM_BUILD_TESTS=False -DLLVM_DEFAULT_TARGET_TRIPLE="riscv64-unknown-elf" -DDEFAULT_SYSROOT=/usr/local/riscv/riscv64-unknown-elf -DLLVM_TARGETS_TO_BUILD="RISCV" -G Ninja ../llvm
ninja
sudo ninja install

cmakeで指定しているオプションについて解説します.

  • -DCMAKE_BUILD_TYPE=Release リリース版をビルドします.
  • -DCMAKE_INSTALL_PREFIX=/usr/local/riscv インストール先を/usr/local/riscvにします.
  • -DLLVM_ENABLE_PROJECTS="clang" Clangをビルドします.
  • -DCMAKE_C_COMPILER=/usr/bin/gcc ビルドで用いるCコンパイラを指定します.ここでは/usr/bin/gccを用います.
  • -DCMAKE_CXX_COMPILER=/usr/bin/g++ ビルドで用いるC++コンパイラを指定します.ここでは/usr/bin/g++を用います.
  • -DLLVM_BUILD_TESTS=False テストスクリプトをビルドしないようにします.テストスクリプトのビルドのためには#includeを処理できる必要があるのですが,今回確立した方法ではヘッダファイルを含めることに失敗しているので,ビルドしないようにする必要があります.
  • -DLLVM_DEFAULT_TARGET_TRIPLE="riscv64-unknown-elf" targetオプションなしでコンパイルした時のターゲットをriscv64-unknown-elfにします.
  • -DDEFAULT_SYSROOT=/usr/local/riscv/riscv64-unknown-elf ビルドしたコンパイラが参照するライブラリやヘッダファイル類を定義するSYSROOT/usr/local/riscv/riscv64-unknown-elfにします.
  • -DLLVM_TARGETS_TO_BUILD="RISCV" RISC-Vをターゲットにできるようにします.
  • -G Ninja この後,Ninjaでビルドできるようにします.

検証方法

次のようなCプログラムがコンパイルできることを確認します.

hello.c
int main()
{
    return 0;
}
clang -march=rv64g hello.c 
spike /usr/local/riscv/riscv64-unknown-elf/bin/pk a.out 

同様に次のようなCプログラムもコンパイルできます.

hello.c
#include <stdint.h>

int main()
{
    int64_t a = 0;
    return (int)a;
}

次のようなプログラムもできました.macOSではできなくて苦労していました!

hello.c
#include <stdio.h>

int main()
{
	printf("hello, world.\n");
}
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?