Learn-LLVM-17 chapter01学习笔记

LLVM 17 learning

第 1 章 安装 LLVM - 学习笔记

本文为《Learn LLVM 17》第 1 章的学习笔记,主要介绍如何从源码构建 LLVM、配置开发环境,以及自定义构建过程。

1. 本章概览

1.1 学习目标

主题 内容
环境准备 构建系统所需工具
源码构建 克隆、配置、编译、安装 LLVM 与 clang
自定义构建 CMake 变量、LLVM 构建选项

1.2 为何从源码构建 LLVM?

原因 说明
开发包完整 发行版可能缺少头文件、库等开发所需文件
可定制 了解如何自定义,便于跨平台诊断
扩展需求 本书第三部分需扩展 LLVM,需具备自行构建能力

替代方案:可直接安装预编译二进制,只需安装下一节中的工具即可。

Note:Ubuntu 等发行版将 LLVM 拆成多个包,需安装 llvm-dev 等开发包,并确认版本为 LLVM 17。


2. 配置环境

2.1 系统要求

项目 要求
操作系统 Linux、FreeBSD、macOS、Windows
磁盘空间 Release 单平台约 2 GB;Debug 全构建可达 30 GB
硬件 多核 CPU、SSD 可显著缩短编译时间

2.2 必备软件及版本

工具 最低版本 说明
Git 1.17.10(建议 2.39.1+) 克隆源码,注意安全更新
CMake 3.20.0 构建文件生成器
Ninja 建议 1.11.1 快速构建系统,跨平台
C/C++ 编译器 见下表 需支持 C++17
Python 3.8+ 生成构建文件、运行测试
GNU Make 3.79+ 可选,替代 Ninja
zlib 1.2.3.4(建议 1.2.13) 依赖库

2.3 兼容的 C/C++ 编译器

编译器 最低版本
GCC 7.1.0+
Clang 5.0+
Apple Clang 10.0+
Visual Studio 2019 16.7+

Tip:建议使用系统可用的最新编译器版本。

2.4 各平台安装命令

Ubuntu 22.04

1
$ sudo apt -y install gcc g++ git cmake ninja-build zlib1g-dev

Fedora 37 / RHEL 9

1
$ sudo dnf -y install gcc gcc-c++ git cmake ninja-build zlib-devel

FreeBSD 13+

1
$ sudo pkg install -y git cmake ninja zlib-ng

macOS (Homebrew)

1
$ brew install git cmake ninja zlib

(需先安装 Xcode 获取 C/C++ 编译器)

Windows

  1. 安装 Visual Studio Community 2022,选择「Desktop Development with C++」工作负载
  2. 安装 Scoop 后,在 x64 Native Tools Command Prompt 中执行:
1
2
3
$ scoop install git cmake ninja python gzip bzip2 coreutils
$ scoop bucket add extras
$ scoop install zlib
  1. 按 Scoop 提示添加注册表项(Python、zlib)

Tip:推荐使用 VS Code 等 IDE 方便浏览 LLVM 源码。


3. 从源码构建 LLVM

3.1 流程概览

1
配置 Git → 克隆库 → 创建构建目录 → 生成构建文件 → 编译 → 测试 → 安装

3.2 配置 Git

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 检查是否已配置
$ git config user.email
$ git config user.name

# 首次配置
$ git config --global user.email "jane@email.org"
$ git config --global user.name "Jane"

# 可选:更换提交编辑器
$ git config --global core.editor nano

3.3 克隆库

类 Unix / macOS:

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

Windows(禁用行尾自动转换):

1
$ git clone --config core.autocrlf=false https://github.com/llvm/llvm-project.git
1
$ cd llvm-project

3.4 检出 LLVM 17

1
2
# 从标签创建分支
$ git checkout -b llvm-17 llvmorg-17.0.1

其他方式

  • git clone --branch release/17.x ...:只克隆 release 分支
  • --depth=1:浅克隆,节省空间,但无法按标签 checkout

3.5 创建构建目录

1
2
3
4
5
# 类 Unix
$ mkdir build

# Windows
$ md build

LLVM 不支持源码目录内构建,必须使用独立构建目录。

3.6 生成构建系统文件

1
2
$ cmake -G Ninja -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_ENABLE_PROJECTS=clang -B build -S llvm
选项 含义
-G Ninja 使用 Ninja 构建系统
-DCMAKE_BUILD_TYPE=Release Release 构建
-DLLVM_ENABLE_PROJECTS=clang 同时构建 clang
-B build 构建目录
-S llvm 源码目录

常用生成器NinjaUnix MakefilesVisual Studio 17 VS2022Xcode

环境变量预设(可选):

1
2
3
4
5
6
7
# Bash
$ export CMAKE_GENERATOR=Ninja
$ export CMAKE_BUILD_TYPE=Release

# Windows CMD
$ set CMAKE_GENERATOR=Ninja
$ set CMAKE_BUILD_TYPE=Release

3.7 编译

1
$ cmake --build build
  • 编译时间:约 15 分钟(高性能服务器)到数小时(低配笔记本)
  • 默认使用所有 CPU 核心
  • 限制并行度:cmake --build build -j2

3.8 运行测试

1
$ cmake --build build --target check-all
目标 说明
check-all 所有测试(LLVM + clang)
check-llvm 仅 LLVM 测试
check-llvm-codegen 仅 CodeGen 目录测试

快速验证

1
$ build/bin/llc --version

3.9 安装

1
$ cmake --install build
  • 类 Unix:默认安装到 /usr/local
  • Windows:默认安装到 C:\Program Files\LLVM

4. 自定义构建

4.1 CMake 变量说明

  • CMAKE_ 前缀:CMake 通用变量
  • LLVM_ 前缀:LLVM 专用变量
  • 使用 -DVAR=value 在命令行设置

4.2 常用 CMake 变量

变量 功能
CMAKE_INSTALL_PREFIX 安装路径前缀,如 -DCMAKE_INSTALL_PREFIX=/opt/llvm
CMAKE_BUILD_TYPE Debug / Release / RelWithDebInfo / MinSizeRel
CMAKE_C_COMPILER C 编译器路径或名称
CMAKE_CXX_COMPILER C++ 编译器路径或名称
CMAKE_C_FLAGS / CMAKE_CXX_FLAGS 编译选项
CMAKE_MODULE_PATH 额外 CMake 模块搜索路径
PYTHON_EXECUTABLE Python 解释器路径

指定编译器

1
2
3
4
5
6
# 环境变量
$ CC=clang17 CXX=clang++17 cmake -B build -S llvm

# 或直接设置 CMake 变量
$ cmake -DCMAKE_C_COMPILER=clang17 \
  -DCMAKE_CXX_COMPILER=clang++17 -B build -S llvm

4.3 LLVM 构建配置变量(入门)

变量 功能
LLVM_TARGETS_TO_BUILD 目标架构列表,如 "PowerPC;SystemZ"all 表示全部
LLVM_EXPERIMENTAL_TARGETS_TO_BUILD 实验目标,如 M68kARCCSKY
LLVM_ENABLE_PROJECTS 子项目列表,如 "clang;bolt"

支持的目标:AArch64、AMDGPU、ARM、AVR、BPF、Hexagon、Mips、NVPTX、PowerPC、RISCV、SystemZ、WebAssembly、X86 等。

子项目:bolt、clang、clang-tools-extra、compiler-rt、lld、lldb、mlir、openmp、polly、flang 等。

4.4 LLVM 构建配置变量(进阶)

变量 功能 默认
LLVM_ENABLE_ASSERTIONS 启用断言 Debug 为 ON
LLVM_ENABLE_EXPENSIVE_CHECKS 高开销检查 OFF
LLVM_APPEND_VC_REV 版本信息包含 Git 哈希 ON
LLVM_ENABLE_THREADS 线程支持 自动检测
LLVM_ENABLE_EH C++ 异常 OFF
LLVM_ENABLE_RTTI C++ RTTI OFF
LLVM_ENABLE_WARNINGS 编译警告 ON
LLVM_ENABLE_PEDANTIC 严格标准检查 ON
LLVM_ENABLE_WERROR 警告视为错误 OFF
LLVM_OPTIMIZED_TABLEGEN 优化 tablegen 构建 OFF
LLVM_USE_SPLIT_DWARF 分离 DWARF 调试信息 OFF

4.5 查看变量帮助

1
2
$ cmake --help-variable CMAKE_BUILD_TYPE
$ cmake --help-variable-list

5. 总结

5.1 构建流程速查

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 1. 克隆
git clone https://github.com/llvm/llvm-project.git
cd llvm-project
git checkout -b llvm-17 llvmorg-17.0.1

# 2. 配置
mkdir build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release \
  -DLLVM_ENABLE_PROJECTS=clang -B build -S llvm

# 3. 编译与测试
cmake --build build
cmake --build build --target check-all

# 4. 安装
cmake --install build

5.2 常见问题

遇到构建问题可参考:LLVM Getting Started - Common Problems

5.3 后续

第 2 章将介绍编译器的结构,包括词法、语法、语义分析及 LLVM 后端接口。


comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy