在上学期学完编译原理之后总想搞个大事情,于是就萌生了写编译器的想法。在多方查找之下我发现了LLVM的官方教程。这个教程实现了一门玩具语言叫做Kaleidoscope。在官方教程中提供了即时编译执行以及生成目标文件被C++调用的两种执行方法,我在工程中也有一一对应实现。
官方教程是用C++写的,我就想能不能用swift来写呢?结果还真给我找到了办法,网上有一个现成的swift开源库LLVMSwift,封装了LLVM。当然我觉得不用这个库直接使用LLVM也是ok的,其实这样反而更贴近官方教程,使用那个开源库还得理解它的逻辑。
于是我把他们教程的前8章都写完了,仓库在这
作为第0章我们首先要完成的是安装LLVM。网上关于这方面的文档非常少,这个自己摸索的过程真是十分痛苦,下面说一下如何取安装LLVM并在xcode中使用。
首先我们通过homebrew下载LLVM
brew install llvm
下载完LLVM我们继续下载pkg-config
brew install pkg-config
你需要在xcode直接引入LLVM可以通过添加环境到.bash_profile文件中实现
# 在.bash_profile下配置llvm命令行,具体情况根据你所安装的llvm版本不同
export PATH=/usr/local/Cellar/llvm/8.0.0_1/bin:$PATH;
然后在Xcode->Build Settings->Search Paths->Header Search Paths中添加
/usr/local/opt/llvm/include
/usr/local/opt/llvm/lib
下载来之LLVMSwift的脚本。
在Package中添加
.package(url: "https://github.com/llvm-swift/LLVMSwift.git", from: "0.5.0")
并在target中依赖LLVM
dependencies: ["LLVM"]
配置环境
swift utils/make-pkgconfig.swift
编译工程
swift build
build完成之后就可以在工程中引入LLVM并使用LLVMSwift了。