以下の内容はhttps://msyksphinz.hatenablog.com/entry/2024/05/31/040000より取得しました。


LLVM18を久しぶりにビルドしようとしたら失敗する問題の解析

タイトルの通りなのだが,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をスクラッチビルドして試してみよう.

gitlab.kitware.com

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

えええ,libunwindlibcxxabiに必要らしい...

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....



以上の内容はhttps://msyksphinz.hatenablog.com/entry/2024/05/31/040000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14