我正在Ubuntu 16.04上构建LLVM 6。我也想要lld
。但无论我做什么,lld
都不会构建/安装。
遵循here的以下说明。 仍在筛选第一和第二:)
阅读文档。
阅读文档。
请记住,您在阅读文档时被警告了两次。
特别是,指定的相对路径很重要。
Checkout LLVM:
cd where-you-want-llvm-to-live
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
Checkout Clang:
cd where-you-want-llvm-to-live
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
Checkout Extra Clang Tools [可选]:
cd where-you-want-llvm-to-live
cd llvm/tools/clang/tools
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
Checkout LLD链接器[可选]:
cd where-you-want-llvm-to-live
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/lld/trunk lld
没有下载其他可选包。由于svn
下载无法正常运行(svn: E000104: Error running context: Connection reset by peer
),因此我为LLVM,Clang,clang-extra和{{3}分别下载了zip
来自他们的github镜子。由于我没有使用svn
,因此必须对文件夹进行一些重命名(例如,clang-tools-extra-master
仅限extra
)。
然后在cd
进入llvm
源文件夹的父文件夹后执行以下操作
$ mkdir build; cd build
$ cmake ../llvm
$ make
等待+8小时后,除了clang
外,我获得了所有程序(lli
,llc
,lld
等)。我希望它出现在build/bin
文件夹中。
我也尝试了cmake -DLLVM_ENABLE_PROJECTS=llvm/tools/lld ../llvm
选项。 (-DLLVM_ENABLE_PROJECTS=lld
形式不起作用,我发现lld讨论了同一个ENABLE问题。)
我已经尝试了一些调整三次。由于编译需要很长时间,所以我决定接受你的帮助。
一个单独的问题:在构建时,链接阶段需要12 GB RAM + 8.8 GB交换空间在我的笔记本电脑上! LLVM构建真的需要> 20 GB的ram吗? (我关闭了所有其他前台应用,尤其是firefox
)
如果需要更多信息,请与我们联系。
答案 0 :(得分:1)
首先,我认为如果使用“平面”源目录布局,LLVM_ENABLE_PROJECTS
选项很有用。在您的情况下,如果您在编写时执行了检查,那么它没有多大用处。
此外,@ PaulR写的关于使用ninja
的内容是一个非常好的建议。它在重新启动构建时更快,更有用,它可以同时生成尽可能多的单独编译作业,具体取决于nproc
,而不必明确指定它。
为了加快构建速度并缩短链接时间,我还建议使用BUILD_SHARED_LIBS
选项启用共享库启用构建。
可以找到一些一般的好建议here,可以概括为:
clang
构建clang
(自举或第二阶段构建)。gold
链接器代替ld
以加快链接时间。您现在可以跳过第1点(尽管您可以从系统包管理器安装初始llvm/clang
)
最后,您可以使用LLVM_TARGETS_TO_BUILD
选项限制当前所需的特定目标后端的编译。
我最近使用trunk
配置构建了lld
(包括cmake
):
CC=gcc CXX=g++ \
cmake -G Ninja \
-DCMAKE_EXPORT_COMPILE_COMMANDS=On \
-DBUILD_SHARED_LIBS=On \
-DLLVM_ENABLE_ASSERTIONS=On \
-DLLVM_TARGETS_TO_BUILD="X86" \
-DLLVM_ENABLE_SPHINX=Off \
-DLLVM_ENABLE_THREADS=On \
-DLLVM_INSTALL_UTILS=On \
-DCMAKE_BUILD_TYPE=Debug \
[path-to-source-root-dir]
如果您需要构建libcxx
:
[...]
-DLLVM_ENABLE_LIBCXX=On \
-DLIBCXX_ENABLE_EXCEPTIONS=On \
-DLIBCXX_ENABLE_RTTI=On \
[...]
对于使用其他llvm/clang
和libc++
的自举构建,您可以将上述命令扩充为(在clang
环境变量中具有$PATH
):
LLVM_TOOLCHAIN_LIB_DIR=$(llvm-config --libdir)
LD_FLAGS=""
LD_FLAGS="${LD_FLAGS} -Wl,-L ${LLVM_TOOLCHAIN_LIB_DIR}"
LD_FLAGS="${LD_FLAGS} -Wl,-rpath-link ${LLVM_TOOLCHAIN_LIB_DIR}"
LD_FLAGS="${LD_FLAGS} -lc++ -lc++abi"
CXX_FLAGS=""
CXX_FLAGS="${CXX_FLAGS} -stdlib=libc++ -pthread"
CC=clang CXX=clang++ \
cmake -G Ninja \
-DCMAKE_EXPORT_COMPILE_COMMANDS=On \
-DBUILD_SHARED_LIBS=On \
-DLLVM_ENABLE_LIBCXX=On \
-DLLVM_ENABLE_ASSERTIONS=On \
-DLLVM_TARGETS_TO_BUILD="X86" \
-DLLVM_ENABLE_SPHINX=Off \
-DLLVM_ENABLE_THREADS=On \
-DLLVM_INSTALL_UTILS=On \
-DLIBCXX_ENABLE_EXCEPTIONS=On \
-DLIBCXX_ENABLE_RTTI=On \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_CXX_FLAGS="${CXX_FLAGS}" \
-DCMAKE_SHARED_LINKER_FLAGS="${LD_FLAGS}" \
-DCMAKE_MODULE_LINKER_FLAGS="${LD_FLAGS}" \
-DCMAKE_EXE_LINKER_FLAGS="${LD_FLAGS}" \
-DCMAKE_POLICY_DEFAULT_CMP0056=NEW \
-DCMAKE_POLICY_DEFAULT_CMP0058=NEW \
[path-to-source-root-dir]
此外,可以找到另一个相关的SO感兴趣的问题here。
正如您所写,阅读文档,再次尝试和阅读文档是可行的方法。