タイトルの通りなのだが,LLVM18をRISC-V向けにビルドしようとするとコケてしまう.
以下はDockerfileから抜き出したものなのだが:
RUN git clone https://github.com/llvm/llvm-project.git -b release/18.x --depth 1 && \
cd llvm-project && \
mkdir -p build && cd build && \
cmake -G "Unix Makefiles" \
-DDEFAULT_SYSROOT=${RISCV}/riscv64-unknown-elf \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX=${RISCV} \
-DLLVM_TARGETS_TO_BUILD="host;RISCV" \
-DLLVM_ENABLE_PROJECTS="clang" \
-DLLVM_ENABLE_RUNTIMES="libcxx;libunwind;libcxxabi" \
-DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_ENABLE_LIBCXX=ON \
../llvm && \
make -j$(nproc) && \
make install && \
cd ../ && rm -rf build
ビルドの最後に,以下のようなエラーで落ちてしまう.
1143.5 [ 97%] Building CXX object tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/ReduceGlobalObjects.cpp.o 1143.6 -- Performing Test CXX_SUPPORTS_FUNWIND_TABLES_FLAG - Success 1143.6 -- Performing Test CXX_SUPPORTS_FNO_EXCEPTIONS_FLAG 1143.6 -- Performing Test CXX_SUPPORTS_FNO_EXCEPTIONS_FLAG - Failed 1143.6 -- Performing Test CXX_SUPPORTS_FNO_RTTI_FLAG 1143.7 -- Performing Test CXX_SUPPORTS_FNO_RTTI_FLAG - Failed 1143.7 CMake Error at /tmp/llvm-project/libunwind/src/CMakeLists.txt:102 (message): 1143.7 Compiler doesn't support generation of unwind tables if exception support 1143.7 is disabled. Building libunwind DSO with runtime dependency on C++ ABI 1143.7 library is not supported. 1143.7 1143.7 1143.7 -- Configuring incomplete, errors occurred! 1143.7 make[2]: *** [runtimes/CMakeFiles/runtimes.dir/build.make:100: runtimes/runtimes-stamps/runtimes-configure] Error 1 1143.7 make[1]: *** [CMakeFiles/Makefile2:43208: runtimes/CMakeFiles/runtimes.dir/all] Error 2 1143.7 make[1]: *** Waiting for unfinished jobs....
以下のような記事も見つけたので,CMake 3.24をスクラッチビルドして試してみよう.
RUN curl -L https://github.com/Kitware/CMake/releases/download/v3.29.3/cmake-3.24.3.tar.gz | tar xz && \
cd cmake-3.24.3 && ./bootstrap && make -j$(nproc) && make install && \
cd ../ && rm -rf cmake-3.24.3
しかし,これでも結果は変わらなかった.
なんとなく,libunwindが迷惑をかけているようなので,LLVM_ENABLE_RUNTIMESから抜いてみよう.
WORKDIR /tmp/
RUN git clone https://github.com/llvm/llvm-project.git -b release/18.x --depth 1 && \
cd llvm-project && \
mkdir -p build && cd build && \
cmake -G "Unix Makefiles" \
-DDEFAULT_SYSROOT=${RISCV}/riscv64-unknown-elf \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX=${RISCV} \
-DLLVM_TARGETS_TO_BUILD="host;RISCV" \
-DLLVM_ENABLE_PROJECTS="clang" \
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
-DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_ENABLE_LIBCXX=ON \
../llvm && \
make -j$(nproc) && \
make install && \
cd ../ && rm -rf build
えええ,libunwindはlibcxxabiに必要らしい...
1172.4 -- Looking for os_signpost_interval_begin 1172.4 -- Looking for os_signpost_interval_begin - not found 1172.5 [ 98%] Building CXX object tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/ReduceDPValues.cpp.o 1172.6 -- Found Python3: /usr/bin/python3.10 (found version "3.10.12") found components: Interpreter 1172.6 -- LLVM host triple: x86_64-unknown-linux-gnu 1172.6 -- LLVM default target triple: x86_64-unknown-linux-gnu 1172.6 CMake Error at /tmp/llvm-project/libcxxabi/CMakeLists.txt:51 (message): 1172.6 LIBCXXABI_USE_LLVM_UNWINDER is set to ON, but libunwind is not specified in 1172.6 LLVM_ENABLE_RUNTIMES. 1172.6 1172.6 1172.6 -- Configuring incomplete, errors occurred! 1172.6 See also "/tmp/llvm-project/build/runtimes/runtimes-bins/CMakeFiles/CMakeOutput.log". 1172.6 See also "/tmp/llvm-project/build/runtimes/runtimes-bins/CMakeFiles/CMakeError.log". 1172.6 make[2]: *** [runtimes/CMakeFiles/runtimes.dir/build.make:94: runtimes/runtimes-stamps/runtimes-configure] Error 1 1172.6 make[1]: *** [CMakeFiles/Makefile2:43205: runtimes/CMakeFiles/runtimes.dir/all] Error 2 1172.6 make[1]: *** Waiting for unfinished jobs....
DLIBCXXABI_USE_LLVM_UNWINDER=OFF を入れてみるとどうか?
WORKDIR /tmp/
RUN git clone https://github.com/llvm/llvm-project.git -b release/18.x --depth 1 && \
cd llvm-project && \
mkdir -p build && cd build && \
cmake -G "Unix Makefiles" \
-DDEFAULT_SYSROOT=${RISCV}/riscv64-unknown-elf \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX=${RISCV} \
-DLLVM_TARGETS_TO_BUILD="host;RISCV" \
-DLLVM_ENABLE_PROJECTS="clang" \
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
-DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON \
-DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_ENABLE_LIBCXX=ON \
../llvm && \
make -j$(nproc) && \
make install && \
cd ../ && rm -rf build
うーん,これでもダメ.
1181.9 /tmp/llvm-project/build/include/c++/v1/__config:517:14: fatal error: 'features.h' file not found 1181.9 517 | # include <features.h> 1181.9 | ^~~~~~~~~~~~ 1182.0 1 error generated. 1182.0 make[5]: *** [libcxxabi/src/CMakeFiles/cxxabi_shared_objects.dir/build.make:76: libcxxabi/src/CMakeFiles/cxxabi_shared_objects.dir/cxa_aux_runtime.cpp.o] Error 1 1182.0 make[4]: *** [CMakeFiles/Makefile2:579: libcxxabi/src/CMakeFiles/cxxabi_shared_objects.dir/all] Error 2 1182.0 make[3]: *** [Makefile:136: all] Error 2 1182.0 make[2]: *** [runtimes/CMakeFiles/runtimes.dir/build.make:89: runtimes/runtimes-stamps/runtimes-build] Error 2 1182.0 make[1]: *** [CMakeFiles/Makefile2:43205: runtimes/CMakeFiles/runtimes.dir/all] Error 2 1182.0 make[1]: *** Waiting for unfinished jobs....