llvm源码编译

embedded/2024/12/29 4:27:01/

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.ppmy.cn/embedded/143186.html

相关文章

Maven 内置绑定到底怎么回事?

Maven是一个很好的项目管理工具. 一方面有着众多脚手架,另一方面在依赖管理方面 帮助使用者做了很多准备工作. 随着Maven的使用和学习的深入,大家会不仅有一些问题。 比较浅显的一个就是, 日常我们的Maven 下载安装好以后,在IDE 里…

WebRover :一个功能强大的 Python 库,用于从 Web 内容生成高质量的数据集,专为训练大型语言模型和 AI 应用程序而设计。

2024-11-30 ,由Area-25团队开发的一个专门用于生成高质量网络内容数据集的Python库。该数据集旨在为大型语言模型(LLM)和人工智能应用的训练提供丰富的数据资源。 数据集地址:WebRover Dataset|自然语言处理数据集|AI模型训练数据…

Scala中的正则表达式01

规则类型具体规则示例说明单字符大多数字符匹配自身正则表达式 abc,文本 abca 匹配 a,b 匹配 b,c 匹配 c方括号 [ ][ ] 定义字符集,匹配其一[abc],文本 a、b 或 c[abc] 匹配 a、b 或者 c排除字符集 [^ ][^ ] 开头加 ^&…

反转字符串中每个单词的字符顺序,但保持单词之间的相对顺序不变(C++)

需求:用户输入一行字符(一个英语句子last week, I went to cinima.),将该行字符按照每个单词逆序输出(即输出:tsal keew, I tnew ot aminic.)。 要求 1.写一个函数用来实现每个单词的字符顺序…

微信小程序全屏显示地图

微信小程序在界面上显示地图&#xff0c;只需要用map标签 <map longitude"经度度数" latitude"纬度度数"></map>例如北京的经纬度为&#xff1a;116.407004,39.904595 <map class"bgMap" longitude"116.407004" lati…

opencvocr识别手机摄像头拍摄的指定区域文字,文字符合规则就语音报警

安装python&#xff0c;pycharm&#xff0c;自行安装。 Python下安装OpenCv 2.1 打开cmd,先安装opencv-python pip install opencv-python --user -i https://pypi.tuna.tsinghua.edu.cn/simple2.2 再安装opencv-contrib-python pip install opencv-contrib-python --user …

Artec Leo 3D扫描仪 革新家具行业的数字化展示【沪敖3D】

随着科技的飞速进步&#xff0c;三维扫描技术已被广泛应用于包括家居行业在内的多个行业。面对现代消费者对家居产品日益增长的个性化和多样化需求&#xff0c;传统的家居设计和展示方法已难以满足市场需求。三维扫描技术的出现&#xff0c;为家居行业带来了新的发展机遇&#…

华为HarmonyOS 让应用快速拥有账号能力 -- 3 获取用户手机号

场景介绍 当应用对获取的手机号时效性要求不高时&#xff0c;可使用Account Kit提供的手机号授权与快速验证能力&#xff0c;向用户发起手机号授权申请&#xff0c;经用户同意授权后&#xff0c;获取到手机号并为用户提供相应服务。以下只针对Account kit提供的手机号授权与快…