欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > llvm源码编译

llvm源码编译

2025/2/7 20:42:35 来源:https://blog.csdn.net/weixin_43890959/article/details/144181437  浏览:    关键词:llvm源码编译

0x00 获取llvm源码

获取llvm项目源码:git clone https://github.com/llvm/llvm-project.git

但是,该项目较大,且直接从github下载源码可能会超时失败。可利用gitee的镜像项目进行clone:git clone --depth 1 https://gitee.com/mirrors/LLVM.git

–depth 1,进行浅层克隆,获取LLVM项目的最新版本。
详细参见:https://llvm.org/docs/GettingStarted.html#getting-the-source-code-and-building-llvm


0x01 构建cmake

cd LLVM
mkdir build
cd build
cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_TARGETS_TO_BUILD="X86" -DCMAKE_BUILD_TYPE=Debug -DLLVM_INCLUDE_TESTS=OFF -DLLVM_ENABLE_RTTI=ON  -DCMAKE_INSTALL_PREFIX="/path/to/llvm"  -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON ../llvm

编译选项:

  • -DLLVM_ENABLE_PROJECTS:指定要额外构建的子项目,否则只编译基本的llvm项目。"clang;lld"指定在构建过程中会启用 Clang 编译器前端和 LLD 链接器这两个子项目。Clang 是一个 C/C++/Objective-C 编译器,而 LLD 是 LLVM 项目中的链接器。
  • -DLLVM_TARGETS_TO_BUILD:指定要构建的目标架构。
  • -DCMAKE_BUILD_TYPE=Debug: 可选的参数有Release/Debug/RelWithDebInfo/MinSizeRel。Debug意味着构建将包含调试信息,并且优化级别较低,便于调试。
  • -DLLVM_INCLUDE_TESTS=OFF: 不编译测试代码,可以减少构建时间和最终输出的大小。
  • -DLLVM_ENABLE_RTTI=ON: 启用运行时类型信息 (RTTI),这是 C++ 中的一种特性,允许程序在运行时查询对象的类型。
  • …/llvm: 这是 CMake 项目的源代码目录,指定为llvm-project/llvm
  • -DCMAKE_INSTALL_PREFIX:自定义安装路径。


cmake的环境变量配置(适用于cmake的自定义安装路径)

# 将cmake的安装路径添加至环境变量(临时)
export PATH=/path/to/cmake/bin:$PATH
# 导入.bashrc或.zshrc文件中(永久生效)
echo 'export PATH=/usr/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

0x02 编译llvm

# 指定并行任务数, $(nproc)可用于获取当前系统中的CPU核心数
# 编译过程中会出现一些警告, 只要不报错就行。
# 8核CPU+16G内存编译了将近2个小时。为了加快编译速度,初始阶段可以不设置最大线程数。当发生错误时,通常是内存不足引起的,可尝试通过-j参数控制并行线程数,但编译速度会降低。
ninja -j x
# 安装llvm
ninja install
# 检查llvm是否安装成功
llvm-config --version

编译过程中,因内存不足所引起的报错如下:
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com