LLVM 6 Trunk 在 Ubuntu 16.04 上构建,未构建 lld
LLVM 6 Trunk Build on Ubuntu 16.04 not building lld
我正在 Ubuntu 16.04 上构建 LLVM 6。我也想要lld
。但无论我做什么,lld
都不会 build/install。
遵循 here 中的以下说明。 仍在筛选第一和第二:)
阅读文档。
阅读文档。
请记住,您曾两次收到有关阅读文档的警告。
特别是指定的相对路径很重要。
签出 LLVM:
cd where-you-want-llvm-to-live
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
结帐叮当声:
cd where-you-want-llvm-to-live
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
检查额外的 Clang 工具 [可选]:
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
检查 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
),我从他们的 github 镜像下载了 LLVM, Clang, clang-extra and lld 的相应 zip
。因为,我没有使用 svn
必须对文件夹进行一些重命名(例如 clang-tools-extra-master
只是 extra
)。
然后执行以下命令,cd
进入llvm
源文件夹的父文件夹后,
$ mkdir build; cd build
$ cmake ../llvm
$ make
等待+8小时后,我得到了除lld
以外的所有程序(clang
、lli
、llc
等)。我希望它出现在文件夹 build/bin
.
中
我也试过选项cmake -DLLVM_ENABLE_PROJECTS=llvm/tools/lld ../llvm
。 (表格 -DLLVM_ENABLE_PROJECTS=lld
不起作用,我发现 this 地方讨论了相同的 ENABLE 问题。)
我已经尝试了三次调整。由于编译需要很多时间,所以我决定接受你的帮助。
一个单独的问题:构建时,链接阶段在我的笔记本电脑上占用 12 GB RAM + 8.8 GB 交换空间 space!!构建 LLVM 真的需要 >20 GB 的内存吗? (我关闭了所有其他前台应用程序,尤其是 firefox
)
如果需要更多信息,请告诉我。
首先,如果您使用 "flat" 源目录布局,我认为 LLVM_ENABLE_PROJECTS
选项很有用。在你的情况下,如果你按照你写的那样执行了结帐,那么它就没有多大用处。
此外,@PaulR 写的关于使用 ninja
的内容是一个很好的建议。它在重新启动构建时更快且非常有用,它会根据 nproc
同时生成尽可能多的独立编译作业,而无需明确指定它。
为了更快地构建和缩短 link 时间,我还建议使用 BUILD_SHARED_LIBS
选项启用启用共享库的构建。
可以找到一些一般的好建议here,可以概括为:
- 使用
clang
构建 clang
(自举或第二阶段构建)。
- 使用
gold
linker 而不是 ld
以获得更快的 linking 时间。
- 更喜欢生成共享库的构建。
您现在可以跳过第 1 点(尽管您可以从系统包管理器安装初始 llvm/clang
)
最后,您可以使用 LLVM_TARGETS_TO_BUILD
选项限制当前需要的特定目标后端的编译。
我最近用这个 cmake
配置构建了 trunk
(包括 lld
):
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++
的引导构建,您可以将上述命令扩充为(在您的 $PATH
环境变量中包含 clang
):
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。
如您所写,阅读文档、试验并再次阅读文档是必经之路。
我正在 Ubuntu 16.04 上构建 LLVM 6。我也想要lld
。但无论我做什么,lld
都不会 build/install。
遵循 here 中的以下说明。 仍在筛选第一和第二:)
阅读文档。
阅读文档。
请记住,您曾两次收到有关阅读文档的警告。
特别是指定的相对路径很重要。
签出 LLVM:
cd where-you-want-llvm-to-live svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
结帐叮当声:
cd where-you-want-llvm-to-live cd llvm/tools svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
检查额外的 Clang 工具 [可选]:
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
检查 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
),我从他们的 github 镜像下载了 LLVM, Clang, clang-extra and lld 的相应 zip
。因为,我没有使用 svn
必须对文件夹进行一些重命名(例如 clang-tools-extra-master
只是 extra
)。
然后执行以下命令,cd
进入llvm
源文件夹的父文件夹后,
$ mkdir build; cd build
$ cmake ../llvm
$ make
等待+8小时后,我得到了除lld
以外的所有程序(clang
、lli
、llc
等)。我希望它出现在文件夹 build/bin
.
我也试过选项cmake -DLLVM_ENABLE_PROJECTS=llvm/tools/lld ../llvm
。 (表格 -DLLVM_ENABLE_PROJECTS=lld
不起作用,我发现 this 地方讨论了相同的 ENABLE 问题。)
我已经尝试了三次调整。由于编译需要很多时间,所以我决定接受你的帮助。
一个单独的问题:构建时,链接阶段在我的笔记本电脑上占用 12 GB RAM + 8.8 GB 交换空间 space!!构建 LLVM 真的需要 >20 GB 的内存吗? (我关闭了所有其他前台应用程序,尤其是 firefox
)
如果需要更多信息,请告诉我。
首先,如果您使用 "flat" 源目录布局,我认为 LLVM_ENABLE_PROJECTS
选项很有用。在你的情况下,如果你按照你写的那样执行了结帐,那么它就没有多大用处。
此外,@PaulR 写的关于使用 ninja
的内容是一个很好的建议。它在重新启动构建时更快且非常有用,它会根据 nproc
同时生成尽可能多的独立编译作业,而无需明确指定它。
为了更快地构建和缩短 link 时间,我还建议使用 BUILD_SHARED_LIBS
选项启用启用共享库的构建。
可以找到一些一般的好建议here,可以概括为:
- 使用
clang
构建clang
(自举或第二阶段构建)。 - 使用
gold
linker 而不是ld
以获得更快的 linking 时间。 - 更喜欢生成共享库的构建。
您现在可以跳过第 1 点(尽管您可以从系统包管理器安装初始 llvm/clang
)
最后,您可以使用 LLVM_TARGETS_TO_BUILD
选项限制当前需要的特定目标后端的编译。
我最近用这个 cmake
配置构建了 trunk
(包括 lld
):
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++
的引导构建,您可以将上述命令扩充为(在您的 $PATH
环境变量中包含 clang
):
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。
如您所写,阅读文档、试验并再次阅读文档是必经之路。