当前位置: 首页 > article >正文

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

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


http://www.kler.cn/a/422156.html

相关文章:

  • CSS 动画效果实现:图片展示与交互
  • 【后端面试总结】缓存策略选择
  • 【Linux篇】权限管理 - 用户与组权限详解
  • 【RDMA】RDMA read和write编程实例(verbs API)
  • 【机器学习】窥数据之序,悟算法之道:机器学习的初心与远方
  • `pnpm` 不是内部或外部命令,也不是可运行的程序或批处理文件(问题已解决,2024/12/3
  • 基于Java Springboot旅游攻略APP且微信小程序
  • 6.824/6.5840(2024)环境配置wsl2+vscode
  • 使用Apache HttpClient发起一个POST HTTP请求
  • 【Android 腾讯地图】腾讯地图开发记录 ① ( 地图基础显示 | 创建应用和申请key | 配置远程依赖库 | 配置腾讯地图 Key | 同意隐私协议 | 布局设置 | 覆盖自定义地图图片 )
  • burp2
  • DeviceIoControl超时后如何处理
  • 【Spring】接口版本控制最佳实现
  • Vue3 父子组件传值
  • ESLint 规则入门:如何配置重要性及选项(2)
  • 【数据分析】如何根据数据选择图表类型
  • 【Android】组件化嘻嘻嘻gradle耶耶耶
  • 下载 M3U8 格式的视频
  • c++ mfc调用UpdateData(TRUE)时,发生异常
  • ElasticSearch easy-es 聚合函数 group by 混合写法求Top N 词云 分词
  • k8s,声明式API对象理解
  • 基于Java Springboot广西文化传承微信小程序
  • 洛谷 B2029:大象喝水 ← 圆柱体体积
  • 《Vue零基础教程》(5)计算属性和侦听器好讲解
  • 【Linux|计算机网络】HTTPS工作原理与安全机制详解
  • 说说Elasticsearch查询语句如何提升权重?