FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Docker上でのLLVMビルド環境の構築試行

GitHubのIssueにLLVMのビルド環境をDockerで作る方法を教えていただいたので、試してみることにした。

github.com

docker run --name=riscv_dev_container -it ubuntu:latest
  • コンテナ内で、以下を実行する
apt-get update
apt-get -y dist-upgrade

apt-get install build-essential git -y
# LLVM gnu toolchainのビルドで必要
apt-get install -y 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

# LLVMのビルドで必要
apt install cmake ninja-build -y

apt install gcc-10 g++-10 -y

exit

どうもLLVMとの相性が悪くGCC-11だと上手くビルドできなかったので、GCC-10とG++-10をインストールしている。

  • コンテナをコミット
docker commit riscv_dev_container riscv_dev_container 

なるほどなあ。再びDocker上にログインして、ビルド環境を構築していく。

docker run -v $PWD:/work -it riscv_dev_container
cd /work

#LLVM関連ソースを取得する

git clone --recursive --depth 1 https://github.com/riscv/riscv-gnu-toolchain
git clone --depth 1 https://github.com/llvm/llvm-project.git riscv-llvm

# ビルド成果物の展開先

export RISCV=/work/riscv64

# Toolchainのビルド
cd riscv-gnu-toolchain
./configure --prefix=`${RISCV} --enable-multilib
make 

cd riscv-llvm
mkdir build
cd build
cmake \
-G Ninja -DCMAKE_BUILD_TYPE="Debug" \
-DLLVM_TARGETS_TO_BUILD="RISCV" \
-DLLVM_DEFAULT_TARGET_TRIPLE="riscv64-unknown-elf" \
-DBUILD_SHARED_LIBS=ON \
-DLLVM_OPTIMIZED_TABLEGEN=ON \
-DLLVM_USE_SPLIT_DWARF=ON \
-DLLVM_BUILD_TESTS=OFF \
-DLLVM_ENABLE_THREADS=OFF \
-DCMAKE_INSTALL_PREFIX="${Build}" \
-DDEFAULT_SYSROOT="${RISCV}/riscv64-unknown-elf" \
../llvm

ninja

これでビルドできた。Docker環境のいいところは、完全に仮想化した環境で構築できるところだが、それにしてもM1 Mac上でのビルドは遅いな。