使用cmake构建和打包LLVM clang 3.4

时间:2014-03-14 18:07:48

标签: c++11 cmake clang llvm

我大约两周前开始研究cmake并喜欢它。到目前为止,我已成功构建和打包(使用本机系统打包格式libc++abilibc++llvm 3.4所有{{1}对于RHEL 6.x,Fedora 20+和Ubuntu 12.04 LTS +,(cmake使用我自己的libc++abi设置)。

我想创建一个

的C ++构建环境
  1. 让我们免于依赖GNU GCC和cmake完全(因此我们不希望任何LLVM RPM / DEB来自上述发行版或LLVM Debian/Ubuntu nightly packages下载位点)
  2. 使我们能够完全探索C ++ 11和C ++ 1y 。换句话说,我们可以随时尝试甚至最前沿的LLVM / clang,同时使用包管理系统保持所有构建系统的清洁。
  3. 尽管如此,我试图在运行Ubuntu 12.04 LTS 64bit的构建主机上使用libstdc++构建clang 3.4,并使用 pure clang 3.3构建我没有对GNU cmake的任何依赖,以及libstdc++ 3.3和libc++。后两者也没有libc++abi依赖。我也是这样构建的。

    我非常了解Clang - Getting Started网页并成功使用了相关说明。但这些完全我不想使用的东西。它们也是不正确的:libstdc++的{​​{1}} 3.4清楚地说明了以下内容:

    CMakeLists.txt

    请参阅第1行和第2行。但是,我没有找到有关如何设置clang的任何LLVM文档。我尝试了以下方法:

     1  # If we are not building as a part of LLVM, build Clang as an
     2  # standalone project, using LLVM as an external library:
     3  if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
     4    project(Clang)
     5    cmake_minimum_required(VERSION 2.8)
     6  
     7    set(CLANG_PATH_TO_LLVM_SOURCE "" CACHE PATH
     8      "Path to LLVM source code. Not necessary if using an installed LLVM.")
     9    set(CLANG_PATH_TO_LLVM_BUILD "" CACHE PATH
    10      "Path to the directory where LLVM was built or installed.")
    

    并出现以下错误:

    CLANG_PATH_TO_LLVM_BUILD

    但那不对! LLVM + cmake -DCLANG_PATH_TO_LLVM_BUILD="../../llvm-3.4/build" .. 已使用我们自己的$ clang3.4/_tars/clang-3.4/build$ cmake -DCLANG_PATH_TO_LLVM_BUILD="../../llvm-3.4/build" .. -- The C compiler identification is Clang 3.3.0 -- The CXX compiler identification is Clang 3.3.0 -- Check for working C compiler: /usr/bin/clang -- Check for working C compiler: /usr/bin/clang -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/clang++ -- Check for working CXX compiler: /usr/bin/clang++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done CMake Error at CMakeLists.txt:39 (include): include could not find load file: AddLLVM CMake Error at CMakeLists.txt:40 (include): include could not find load file: TableGen -- Performing Test C_SUPPORTS_FLAG -- Performing Test C_SUPPORTS_FLAG - Success -- Performing Test CXX_SUPPORTS_FLAG -- Performing Test CXX_SUPPORTS_FLAG - Success -- Building with -fPIC -- Performing Test SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG -- Performing Test SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG - Success -- Found LibXml2: /usr/lib/x86_64-linux-gnu/libxml2.so (found version "2.7.8") -- Clang version: 3.4 -- Performing Test CXX_SUPPORTS_NO_NESTED_ANON_TYPES_FLAG -- Performing Test CXX_SUPPORTS_NO_NESTED_ANON_TYPES_FLAG - Success CMake Error at utils/TableGen/CMakeLists.txt:3 (add_tablegen): Unknown CMake command "add_tablegen". -- Configuring incomplete, errors occurred! 安装在构建主机上。而且,

    compiler-rt

    所以,所有必需的DEB模块都在那里 - 就在系统上!

    我很感激如何强制$ llvm/clang3.4/_tars/clang-3.4/build$ ls /usr/share/llvm/cmake AddLLVM.cmake ChooseMSVCCRT.cmake linux_issue.cmake LLVMConfigVersion.cmake pkg.cmake AddLLVMDefinitions.cmake GetSVN.cmake LLVM-Config.cmake LLVMParseArguments.cmake TableGen.cmake arch.cmake HandleLLVMOptions.cmake LLVMConfig.cmake LLVMProcessSources.cmake 3.4使用cmake进行构建,已经安装了LLVM 3.4 + clang 3.4。

    更新

    我决定做以下事情:

    cmake

    那更好。看起来像compiler-rt 3.4'默认$ llvm/clang3.4/_tars/clang-3.4/build$ cmake -DCLANG_PATH_TO_LLVM_BUILD="/usr" .. -- Building with -fPIC -- Clang version: 3.4 -- Found Subversion: /usr/bin/svn (found version "1.6.17") -- Configuring done -- Generating done -- Build files have been written to: ../llvm/clang3.4/_tars/clang-3.4/build ../llvm/clang3.4/_tars/clang-3.4/build$ make -j 2 Scanning dependencies of target ClangDriverOptions Scanning dependencies of target clang-tblgen [ 0%] Building Options.inc... [ 0%] ../llvm/clang3.4/_tars/clang-3.4/include/clang/Driver/Options.td:15:9: error: Could not find include file 'llvm/Option/OptParser.td' include "llvm/Option/OptParser.td" ^ .../llvm/clang3.4/_tars/clang-3.4/include/clang/Driver/Options.td:15:9: Building CXX object utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangASTNodesEmitter.cpp.o error: Unexpected input at top level include "llvm/Option/OptParser.td" ^ make[2]: *** [include/clang/Driver/Options.inc.tmp] Error 1 make[1]: *** [include/clang/Driver/CMakeFiles/ClangDriverOptions.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... [ 0%] Building CXX object utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangAttrEmitter.cpp.o [ 0%] Building CXX object utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangCommentCommandInfoEmitter.cpp.o [ 0%] Building CXX object utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp.o [ 1%] Building CXX object utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangCommentHTMLTagsEmitter.cpp.o [ 1%] Building CXX object utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangDiagnosticsEmitter.cpp.o [ 1%] Building CXX object utils/TableGen/CMakeFiles/clang-tblgen.dir/ClangSACheckersEmitter.cpp.o [ 1%] Building CXX object utils/TableGen/CMakeFiles/clang-tblgen.dir/NeonEmitter.cpp.o [ 1%] Building CXX object utils/TableGen/CMakeFiles/clang-tblgen.dir/TableGen.cpp.o Linking CXX executable ../llvm/clang3.4/_tars/llvm-3.4/build/bin/clang-tblgen [ 1%] Built target clang-tblgen make: *** [all] Error 2 甚至不是QA-ed x-(Yikes x - (

2 个答案:

答案 0 :(得分:4)

我决定坚持,因为任何自尊的工程师都会这样做:)我只是查看以下两个文件并添加完整路径到违规包含,然后就是这样。

  1. Options.td
  2. CC1AsOptions.td
  3. 现在,我可以构建所有不需要libstdc++依赖项的LLVM主项目,所有项目都与libc++libc++abi相关联。万岁:)

    所以,我已经确认了

    • Getting Started: Building and Running Clang中给出的某些说明具有误导性,例如的 7 即可。
    • 所有主要的LLVM项目(compiler-rt AFAIK除外)都可以使用cmake构建。无需在LLVM源代码树下将它们整合在一起进行构建。你绝对可以在Linux上单独构建它们,不像这些“官方”文档可能让你相信:>

    LLVM团队应该真正考虑并最小化所有项目中明显的循环依赖性。在各种Linux发行版上引导LLVM / clang(尤其是较旧的发行版,如RHEL 5.x)没有 GNU libstdc++依赖性太繁琐 - 从我的第一手经验来讲。他们可以完成(我已经完成了:)但它不适合胆小的人。

答案 1 :(得分:2)

我认为这个项目符合你的目标:

https://github.com/rsmmr/install-clang

我在FC16 +上使用过它,但确实在RHEL5.x上遇到了引导问题。