

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:

[code]

    /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
    
[/code]

cmake:

[code]

    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
    
[/code]

cmake2:

[code]

    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
    
[/code]


CC BY-SA 4.0
2019-09-19T15:32:48.500
59165
2022-04-09T14:03:15.387
2019-09-22T05:34:36.440
3060
5246
question
c++ build cmake llvm
clangのソースからのビルドに失敗する


質問された方の直接の疑問に答えるものではありませんが、  
ソースからビルドすることができました。こちらの環境で10時間ちょっとかかりました。

【clang】

[code]

    10.0.0(trunc 372494)
    
[/code]

【ビルドしたソース】

[code]

    svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
    svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
    svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
    svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
    
[/code]

【ビルドした環境】

  * WSL
  * Ubuntu18.04.3 LTS (Bionic Beaver)
  * cmake 3.10.2
  * gcc 7.4.0
  * ld 2.30
  * make 4.1
  * python 2.7.15+

【参考にしたページ】

[【2018年11月版】コンパイラ基盤LLVM+Clangをゼロからコンパイル／ビルドする（AWS + CentOS7）。 -
Qiita](https://qiita.com/YuukiMiyoshi/items/007bad9857ef0c0fa99a)

環境が異なるため手順を読み替える(※)必要がありますが、ほぼ無修正でビルドがうまくいきました。(※yumでなくaptを使用など)


CC BY-SA 4.0
2019-09-23T00:49:24.473
59205
2019-09-23T05:30:26.990
2019-09-23T05:30:26.990
3060
35558
59165
answer