LLVM是许多令人惊叹的工业和学术项目所采用的最先进的编译器优化和代码生成框架,例如JavaScript引擎中的即时编译(JIT)编译器和机器学习(ML)框架。它是构建编程语言和二进制文件工具的有用工具箱。然而,尽管该项目具有强大的稳健性,但其学习资源分散,文档也不是最佳的。因此,即使是对LLVM有一定经验的开发者,其学习曲线也相当陡峭。本书旨在通过以实用的方式为您提供LLVM中常见和重要领域的知识来解决这些问题——向您展示一些有用的工程技巧,指出鲜为人知但方便的功能,并举例说明。
作为一名LLVM开发者,从源代码构建LLVM一直是您应该做的第一件事。鉴于LLVM如今的规模,这项任务可能需要几个小时才能完成。更糟糕的是,为了反映更改而重新构建项目可能也需要很长时间,并妨碍您的生产力。因此,了解如何使用正确的工具以及如何为您的项目找到最佳构建配置以节省各种资源(尤其是您宝贵的时间)至关重要。
在本章中,我们将涵盖以下主题:
- 通过更好的工具减少构建资源
- 通过调整CMake参数节约构建资源
- 学习如何使用GN(LLVM的另一种构建系统)及其优缺点
技术要求
在写这本书的时候,LLVM只有几个软件要求:
- 支持C++14的C/C++编译器
- CMake
- CMake支持的构建系统之一,例如GNU Make或Ninja
- Python(2.7也可以,但我强烈建议使用3.x)
- zlib
这些项目的确切版本会不时变化。有关更多详细信息,请访问https://llvm.org/docs/GettingStarted.html#software。
本章假设您以前构建过LLVM。如果不是这种情况,请执行以下步骤:
-
从GitHub获取LLVM源代码树的副本:
$ git clone https://github.com/llvm/llvm-project
-
通常,默认分支应该可以无错误构建。如果您想使用更稳定的发布版本,例如发布版本10.x,请使用以下命令:
$ git clone -b release/10.x https://github.com/llvm/llvm-project
-
最后,您应该创建一个构建文件夹,在其中调用CMake命令。所有构建工件也将放置在此文件夹中。可以使用以下命令完成此操作:
$ mkdir .my_build $ cd .my_build
通过更好的工具减少构建资源
正如本章开头所提到的,如果您使用默认(CMake)配置构建LLVM,通过调用CMake并以以下方式构建项目,整个过程很有可能需要几个小时才能完成:
$ cmake ../llvm
$ make all
通过简单地使用更好的工具和更改一些环境可以避免这种情况。在本节中,我们将介绍一些指南,以帮助您选择正确的工具和配置,这些工具和配置既可以缩短您的构建时间,又可以改善内存占用。
用Ninja替换GNU Make
我们可以做的第一个改进是使用Ninja构建工具(