使用CMake构建LLVM系统

简介

CMake 是一款跨平台构建生成系统。虽然CMake本身并不负责项目构建,但它能够生成其他构建工具 (例如 GNU make, Visual Studio 等) 必要的配置项,来构建LLVM。

如果您急于构建一个可用的LLVM,请参见 Quick start 一节。如果您从未使用过CMake构建工具,请先从 Basic CMake usage 开始读起,然后再返回阅读 Quick start 一节。Options and variables 一节是一份关于自定义构建的参考资料,您可以获取如何定制化构建LLVM的相关信息。如果您已经很熟悉CMake构建工具,那么推荐您直接阅读 Options and variables 一节。

快速入门

我们将使用CMake的命令行工具,而非GUI界面。

  1. 首先下载 Download 并安装CMake工具。最低可用版本是 2.8.8, 但如果您还使用Ninja构建工具,则必须使用 CMake v3.2或更新版本,才能在运行 Lit 时得到 交互式输出 。(译者注:ninja构建工具是一套快速构建C/C++项目的构建套件,类似于GNU Make,对于LLVM这类代码量大的项目,相比make能够明显提升构建速度。使用时只需将CMake的生成目标设定为ninja即可。命令为:cmake -G “Ninjapath/to/llvm/source)

  2. 打开命令行。您的开发工具必须能从该命令行中访问到,换言之,应该将工具链添加到PATH路径中。

  3. 创建一个build文件夹。在源码路径中构建LLVM是不支持的, 需要先用cd指令转到这个构建目录中。

    $ mkdir mybuilddir
    $ cd mybuilddir
    
  4. 执行这行命令时,请把 path/to/llvm/source/root 换成您真正的llvm源码所在的目录,相对目录或绝对目录均可。

    $ cmake path/to/llvm/source/root
    

    CMake 会自动检查您的开发环境,执行一系列测试命令,最终生成必要的配置文件来构建LLVM。CMake 会自动使用默认的构建参数,请阅读 Options and variables 一节来了解哪些构建参数是您可以修改的。

    如果CMake无法找到您的开发工具链或者它认为此套工具并不健全,目前的命令可能会运行失败。在这种情况下,请确保CMake找到的工具链是您希望让其使用的,并且是当前shell环境唯一能访问的到的(例如,请不要给不同版本的gcc设置相同的名字,并且全部放到PATH路径下)。并且确保使用适合的shell来访问您目前想用的开发环境。(例如,如果您使用一个POSIX shell来访问MinGW工具,CMake会拒绝构建MinGW makefile)。您可以为CMake强制指定一套工具,具体请阅读下面 Usage 一节。

  5. CMake 运行结束后,将会生成Makefile或IDE project配置,对于IDE支持的配置,您可以选择打开它并在IDE中构建,或者继续使用命令行直接构建。

    $ cmake --build .
    

    使用 --build 参数,可以让CMake直接调用构建工具(make GNU Makefile, ninja Ninja构建系统, xcodebuild XCode工具链, msbuild Visual Studio工具链 这类指令)来直接构建项目。

    刚才列出的这些构建工具也可以直接调用,但``–build``可以在任何情况下使用,更具可移植性。

  6. 在LLVM构建完成后,你可以直接从构建目录安装构建好的代码库和工具到您的系统里。

    $ cmake --build . --target install
    

    --target 选项可以指定构建目标,其中 install 构建目标就是用来安装项目的。

    您可以在安装时指定一个不同的安装路径,通过调用刚刚生成的 cmake_install.cmake 脚本。

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

CMake基本用法

这一节主要讲解了Cmake的基本使用方法,以及最常用的指令。

CMake 拥有大量Html形式的帮助文档,并且可以通过 cmake 命令本身访问在线帮助。执行 cmake --help 进一步了解帮助选项。

CMake的允许您指定构建工具(如GNU Make,Visual Studio或Xcode)。如果在命令行上没有指定,CMake会根据您的环境,尝试猜测您在使用哪个构建工具。一旦自动检测到您的构建工具,CMake使用相应 生成器 为您创建构建工具的配置文件(例如,Makefiles或Visual Studio的sln文件或Xcode项目文件)。您可以用命令行选项显式指定生成器 -G "构建工具名称"。要查看系统上的可用生成器列表,请执行:

$ cmake --help

这个命令会在帮助文档的末尾列出生成器的名字。

生成器的名字是大小写敏感的,可能包含空格。出于这个原因,您应该准确输入生成器的完整名称,同 cmake --help 命令输出的完全一致,并加上引号。例如:要生成Visual Studio 12的项目配置,您需要执行:

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

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

选项和变量

选项和变量能够方便您进行自定义构建。选项一般是布尔变量,可能为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

常用的CMake变量

下面是一些经常使用的CMake的变量,带有简短的解释和具体的LLVM注释。想查看完整的文档,请查阅CMake手册,或执行 cmake --help-variable VARIABLE_NAME

CMAKE_BUILD_TYPE:STRING
设置构建类型。可用的值有Release,Debug,RelWithDebInfo和MinSizeRel。如果您使用IDE如Visual Studio,你应该使用IDE的设置来设置构建类型。
CMAKE_INSTALL_PREFIX:PATH
LLVM的安装路径,如”make install”调用时或执行安装时,安装路径即为此。
LLVM_LIBDIR_SUFFIX:STRING
额外的后缀追加到库要安装的目录。对于64位架构,经常使用 -DLLVM_LIBDIR_SUFFIX=64 来安装到 /usr/lib64 目录下。
CMAKE_C_FLAGS:STRING
编译C源文件时,可以添加额外的flags。
CMAKE_CXX_FLAGS:STRING
编译C++源文件时,可以添加额外的flags。

LLVM项目设定的变量

LLVM_TARGETS_TO_BUILD:STRING
要构建的目标列表,用分号分隔的,或名为 all 的目标。区分大小写。默认为 all ,例如: -DLLVM_TARGETS_TO_BUILD="X86;PowerPC"
LLVM_BUILD_TOOLS:BOOL
构建LLVM工具。默认为ON。构建目标不区分大小写,均为工具的名字。您可以通过调用它的构建目标来单独构建一个工具。例如,您可以通过执行 make llvm-as 来构建 llvm-as ,如果您正在使用基于Makefile的构建系统。(译者注:更通用的指令是 cmake –build . –target=”llvm-as”)
LLVM_INCLUDE_TOOLS:BOOL
生成的LLVM工具的构建目标。默认为ON。您可以使用此选项来禁用产生LLVM工具的构建目标。(译者注:关闭后您将无法执行 make llvm-as,上面只是设定是否默认自动构建,这里关掉后将无法再支持手动构建)
LLVM_BUILD_EXAMPLES:BOOL
构建LLVM的例子。默认为关闭。各个例子的构建目标名称是大小写不敏感的例子名称。以上详细内容见文档 LLVM_BUILD_TOOLS
LLVM_INCLUDE_EXAMPLES:BOOL
生成的LVM的例子构建目标。默认为ON。您可以使用此选项来禁用产生LLVM例子的构建目标。
LLVM_BUILD_TESTS:BOOL
LLVM构建单元测试。默认为OFF。用于构建每个单元的测试目标无视大小写。您可以使用下列目标名称,定义在*unittests*里面的名称,如ADTTests,IRTests,SupportTests等(在 unittests 子目录下搜索 add_llvm_unittest 来获取完整的单元测试名称列表)。它可以自动构建所有*UnitTests*目标下的单元测试。
LLVM_INCLUDE_TESTS:BOOL
生成的LLVM单元测试构建目标。默认为ON。您可以使用此选项来禁用产生LLVM单元测试的构建目标
LLVM_APPEND_VC_REV:BOOL
追加版本控制修订信息(SVN版本号或Git的版本ID)来LLVM版本字符串(存储在PACKAGE_VERSION宏)。对于这项工作,必须的CMake构建之前被调用。默认为OFF。
LLVM_ENABLE_THREADS:BOOL
在可用的情况下构建带有线程支持的版本。默认为ON。
LLVM_ENABLE_CXX1Y:BOOL
在可用的情况下用C++1y标准来构建C++代码。默认为OFF。
LLVM_ENABLE_ASSERTIONS:BOOL
启用代码断言。当且仅当 CMAKE_BUILD_TYPE 是*Debug*模式时,才会默认设为ON。
LLVM_ENABLE_EH:BOOL
LLVM构建具有异常处理的支持。如果你想针对LLVM库链接,并在自己的代码中使用C++异常,且需要通过LLVM代码调用您自己的代码,这将是非常必要的。默认为关闭。(译者注:这会开启LLVM捕捉异常,尤其是LLVM回调您项目中的代码时,您的代码可能会抛出异常,这种情况则必须开启此支持。)
LLVM_ENABLE_PIC:BOOL
如果编译器支持时,将 -fPIC 标志添加到编译器命令行。一些系统,如Windows,不需要此标志。默认为ON。(译者注:-fPIC 是构建位置无关代码的重要参数,在Mac和Linux系统的动态库构建中,必须使用)
LLVM_ENABLE_RTTI:BOOL
让LLVM支持运行时类型信息。默认为关闭。
LLVM_ENABLE_WARNINGS:BOOL
启用所有的编译器警告。默认为ON。
LLVM_ENABLE_PEDANTIC:BOOL
启用迂腐模式(pedantic mode)。如果可用的话,这将禁用特定编译器的扩展。默认为ON。
LLVM_ENABLE_WERROR:BOOL
如果一个编译器警告被触发时,立即停止并构建失败。默认为关闭。
LLVM_ABI_BREAKING_CHECKS:STRING
用来决定LLVM是否应打开ABI损坏检测。允许的值是 WITH_ASSERTS (默认值), FORCE_ONFORCE_OFFWITH_ASSERTS 将打开ABI损坏检测的断言。 FORCE_ON`(`FORCE_OFF)把它们强制打开(关闭),不论 NDEBUG 断言是否启用。带有ABI损坏检测的LLVM版本,不能与没有它的版本实现ABI兼容。
LLVM_BUILD_32_BITS:BOOL
构建64位系统下的32位可执行文件和库。此选项仅适用于某些64位Unix系统。默认为关闭。
LLVM_TARGET_ARCH:STRING
LLVM目标使用本地代码生成。这是必需的JIT生成。它默认为 “host”,这意味着它应自动选择正在构建LLVM的机器的架构。如果你是交叉编译,应将其设置为目标架构名称。
LLVM_TABLEGEN:STRING
本机可执行的TableGen的完整路径(通常命名为 llvm-tblgen )。这是为了方便进行交叉编译:如果用户设置这个变量,Native TableGen将不被创建。
LLVM_LIT_ARGS:STRING
Arguments given to lit. make check and make clang-test are affected. By default, '-sv --no-progress-bar' on Visual C++ and Xcode, '-sv' on others.
LLVM_LIT_TOOLS_DIR:PATH
用于测试的GnuWin32工具的路径。Windows主机上有效。默认为空字符串,在这种情况下,lit将在您的%PATH%路径下寻找所需的测试工具(例如 grepsort 等)。如果GnuWin32不在您的%PATH%中,那么你可以将GnuWin32的目录加入到%PATH%中,以便之后可以找到需要在该目录中用的测试工具。
LLVM_ENABLE_FFI:BOOL
指示是否LLVM解释器将与以使调用外部函数外部函数接口库(libffi)链接。如果库或它的头被安装在一个自定义位置,还可以设置变量FFI_INCLUDE_DIR和FFI_LIBRARY_DIR到ffi.h和libffi.so可以分别找到的目录。默认为关闭
LLVM_EXTERNAL_{CLANG,LLD,POLLY}_SOURCE_DIR:PATH
These variables specify the path to the source directory for the external LLVM projects Clang, lld, and Polly, respectively, relative to the top-level source directory. If the in-tree subdirectory for an external project exists (e.g., llvm/tools/clang for Clang), then the corresponding variable will not be used. If the variable for an external project does not point to a valid path, then that project will not be built.
LLVM_USE_OPROFILE:BOOL
启用构建OProfile的JIT支持。默认为关闭。
LLVM_PROFDATA_FILE:PATH
Path to a profdata file to pass into clang’s -fprofile-instr-use flag. This can only be specified if you’re building with clang.
LLVM_USE_INTEL_JITEVENTS:BOOL
构建启用英特尔JIT Event API支持。默认为关闭。
LLVM_ENABLE_ZLIB:BOOL
启用带zlib的构建,以支持压缩/解压缩的LLVM工具。默认为ON。
LLVM_USE_SANITIZER:STRING
Define the sanitizer used to build LLVM binaries and tests. Possible values are Address, Memory, MemoryWithOrigins, Undefined, Thread, and Address;Undefined. Defaults to empty string.
LLVM_PARALLEL_COMPILE_JOBS:STRING
定义并行编译作业的最大job数量。
LLVM_PARALLEL_LINK_JOBS:STRING
定义并行链接作业的最大job数量。
LLVM_BUILD_DOCS:BOOL
启用所有可用的文档构建(即Doxgyen和Sphinx的目标)作为默认构建项目。如果 install 目标运行,那么这也会安装所有构建好的文档。默认为关闭。
LLVM_ENABLE_DOXYGEN:BOOL
启用构建doxygen生成的HTML文档。默认为关闭。
LLVM_ENABLE_DOXYGEN_QT_HELP:BOOL
启用一个Qt压缩帮助文件的生成。默认为关闭。这会影响make目标 doxygen-llvm 。当启用时,由doxygen的产生正常的HTML输出,同时将产生一个名为``org.llvm.qch``一个QCH文件。然后,您可以加载此文件到Qt Creator。此选项仅可和 -DLLVM_ENABLE_DOXYGEN=ON 组合使用,否则没有任何影响。
LLVM_DOXYGEN_QCH_FILENAME:STRING
设置Qt的压缩帮助文件的文件名,启用了 -DLLVM_ENABLE_DOXYGEN=ON-DLLVM_ENABLE_DOXYGEN_QT_HELP=ON 时,默认为 org.llvm.qch 。此选项仅可和 -DLLVM_ENABLE_DOXYGEN_QT_HELP=ON 组合使用,否则没有任何效果。
LLVM_DOXYGEN_QHP_NAMESPACE:STRING
Namespace under which the intermediate Qt Help Project file lives. See Qt Help Project for more information. Defaults to “org.llvm”. This option is only useful in combination with -DLLVM_ENABLE_DOXYGEN_QT_HELP=ON; otherwise it has no effect.
LLVM_DOXYGEN_QHP_CUST_FILTER_NAME:STRING
See Qt Help Project for more information. Defaults to the CMake variable ${PACKAGE_STRING} which is a combination of the package name and version string. This filter can then be used in Qt Creator to select only documentation from LLVM when browsing through all the help files that you might have loaded. This option is only useful in combination with -DLLVM_ENABLE_DOXYGEN_QT_HELP=ON; otherwise it has no effect.
LLVM_DOXYGEN_QHELPGENERATOR_PATH:STRING
The path to the qhelpgenerator executable. Defaults to whatever CMake’s find_program() can find. This option is only useful in combination with -DLLVM_ENABLE_DOXYGEN_QT_HELP=ON; otherwise it has no effect.
LLVM_DOXYGEN_SVG:BOOL
在输出Doxygen图时使用.svg文件,而不是.png文件。默认为关闭。
LLVM_ENABLE_SPHINX:BOOL
开启sphinx文档构建,如果启用,CMake将搜索 sphinx-build 命令,并会使得 SPHINX_OUTPUT_HTMLSPHINX_OUTPUT_MAN 成为可用选项。默认为关闭。
SPHINX_EXECUTABLE:STRING
sphinx-build 的可执行文件路径,由CMake自动检测
SPHINX_OUTPUT_HTML:BOOL
If enabled (and LLVM_ENABLE_SPHINX is enabled) then the targets for building the documentation as html are added (but not built by default unless LLVM_BUILD_DOCS is enabled). There is a target for each project in the source tree that uses sphinx (e.g. docs-llvm-html, docs-clang-html and docs-lld-html). Defaults to ON.
SPHINX_OUTPUT_MAN:BOOL
如果启用(并且 LLVM_ENABLE_SPHINX 启用)构建man页面的目标将被添加(但除非 LLVM_BUILD_DOCS 设定为OFF)。目前添加的唯一目标就是 docs-llvm-man 。默认为ON。
SPHINX_WARNINGS_AS_ERRORS:BOOL
如果启用然后SPHINX的文件警告将被视为错误。默认为ON。
LLVM_CREATE_XCODE_TOOLCHAIN:BOOL
OS X Only: If enabled CMake will generate a target named ‘install-xcode-toolchain’. This target will create a directory at $CMAKE_INSTALL_PREFIX/Toolchains containing an xctoolchain directory which can be used to override the default system tools.
LLVM_BUILD_LLVM_DYLIB:BOOL
If enabled, the target for building the libLLVM shared library is added. This library contains all of LLVM’s components in a single shared library. Defaults to OFF. This cannot be used in conjunction with BUILD_SHARED_LIBS. Tools will only be linked to the libLLVM shared library if LLVM_LINK_LLVM_DYLIB is also ON. The components in the library can be customised by setting LLVM_DYLIB_COMPONENTS to a list of the desired components.
LLVM_LINK_LLVM_DYLIB:BOOL
If enabled, tools will be linked with the libLLVM shared library. Defaults to OFF. Setting LLVM_LINK_LLVM_DYLIB to ON also sets LLVM_BUILD_LLVM_DYLIB to ON.
BUILD_SHARED_LIBS:BOOL

Flag indicating if each LLVM component (e.g. Support) is built as a shared library (ON) or as a static library (OFF). Its default value is OFF. On Windows, shared libraries may be used when building with MinGW, including mingw-w64, but not when building with the Microsoft toolchain.

注解

BUILD_SHARED_LIBS is only recommended for use by LLVM developers. If you want to build LLVM as a shared library, you should use the LLVM_BUILD_LLVM_DYLIB option.

运行测试套件

Testing is performed when the check-all target is built. For instance, if you are using Makefiles, execute this command in the root of your build directory:

$ make check-all

On Visual Studio, you may run tests by building the project “check-all”. For more information about testing, see the LLVM Testing Infrastructure Guide.

交叉编译

See this wiki page for generic instructions on how to cross-compile with CMake. It goes into detailed explanations and may seem daunting, but it is not. On the wiki page there are several examples including toolchain files. Go directly to this section for a quick solution.

Also see the LLVM-specific variables section for variables used when cross-compiling.

在您的项目中嵌入LLVM

从LLVM3.5版开始,CMake和autoconf/Makefile构建系统,都支持讲LLVM库作为一个子项目导入到其他CMake项目中。这意味着LLVM的用户们可以用直接使用CMake来开发自己的基于LLVM的项目,而无需再关心怎么安装适合的LLVM版本的问题。

这里有个简单的CMakeLists.txt文件实例,是关于导入LLVM库和如何使用LLVM库构建一个简单的小工具 simple-tool

cmake_minimum_required(VERSION 2.8.8)
project(SimpleProject)

find_package(LLVM REQUIRED CONFIG)

message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")

# Set your project compile flags.
# E.g. if using the C++ header files
# you will need to enable C++11 support
# for your compiler.

include_directories(${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})

# Now build our tools
add_executable(simple-tool tool.cpp)

# Find the libraries that correspond to the LLVM components
# that we wish to use
llvm_map_components_to_libnames(llvm_libs support core irreader)

# Link against LLVM libraries
target_link_libraries(simple-tool ${llvm_libs})

find_package(…) 这条语句在CONFIG模式下(如上面例子中用到的),将会在几个目录下搜索 LLVMConfig.cmake 这个配置文件(详情请查看CMake文档)。它会创建一个 LLVM_DIR 缓存项来存储 LLVMConfig.cmake 所在的目录,或者您可以重写这个变量来制定另外一个LLVM库的安装目录(例如,向 cmake 传入此参数 -DLLVM_DIR=/usr/share/llvm/cmake 或者直接在GUI中设定,使用 ccmakecmake-gui )。

这个文件在以下两个不同目录下均可用。

  • <INSTALL_PREFIX>/share/llvm/cmake/LLVMConfig.cmake where <INSTALL_PREFIX> is the install prefix of an installed version of LLVM. On Linux typically this is /usr/share/llvm/cmake/LLVMConfig.cmake.
  • <LLVM_BUILD_ROOT>/share/llvm/cmake/LLVMConfig.cmake where <LLVM_BUILD_ROOT> is the root of the LLVM build tree. Note: this is only available when building LLVM with CMake.

如果LLVM被安装在了您系统的默认路径下 (如Linux在 /usr/ 下)且被正确安装, find_package(LLVM ...) 将会自动为您找到 LLVM。如果LLVM没有安装或者您希望直接使用另一个构建好的LLVM库而无需安装,如同刚才提到过的那样,您可以设置 LLVM_DIR 来指定LLVM库的安装目录。

LLVMConfig.cmake 配置文件设定了一系列非常有用的CMake变量。值得注意的变量有:

LLVM_CMAKE_DIR
LLVM 的 CMake 目录 (包含 LLVMConfig.cmake 的那个目录)
LLVM_DEFINITIONS
一系列构建中要用到的预处理器
LLVM_ENABLE_ASSERTIONS
如果想构建时启用断言,那么将其设定为ON,否则设为OFF
LLVM_ENABLE_EH
是否开启异常处理,设定为ON则开启,否则设为OFF
LLVM_ENABLE_RTTI
启用RTTI支持(run time type information 运行时类型信息)时设定为ON,否则设为OFF
LLVM_INCLUDE_DIRS
一系列include目录,包含有所有LLVM的头文件。
LLVM_PACKAGE_VERSION
LLVM的版本信息,这个可以被用于CMake条件语句(例如:if (${LLVM_PACKAGE_VERSION} VERSION_LESS "3.5"))。
LLVM_TOOLS_BINARY_DIR
这个路径中包含了LLVM的二进制工具链(例如 ``llvm-as``等)。

需要注意的一点是,在上面的代码示例中,我们链接 simple-tool 时用到了几个LLVM库。这几个库的名称查找是通过 llvm_map_components_to_libnames() 这一CMake函数实现的。想了解全部可用的组件名,可用通过运行命令 ``llvm-config –components``进行查看。

提醒一点,如果您使用 LLVM < 3.5 等版本,llvm_map_components_to_libraries()llvm_map_components_to_libnames() 的原名,目前该函数名已经过时并且将会在新的版本中被移除。

在源码目录外开发LLVM pass

在LLVM源码目录外开发LLVM pass也是可行的(例如:通过一个已安装的或已编译的LLVM库)。下面展示了一个示例项目的结构:

<project dir>/
    |
    CMakeLists.txt
    <pass name>/
        |
        CMakeLists.txt
        Pass.cpp
        ...

<project dir>/CMakeLists.txt 的内容:

find_package(LLVM REQUIRED CONFIG)

add_definitions(${LLVM_DEFINITIONS})
include_directories(${LLVM_INCLUDE_DIRS})

add_subdirectory(<pass name>)

<project dir>/<pass name>/CMakeLists.txt 的内容:

add_library(LLVMPassname MODULE Pass.cpp)

Note if you intend for this pass to be merged into the LLVM source tree at some point in the future it might make more sense to use LLVM’s internal add_llvm_loadable_module function instead by…

Adding the following to <project dir>/CMakeLists.txt (after find_package(LLVM ...))

list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
include(AddLLVM)

And then changing <project dir>/<pass name>/CMakeLists.txt to

add_llvm_loadable_module(LLVMPassname
  Pass.cpp
  )

When you are done developing your pass, you may wish to integrate it into the LLVM source tree. You can achieve it in two easy steps:

  1. Copying <pass name> folder into <LLVM root>/lib/Transform directory.
  2. Adding add_subdirectory(<pass name>) line into <LLVM root>/lib/Transform/CMakeLists.txt.

Compiler/Platform-specific topics

Notes for specific compilers and/or platforms.

Microsoft Visual C++

LLVM_COMPILER_JOBS:STRING
Specifies the maximum number of parallel compiler jobs to use per project when building with msbuild or Visual Studio. Only supported for the Visual Studio 2010 CMake generator. 0 means use all processors. Default is 0.