LLVM折腾记(2)

今天主要折腾建立新的编译环境把Release版本的LLVM给编起来,主要是体力活。另外就是学到了一个可以link目录的好办法——mount -bind,这样可以节省很多空间。毕竟我只是想替换一个so文件(libstdc++.so.3.0.6).
新编译环境建好以后很快把Release版本的clang/llvm弄出来了。实验了一次编一个component的代码,效果很不错。GCC需要46秒完成的编译用llvm只需要35秒左右就可以完成,提高了将近四分之一。而在代码大小方面,具体数字不太记得了,不过缩小了估计也有三分之一,很惊人。之后的链接也没出现问题。不过忘记加载image看看这样的代码是否工作了。
下一天的主要工作就是用llvm编译全体代码,找看看有哪些不兼容的地方,顺便做个编译时间和代码体积的测评。

LLVM折腾记(1)

这两天前看了一些关于LLVM的资料,比如《程序员》上的文章Dr. Dobbs上的 The Design of LLVM。之前还听说LLVM编译速度快、生成代码体积小效率高、架构优秀,连GCC都赶不上了,于是就开始琢磨着折腾折腾。
首先是下载编译最新的LLVM。我们的编译环境比较老,比如libstdc++的版本差了一点,最新的LLVM(包括3.1和3.0)都编译不起来(除了Debug+Assert版本,没想明白)。由于编译环境是公共的,自己fork一份出来太费劲,于是就将就用Debug版本编一个文件试试。
接下来是一般折腾找makefile里改编译器的地方,在一个已经用编译好的代码环境下通过touch一个源文件来一次只编一个,省的一下子把所有代码塞给clang/llvm遇上问题太多搞不定。预料上的问题很快就碰上了:代码里用了GCC的方言或者不符合标准的地方。clang(LLVM的C/C++/Objective-C前端)的主页上给出了目前不兼容GCC的列表:http://clang.llvm.org/compatibility.htm,大部分兼容性问题应该可以在这里找到答案。
第一个碰上的问题是关于模板类继承的:
http://clang.llvm.org/compatibility.html#dep_lookup_bases
改了点代码就编译通过了,算是完成了第一步。不过显然不能一直用Debug版本的下去,速度只有GCC的一半多一些,丧失了LLVM的一大优势。明天的任务就是fork出新的能够运行Release版本的编译环境。