Building LLVM with CMake

1.Introduction

CMAKE是一个跨平台构建生成器工具。cmake不会构建项目,它会生成构建llvm所需的构建工具(gnu make、Visual Studio等)所需的文件。

如果您是新的参与者,请从“LLVM系统入门”页面开始。此页面适用于从旧配置/生成系统移动的现有参与者。

如果您真的很担心得到一个功能性的LLVM构建,请转到快速启动部分。如果你是一个CMAKE新手,从基本的CMAKE用法开始,然后在你知道你在做什么之后回到快速入门部分。选项和变量部分是自定义构建的参考。如果您已经有过cmake的经验,这是建议的起点。

此页面面向llvm cmake构建的用户。如果您正在寻找有关修改llvm cmake构建系统的信息,您可能希望看到cmake primer页面。它对cmake语言有一个基本的概述。

2.Quick start

我们在这里使用命令行,非交互式cmake界面。

  • 下载并安装cmake。最低要求是3.4.3版。
  • 打开一个shell。您的开发工具必须可以通过path环境变量从此shell访问。
  • 创建生成目录。llvm不支持在源目录中编译。cd到这个目录:
$ mkdir mybuilddir
$ cd mybuilddir
  • 在shell中执行此命令,将path/to/llvm/source/root替换为llvm源树的根路径:
$ cmake path/to/llvm/source/root

CMake将检测您的开发环境,执行一系列测试,并生成构建LLVM所需的文件。CMake将为所有构建参数使用默认值。有关可修改的生成参数列表,请参阅“选项和变量”部分。

如果CMake无法检测到您的工具集,或者它认为环境不够健全,则此操作可能会失败。在本例中,请确保您打算使用的工具集是惟一可以从shell访问的工具集,并且shell本身是适合您的开发环境的工具集。例如,如果您有一个可以通过PATH环境变量访问的POSIX shell, CMake将拒绝构建MinGW makefile。您可以强制CMake使用给定的构建工具;有关说明,请参见下面的用法部分。

  • CMake运行完成后,继续使用IDE项目文件,或者从build目录开始构建:
$ cmake --build .

--build选项告诉cmake调用底层构建工具(make、ninja、xcodebuild、msbuild等)。

当然,底层构建工具可以直接调用,但是--build选项是可移植的。

  • LLVM完成构建后,从build目录中安装:
$ cmake --build . --target install

除--build选项外,--target选项还带有install参数,它告诉cmake构建安装目标。

可以通过调用cmake_install在安装时设置不同的安装前缀。生成在build目录中的cmake脚本:

$ cmake -DCMAKE_INSTALL_PREFIX=/tmp/llvm -P cmake_install.cmake

3.Basic CMake usage

本节解释CMake的基本方面,您可能在日常使用中需要这些方面。

CMake附带了大量的文档,以html文件的形式提供,并通过CMake可执行文件本身提供在线帮助。执行cmake --help以获得更多的帮助选项。

CMake允许您指定一个构建工具(例如,GNU make、Visual Studio或Xcode)。如果没有在命令行中指定,CMake将根据您的环境尝试猜测要使用哪个构建工具。一旦确定了构建工具,CMake就使用相应的生成器为构建工具创建文件(例如,makefile或Visual Studio或Xcode项目文件)。您可以使用命令行选项-G“Name of the generator”显式指定生成器。要查看系统上可用生成器的列表,请执行

$ cmake --help

这将在帮助文本的末尾列出生成器名称。

生成器的名称区分大小写,并且可能包含空格。出于这个原因,您应该按照cmake -help输出中所列的方式,在引号中输入它们。例如,要为Visual Studio 12生成特定的项目文件,您可以执行:

$ cmake -G "Visual Studio 12" path/to/llvm/source/root

对于给定的开发平台,可以有多个足够的生成器。如果您使用Visual Studio,“NMake makefile”是一个可以用NMake构建的生成器。默认情况下,CMake选择您的开发环境支持的最特定的生成器。如果你想要一个替代的生成器,你必须告诉CMake使用-G选项。

4.Options and variables

变量自定义生成构建的方式。选项是布尔变量,可能的值是ON/OFF。选项和变量在CMake命令行上定义如下:

$ cmake -DVARIABLE=value path/to/llvm/source

您可以在初始CMake调用之后设置一个变量来更改其值。你也可以取消定义一个变量:

$ cmake -UVARIABLE path/to/llvm/source

变量存储在CMake缓存中。这是一个名为CMakeCache.txt的文件,存储在由cmake生成的构建目录的根目录中。不建议您自己编辑它。

变量列在CMake缓存中,稍后在本文档中,变量名和类型由冒号分隔。您还可以在CMake命令行上指定变量和类型:

$ cmake -DVARIABLE:TYPE=value path/to/llvm/source

5.Frequently-used CMake variables

下面是一些经常使用的CMake变量,以及简单的解释和特定于llvm的注释。要获得完整的文档,请参考CMake手册,或者执行CMake --help-variable VARIABLE_NAME。

CMAKE_BUILD_TYPE:字符串

为基于令牌的生成器设置生成类型。可能的值是Release、Debug、RelWithDebInfo和MinSizeRel。如果您正在使用诸如Visual Studio之类的IDE,您应该使用IDE设置来设置构建类型。注意Release和RelWithDebInfo在大多数平台上使用不同的优化级别。

CMAKE_INSTALL_PREFIX:路径

调用“make install”或构建“install”目标时,LLVM将安装到的路径。

LLVM_LIBDIR_SUFFIX:字符串

附加附加后缀到要安装库的目录。在64位体系结构上,可以使用-DLLVM_LIBDIR_SUFFIX=64将库安装到/usr/lib64。

CMAKE_C_FLAGS:字符串

编译C源文件时要使用的额外标志。

CMAKE_CXX_FLAGS:字符串

编译c++源文件时要使用的额外标志。

6.LLVM-specific变量

LLVM_TARGETS_TO_BUILD:字符串

以分号分隔的要构建的目标列表,或用于构建所有目标的all。大小写敏感的。默认为全部。例如:-DLLVM_TARGETS_TO_BUILD = " X86; PowerPC”。

LLVM_BUILD_TOOLS: BOOL

构建LLVM工具。默认为ON。在任何情况下,都会生成构建每个工具的目标。您可以通过调用工具的目标来单独构建工具。例如,您可以通过在构建目录的根目录下执行make llvm-as来使用基于makefile的系统构建llvm-as。

LLVM_INCLUDE_TOOLS: BOOL

为LLVM工具生成生成目标。默认为ON。您可以使用此选项来禁用为LLVM工具生成构建目标。

LLVM_INSTALL_BINUTILS_SYMLINKS: BOOL

安装从binutils工具名称到相应LLVM工具的符号链接。例如,ar将符号链接到llvm-ar。

LLVM_BUILD_EXAMPLES: BOOL

构建LLVM的例子。缺省值为OFF。在任何情况下都会生成构建每个示例的目标。有关更多细节,请参见上面的LLVM_BUILD_TOOLS文档。

LLVM_INCLUDE_EXAMPLES: BOOL

为LLVM示例生成构建目标。默认为ON。您可以使用此选项来禁用生成LLVM示例的构建目标。

LLVM_BUILD_TESTS: BOOL

构建LLVM单元测试。在任何情况下,都会生成构建每个单元测试的目标。您可以使用在单元测试下定义的目标来构建一个特定的单元测试,例如ADTTests、IRTests、SupportTests等等(在单元测试的子目录中搜索add_llvm_unittest,以获得完整的单元测试列表)。可以使用目标单元测试构建所有单元测试。

LLVM_INCLUDE_TESTS: BOOL

为LLVM单元测试生成生成目标。默认为ON。您可以使用此选项来禁用为LLVM单元测试生成构建目标。

LLVM_BUILD_BENCHMARKS: BOOL

将基准添加到默认目标列表中。默认为OFF。

LLVM_INCLUDE_BENCHMARKS: BOOL

为LLVM基准生成构建目标。默认为ON。

LLVM_APPEND_VC_REV: BOOL

嵌入版本控制修订信息(svn revision number或Git revision id))。版本信息由llvm/include/llvm/Support/vcsupdate.h中的LLVM_REVISION宏提供。不需要修订信息的git开发人员可以禁用此选项,以避免在分支切换之后重新链接大多数二进制文件。默认为ON。

发布了43 篇原创文章 · 获赞 23 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zhang14916/article/details/89498689