在MingW下编译llvm/clang

[题外话,clang在Windows下玩玩可以,千万别用它在正式项目上。一个__declspec(dllexport/dllimport)问题,两三年了也没任何进展,可见windows支持多不给力]

首先,确定已经装好了MingWMsys shell以及Python,并且已经成功checkout llvmclang的代码。 另外,llvm/clang依赖于zlib,请确认zlib已在MingW下编译并安装。

关于MingW的版本需要注意的是x86版本的要选择异常处理模式为dwarf的版本而不是sjlj模式,否则编译出来的clang++是不支持异常处理的。因为clang不支持sjlj模式。至于,x64版本MingW就别搞了,因为clang也不支持seh模式。

下面是具体编译的步骤:

1. 启动Msys bash shell

2. 在build目录下运行llvmconfigure脚本,使用 --prefix最好指向mingw安装目录。这个目的是为了编译好的clang/clang++会自动搜索gcc/g++的头文件目录,而不需要再用-I 来include这些路径。但是,很多时候这招也不灵,因为很多mingw版本的头文件组织模式和clang设想的不一样。可以自己改clang源文件llvm\tools\clang\lib\Frontend\InitHeaderSearch.cpp适配具体的情况.

configure的其他参数可以使用 configure --help 来查看具体含义,然后根据需要设定。

configure

3. 为了能够在Msys shell下正常make,需要对一些相关的makefile做一些改动:

1)修改llvm sourceunittests\Makefile.unittest的第23行

unittest-before

修改为

unittest-after

 

2)修改build目录下生成的Makefile.config

52 - 53

ll_src_root-before

修改为

ll_src_root-after

否则windows版的GNU make就没法解析这两个路径,导致相关的makefile include失败,无法make

另外,将184

auto-conf-before

修改为

auto-conf-after

否则安装时会找不到安装脚本。这个无聊的错误不知道是怎么出现的,晕。

 

3)修改build目录下的projects\sample\Makefile.common

6, 10, 13, 16行的路径

sample-before

改为

sample-after

原因同上,否则makefile include会失败。

4. 执行完上述步骤, 我们就可以在build目录下make

make

其中 -j后面的数字表示同时启动几个make job, 一般不要超过机器的CPU的总核数。

5. 编译大概需要几十分钟不等,去喝杯茶或者干点别的。编译完后 make install即可。

posted @ 2014-01-23 19:18  拔剑四顾  阅读(3455)  评论(5编辑  收藏  举报