序言
之前只在 Linux 和 macOS 上用过 LLVM,从来没有在 Windows 上用过,最近心血来潮在 llvm-bindings 的 github action 上添加 Windows 的工作流,顺便了解了一下 LLVM 在 Windows 上的编译和安装。
LLVM 在 Github 的 Release 页 上提供了 LLVM 各个版本的 Windows 安装包,文件名一般都是 LLVM-13.0.1-win64.exe
这样的格式,使用 Chocolatey 安装 LLVM 也是安装的这种安装包。
但是很遗憾,这种安装包是残缺不全的,只有一些基础的 clang 相关的命令,并不包含大多数 LLVM 的 lib,所以在 Windows 使用 LLVM 只能自己从源码编译了。
系统环境
本文我仅以使用 MSVC 的编译方式为例讲述步骤,对于使用 MSYS2、Mingw-w64、Cygwin 等其他编译工具链的编译方式不再说明。
编译前需要在 Windows 上安装以下软件,版本越新越好:
- Visual Studio
- CMake
- Python
- Git
编译 LLVM
首先克隆 LLVM Project:
git clone -b release/13.x https://github.com/llvm/llvm-project.git
cd llvm-project
然后执行 CMake 配置命令:
cmake -Thost=x64 -B build -DCMAKE_BUILD_TYPE=Release -DCPACK_GENERATOR=ZIP -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_INCLUDE_TESTS=OFF llvm
再然后执行编译命令:
cmake --build build --config Release --target package
编译完成后,build
目录下有一个文件名是 LLVM-13.0.1-win64.zip
的压缩包,这就是编译打包后的 LLVM 产物,将其解压到一个目录备用,这里我们假设解压目录是 C:\Users\dev\LLVM-13.0.1-win64\LLVM-13.0.1-win64
。
编译 llvm-bindings
编译完 LLVM 之后,我们来基于编译好的 LLVM 产物编译 llvm-bindings
,当然在这之前需要在系统上安装好 Node.js。
首先克隆 llvm-bindings
源码:
git clone https://github.com/ApsarasX/llvm-bindings.git
cd llvm-bindings
然后使用 npm 配置 LLVM_DIR 环境变量:
npm config set cmake_LLVM_DIR C:\Users\dev\LLVM-13.0.1-win64\LLVM-13.0.1-win64\lib\cmake\llvm
最后执行 npm scripts 中的编译命令:
npm run build:release
caution
这里有一个坑,在 Windows 上,LLVM 和 llvm-bindings 的构建模式必须是一致的,也就是说,LLVM 和 llvm-bindings 要么都是 Debug 模式,要么都是 Release 模式,如果混用,在编译 llvm-bindings 时会报错,切记!