llvm学习(一):简介与安装
最近在搞llvm,最终目的是做 Android 上 Native 的加固,感谢椒哥(小花椒)的帮助,开个系列记录和分享一下吧。
一、llvm 和 clang 简介
llvm 是个框架,clang 是处理与 C 相关的工具,可以认为是 gcc。(我乱解释的,不一定对)。因为 llvm 的可拓展性好,可以在编译过程中执行一些操作,让编译出来的可执行文件自带混淆,也就实现了我们预期的功能。
二、手动编译安装
2018年9月,llvm 更了个大版本,到了llvm7.0,上次有印象还是 llvm4.0 的时代,以前从来没摸过这个东西,感觉还是很有意思的。
【如果是 debug 版,准备50G 左右的空间。】
【如果是release版,只需要10G以内的空间。】
选择一:自行构建目录(不推荐)
下载两个东西,下载地址 ==>http://releases.llvm.org/download.html#7.0.0
llvm-7.0.0.src.tar.xz
和 cfe-7.0.0.src.tar.xz
,前者是llvm,后者是clang等工具,执行下面的命令,解压并且移动过去。
1 | tar xvf llvm-7.0.0.src.tar.xz |
然后按照官方的说明进行操作即可,可以跳过下面这部分。
这里我使用 b
目录存放build 过程的文件,使用 i
目录存放将来 install 的文件。
【注意:默认编译出来的是 debug 版,大部分情况下使用 release 版就够了】
建议使用 Release 版而且带有assert 功能,我平时这样是够用的。
1 | mkdir b |
等待几十分钟后,会在 b 目录里生成很多有用的文件。
因为我不认识里面的东西,所以我使用 install 安装了,安装到 i 文件夹里,命令如下。
1 | mkdir i |
这里建议定义LLVM_HOME这个环境变量,方便操作,也方便后面的操作。 安装好大概是这样的:
1 | -> i lsa |
建议在 PATH里也添加 $LLVM_HOME/bin
,因为 Mac 上默认的 LLVM 是/usr/bin/clang
,版本太老了而且无法更新,会影响到后面 Pass 的开发。
选择二:使用官方的 llvm-project 目录结构
先 mkdir b
,再 cd b
,使用 cmake 初始化工程
1 | cmake ../llvm-project-7.0.0.src/llvm |
后续步骤没区别,make 、再 install,
三、验证
1 | ➜ /tmp $LLVM_HOME/bin/clang --version |
emmmmm 可以正常使用,吼啦,将来我们就用它! 【又水了一篇 blog,23333】