llvm实践日志(1)---安装llvm

2024-05-27 00:36
文章标签 安装 实践 日志 llvm

本文主要是介绍llvm实践日志(1)---安装llvm,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考了官方教程:Getting Started with the LLVM System — LLVM 19.0.0git documentation

首先从github拷贝一份源码,使用了官方推荐的方法:

git clone --depth 1 https://github.com/llvm/llvm-project.git

我的系统是ubuntu22,安装过程中需要使用到cmake、make、gcc、g++等工具,提前安装一下

sudo apt update
sudo apt upgrade
sudo apt install cmake ninja-build gcc g++

具体需要安装哪些工具,可以更具cmake时的提示,按需安装。

在llvm-project根目录下执行cmake构建ninja工程

cmake -S llvm -B build -G Ninja -DLLVM_PARALLEL_LINK_JOBS=1 \
-DCMAKE_BUILD_TYPE=Debug -DLLVM_OPTIMIZED_TABLEGEN=ON -DLLVM_USE_SPLIT_DWARF=ON \
-DLLVM_ENABLE_PROJECTS="clang;lld;mlir" -DLLVM_BUILD_EXAMPLES=ON

cmake用到的几个参数说明如下:

-S 源代码路径
-B 编译路径
-G 目标工程类型,可选的有ninja、makefile、VS、XCode等,在Linux下面ninja比makefile快
-DLLVM_PARALLEL_LINK_JOBS 设置链接时使用的进程数,该参数只对ninja有效,链接时内存需求大,在内存有限的情况下可限制同时进行链接的进程数量,避免内存不足
-DCMAKE_BUILD_TYPE 设置Dbug/Release,对于编译器开发,选择Debug,方便调试编译器
-DLLVM_OPTIMIZED_TABLEGEN=ON 使用TableGen优化器,提升编译效率
-DLLVM_USE_SPLIT_DWARF=ON 以DWARF文件格式存储调试信息,可大大提高编译效率
-DLLVM_ENABLE_PROJECTS 设置llvm附带的子工程,比如clang、lld、mlir等,也就是说,默认只会编译llvm核心,如果要用到其他组件,需要在这边设置
-DLLVM_BUILD_EXAMPLES=ON 编译示例,方便学习

使用ninja编译

ninja -C build

安装

ninja -C build install

总结一下,下载编译步骤比较常规明了,需要注意的是内存大小和硬盘空间。

如果要编译带调试信息的clang,推荐内存是32GB,内存不足可以使用swap空间不足。

 硬盘空间需求量也很大,以编译Debug版本llvm、clang、lld、mlir为例,build目录大小大约200GB,磁盘空间使用量还是很大的,编译之前需要准备足够的磁盘空间。

这篇关于llvm实践日志(1)---安装llvm的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1006030

相关文章

win10安装及配置Gradle全过程

《win10安装及配置Gradle全过程》本文详细介绍了Gradle的下载、安装、环境变量配置以及如何修改本地仓库位置,通过这些步骤,用户可以成功安装并配置Gradle,以便进行项目构建... 目录一、Gradle下载1.1、Gradle下载地址1.2、Gradle下载步骤二、Gradle安装步骤2.1、安

Java 的ArrayList集合底层实现与最佳实践

《Java的ArrayList集合底层实现与最佳实践》本文主要介绍了Java的ArrayList集合类的核心概念、底层实现、关键成员变量、初始化机制、容量演变、扩容机制、性能分析、核心方法源码解析、... 目录1. 核心概念与底层实现1.1 ArrayList 的本质1.1.1 底层数据结构JDK 1.7

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

springboot依靠security实现digest认证的实践

《springboot依靠security实现digest认证的实践》HTTP摘要认证通过加密参数(如nonce、response)验证身份,避免明文传输,但存在密码存储风险,相比基本认证更安全,却因... 目录概述参数Demopom.XML依赖Digest1Application.JavaMyPasswo

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

python依赖管理工具UV的安装和使用教程

《python依赖管理工具UV的安装和使用教程》UV是一个用Rust编写的Python包安装和依赖管理工具,比传统工具(如pip)有着更快、更高效的体验,:本文主要介绍python依赖管理工具UV... 目录前言一、命令安装uv二、手动编译安装2.1在archlinux安装uv的依赖工具2.2从github

Java 结构化并发Structured Concurrency实践举例

《Java结构化并发StructuredConcurrency实践举例》Java21结构化并发通过作用域和任务句柄统一管理并发生命周期,解决线程泄漏与任务追踪问题,提升代码安全性和可观测性,其核心... 目录一、结构化并发的核心概念与设计目标二、结构化并发的核心组件(一)作用域(Scopes)(二)任务句柄

Java中的Schema校验技术与实践示例详解

《Java中的Schema校验技术与实践示例详解》本主题详细介绍了在Java环境下进行XMLSchema和JSONSchema校验的方法,包括使用JAXP、JAXB以及专门的JSON校验库等技术,本文... 目录1. XML和jsON的Schema校验概念1.1 XML和JSON校验的必要性1.2 Sche

SpringBoot集成WebService(wsdl)实践

《SpringBoot集成WebService(wsdl)实践》文章介绍了SpringBoot项目中通过缓存IWebService接口实现类的泛型入参类型,减少反射调用提升性能的实现方案,包含依赖配置... 目录pom.XML创建入口ApplicationContextUtils.JavaJacksonUt