こちらは、技術評論社より出版されている「作って学ぶコンピュータアーキテクチャ ー LLVMとRISC-Vによる低レイヤプログラミングの基礎」 のサポートページです。
- 作って学ぶコンピュータアーキテクチャ —— LLVMとRISC-Vによる低レイヤプログラミングの基礎
- 著者:木村優之
- 発行:技術評論社 2022年7月1日
- ISBN:978-4297129149
書籍の解説ではLLVM実装の一部のみを抜粋して掲載しているため、ビルドおよびテストを行いたい場合、 以下のLLVMブランチで完全なソースコードを参照していただきますよう、お願いいたします。
本書でサポートしているのは以下のllvm-myriscvx120
ブランチです。
https://github.com/msyksphinz-self/llvm-project/tree/llvm-myriscvx120
git clone https://github.com/msyksphinz-self/llvm-project.git -b llvm-myriscvx120
LLVM13ベース、LLVM14ベースでもビルド・テストの成功は確認しています。ただし本文で解説しているコードと若干異なる場所があるのでご注意ください。
## LLVM13ベースでの開発ブランチ
git clone https://github.com/msyksphinz-self/llvm-project.git -b llvm-myriscvx130
## LLVM14ベースでの開発ブランチ
git clone https://github.com/msyksphinz-self/llvm-project.git -b llvm-myriscvx140
LLVM12で確認を行っています。LLVM13、LLVM14でも同様のコミットメッセージでブランチを構築しています。
本リポジトリを使ったビルドの確認方法は、READMEを参照してください。
https://github.com/msyksphinz-self/llvm-myriscvx-tests
本書の環境を含んだDockerコンテナをリリースします。
本文では記載抜けしていましたが、RISC-Vビルドでの各種ライブラリ(printf()
など)を扱うために-DDEFAULT_SYSROOT=
オプションを適切に設定することが推奨されます。具体的には、以下のように-DDEFAULT_SYSROOT
オプションを追加して、P.70にてツールチェインのインストール場所として使用している ${HOME}/riscv64_github
を適宜読み替えてください。
なお、P.96のx86(ホスト)用にビルドする際はDEFAULT_SYSROOT
の設定は不要です。
cmake -G Ninja \
-DDEFAULT_SYSROOT=${HOME}/riscv_github/riscv64-unknown-elf \ # RISC-V向けビルド時。ここの部分
-DCMAKE_BUILD_TYPE="Debug" \
-DLLVM_TARGETS_TO_BUILD="X86;AArch64;RISCV;MYRISCVX" \
-DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi" \
../llvm
正誤表はこちらに移動しました。
macOSにおいてLLVMリポジトリをビルドする際、SYSROOT
に設定しているCommand Line Tools for Xcodeのインストールが必要です。
$ xcode-select --install
また、本書に記載しているビルドコマンドを、以下のように置き換えることが推奨されます。DEFAULT_SYSROOT
のオプションはXCodeのインストール先に応じて適宜変更してください。
- ホスト(非RISC-V)向けビルド時 (P.96)のコマンド実行時
cmake -G Ninja \
-DCMAKE_OSX_ARCHITECTURES='arm64' \ # M1 Macの場合は本オプションを追加してください
-DDEFAULT_SYSROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk/ \
-DCMAKE_BUILD_TYPE="Debug" \
-DLLVM_TARGETS_TO_BUILD="host;AArch64;RISCV;MYRISCVX" \ # 本書ではx86としていますが、M1 Macの場合は"host"としてください
-DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi" \
../llvm
- RISC-V向けビルド実行時
cmake -G Ninja \
-DCMAKE_OSX_ARCHITECTURES='arm64' \ # M1 Macの場合は本オプションを追加してください
-DDEFAULT_SYSROOT=${HOME}/riscv_github/riscv64-unknown-elf \
-DCMAKE_BUILD_TYPE="Debug" \
-DLLVM_TARGETS_TO_BUILD="host;AArch64;RISCV;MYRISCVX" \ # 本書ではx86としていますが、M1 Macの場合は"host"としてください
-DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi" \
../llvm