GitHubのIssueにLLVMのビルド環境をDockerで作る方法を教えていただいたので、試してみることにした。
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上でのビルドは遅いな。