学学 llvm (一)-- macOS 11 环境下 LLVM 11.0 构建和安装

最近在研究 VMP 相关的东西,看来最终还是要搞一搞 LLVM 这个大家伙,还蛮有趣的,下面直入主题。

0x00 从源码构建,安装

我用的是 M1 芯片的 macbook pro, 系统版本为 macOS 11.2.3

首先从 官网 下载源码

这里我选择下载全部的组件,也就是 lvm-project monorepo source code 这个代码。

这里为了方便,假设这个源码目录叫做 llvm11

llvm11 的同级目录中创建两个目录

1
2
mkdir b
mkdir i

b 用来存放构建需要的文件,i 是最终的安装目录。

进入 b 目录,下面开始构建,我选择构建 Release 版本,开启 Assertion。并且同时需要构建 clang:

1
2
3
cd b
cmake ../llvm-project-11.0.0/llvm/ -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_PROJECTS=clang
cmake --build . -- -j 8

构建的时间会很长,取决于你电脑的配置,一般需要三四十分钟以上(不得不夸下 Apple M1,20 来分钟搞定)。

构建成功之后进行安装,这里建议配置一个安装目录的环境变量,方便后续使用

1
2
3
4
5
6
# 当前目录 b
# 进入上一级目录
cd ..
export LLVM_HOME=`pwd`/i
cd b
cmake -DCMAKE_INSTALL_PREFIX=$LLVM_HOME -P cmake_install.cmake

大功告成

0x01 验证

1
2
3
4
5
6
7
8
9
10
cd /tmp
/tmp $LLVM_HOME/bin/clang -v
clang version 11.0.0
Target: arm64-apple-darwin20.3.0
Thread model: posix
InstalledDir: /Users/sines/Code/LLVMs/11.0.0/i/bin

/tmp $LLVM_HOME/bin/clang --sysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk /tmp/test.c
/tmp ./a.out
Hello World!

Ok, works fine, 基础搭好了,可以在它上面干活啦