clangのソースからのビルドに失敗する
Ubuntu 19.04の環境でclangをビルドしようとしているのですが、失敗します。
なぜでしょうか?
C/C++ツールチェインを1からビルドすることを試してみています。
glibc, libc++, libc++abi, llvmはビルドできたようです。
以下のようにcmakeを実行して、ビルドしようとしているのですが、うまくいかず、下記のようなエラーが発生します。
Undefined referenceとなっているllvm::cl::ParseCommandLineOptions(int, char const* const*, llvm::StringRef, llvm::raw_ostream*, char const*)
は/home/yuya/opt/lib/libLLVMSupport.a
内に存在しているので、cmakeのCFLAGSでも指定しているのですがエラーになってしまいます。
なぜでしょうか?
/home/username/opt
はINSTALL_PREFIX
で指定したディレクトリで、ここにglibc, libc++abi, libc++, llvmがそれぞれインストールされています。
追記:
CMAKE_CXX(C)_FLAGSにライブラリの場所を示す-L
とライブラリ名を示す-l
を渡していることが間違っているように思うのですが、CMAKEにコンパイラにライブラリの場所と名前を渡すにはどうすればよいのでしょうか?
追記2:
CMAKE_CXX(C)_FLAGSにライブラリの場所と名前を渡すのは間違っていたようです。
DCMAKE_SHARED_LINKER_FLAGSで渡すのが正しいようです。
cmake2のようにしてみましたがまだエラーが発生します。
Error:
/usr/bin/ld: CMakeFiles/obj.clang-tblgen.dir/TableGen.cpp.o: in function `main':
/home/username/src/llvm-project/clang/utils/TableGen/TableGen.cpp:306: undefined reference to `llvm::cl::ParseCommandLineOptions(int, char const* const*, llvm::StringRef, llvm::raw_ostream*, char const*)'
collect2: error: ld returned 1 exit status
cmake:
cmake -G "Unix Makefiles" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX="/home/username/clang_test_opt" \
-DCMAKE_C_FLAGS="-I/home/username/opt/include \
-I/home/username/src/llvm-project/include \
-I/home/username/src/llvm-project/llvm/include \
-L/home/username/opt/lib \
-lLLVMSupport" \
-DCMAKE_CXX_FLAGS="-I/home/username/opt/include \
-I/home/username/src/llvm-project/clang/include \
-I/home/username/src/llvm-project/llvm/include \
-L/home/username/opt/lib \
-lLLVMSupport" \
-DLLVM_TABLEGEN_EXE="/home/username/opt/bin/llvm-tblgen" \
-DLLVM_LIBRARY_DIR="/home/username/llvm-project/llvm/lib" \
-DLLVM_TOOLS_BINARY_DIR="/home/username/opt/bin" \
-DLLVM_MAIN_INCLUDE_DIR="/home/username/src/llvm-project/llvm/include" \
-DLLVM_DIR="/home/username/src/llvm-project/llvm/cmake" \
../llvm-project/clang
cmake2:
cmake -G "Unix Makefiles" \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_INSTALL_PREFIX=/home/username/clang_test_opt \
-DCMAKE_C_FLAGS="-I/home/username/opt/include \
-I/home/username/src/llvm-project/include \
-I/home/username/src/llvm-project/llvm/include" \
-DCMAKE_CXX_FLAGS="-I/home/username/opt/include \
-I/home/username/src/llvm-project/clang/include \
-I/home/username/src/llvm-project/llvm/include" \
-DCMAKE_SHARED_LINKER_FLAGS="-L/home/username/opt/lib \
-lLLVMSupport" \
-DLLVM_TABLEGEN_EXE=/home/username/opt/bin/llvm-tblgen \
-DLLVM_LIBRARY_DIR=/home/username/llvm-project/llvm/lib \
-DLLVM_TOOLS_BINARY_DIR=/home/username/opt/bin \
-DLLVM_MAIN_INCLUDE_DIR=/home/username/src/llvm-project/llvm/include \
-DLLVM_DIR=/home/username/src/llvm-project/llvm/cmake \
-DZ3_LIBRARIES=/home/username/opt/lib \
-DZ3_INCLUDE_DIR=/home/username/opt/include \
../llvm-project/clang