使用 Micorsoft Visual Studio 入门 LLVM

这是一篇关于如何在 Windows 平台下使用 LLVM 的文章,由 tajpure 转述自 LLVM 官网.

概述

LLVM,命名最早取自底层虚拟机器(Low Level Virtual Machine)的缩写。由很多项目组成,它是一个编译器的基础框架,提供完整的编译系统中间层。使用 Visual Studio 而不是使用 mingw 或 cygwin 来编译 LLVM。这是因为 vc 能编译出更原生的程序,只依赖于 VC 的 dll。

依赖

在你开始使用 LLVM 系统时,你需要看一下如下依赖。提前了解你需要的硬件和软件,会使你的麻烦减少。

硬件要求

1、一个能够良好运行 Visual Studio2012 的系统

2、LLVM 的安装将会占用 3GB 左右的空间

软件要求

1、Visual Studio 2012 及更高版本

2、CMake,用它来产生 LLVM 最新的项目文件

3、如果你想运行 LLVM 测试文件,你需要安装Python(2.4-2.7版本测试可运行)、DnuWin32

4、不要安装 LLVM 在目录名包含空格的目录下,这会导致配置失败

开始

下面是快速开始使用 LLVM 的一份简短实例:

1、阅读文档

2、认真地再读一遍文档

3、记住你已经被两次提醒去阅读文档

4、获取 LLVM 源码

5、使用 CMake 产生 LLVM 最新的项目文件:

  • CMake 安装完成后。CMake 最简单的使用方法是通过 CMake 的图形界面使用。你可以选择一个目录,将 LLVM 解压到其中(推荐使用默认选项)。

  • 查看LLVM CMake 导航获取更多信息关于如何去配置 LLVM 编译

  • CMake 为所有的构建类型产生项目文件。要选择一个特殊的构建类型,你可以使用 VS IDE 的配置管理器,或者当使用 MSBuild 时,你也可以使用/property:Configuration 命令行选项。

6、启动 Visual Studio

  • 在你所创建的项目文件中,你会发现 llvm.sln,双击它打开 Visual Studio

7、编译 LLVM 组件

  • 这个项目可能会仍然可能会被单独构建,但构建他们时不要仅仅选择让他们全部批量构建,而是选择并且构建需要全部构建的项目去全部构建。

  • Fibonacci 项目是一个使用 JIT 的例子程序。修改项目的调试属性去提供一个数字化的命令行参数或者在命令行里运行它。这个程序将会打印绑定的 fibonacci 值

8、在 Visual Studio 里测试 LLVM

  • 如果 %PATH% 不包含 CnuWin32,你能够在 CMake 上指定 LLVM_LIT_TOOLS_DIR 作为给 GnuWin32 的路径

  • 你能够仅仅在构建项目“check”时运行 LLVM 测试。测试结果将会展示在 VS 的输出窗口里。

9、在命令行里测试 LLVM

  • LLVM 测试能够运行通过改变目录至 LLVM 源码目录并运行如下命令:
1
C:\..\llvm> python ..\build\bin\llvm-lit --param build_config=Win32 --param build_mode=Debug --param llvm_site_config=../build/test/lit.site.cfg test

上述例子假定 Python 已经在你的 Path 变量里了,你已经构建了一个 LLVM 的 Win32 调试版本通过一个行构建的标准输出。你不会看到任何不可预见的失败提示,但是会看到许多不支持测试和可预见的失败提示。
一个特殊的测试或测试目录能够被运行如下:

1
C:\..\llvm> python ..\build\bin\llvm-lit --param build_config=Win32 --param build_mode=Debug --param llvm_site_config=../build/test/lit.site.cfg test/path/to/test

一个使用 LLVM 工具链的示例

1、首先,创建一个简单的 C 文件,命名为’hello.c’

1
2
3
4
5
#include <stdio.h>
int main() {
printf("hello world\n");
return 0;
}

2、接着,将这个 C 文件编译为 LLVM 字节码文件

1
C:\..> clang -c hello.c -emit-llvm -o hello.bc

这样将会创建一个结果文件 hello.bc。你能够直接使用 lli 工具执行这个文件,llc 工具编译它成为本地汇编代码,优化它通过 opt 工具,等等。
另外,你能够直接输出一个可执行文件通过 clang:

1
C:\..> clang hello.c -o hello.exe

3、使用实时编译器运行程序:

1
C:\..> lli hello.bc

4、使用 llvm-dis 实用工具去查看 LLVM 汇编代码:

1
C:\..> llvm-dis < hello.bc | more

5、使用 LLC 代码生成器编译程序成 object code

1
C:\..> llc -filetype=obj hello.bc

6、使用 Microsoft 链接链接成二进制:

1
C:\..> link hello.obj -defaultlib:libcmt

7、执行可执行程序:

1
C:\..> hello.exe

链接