前言
在上學(xué)期學(xué)完編譯原理之后總想搞個(gè)大事情,于是就萌生了寫編譯器的想法。在多方查找之下我發(fā)現(xiàn)了LLVM的官方教程。這個(gè)教程實(shí)現(xiàn)了一門玩具語(yǔ)言叫做Kaleidoscope。在官方教程中提供了即時(shí)編譯執(zhí)行以及生成目標(biāo)文件被C++調(diào)用的兩種執(zhí)行方法,我在工程中也有一一對(duì)應(yīng)實(shí)現(xiàn)。
官方教程是用C++寫的,我就想能不能用swift來(lái)寫呢?結(jié)果還真給我找到了辦法,網(wǎng)上有一個(gè)現(xiàn)成的swift開(kāi)源庫(kù)LLVMSwift,封裝了LLVM。當(dāng)然我覺(jué)得不用這個(gè)庫(kù)直接使用LLVM也是ok的,其實(shí)這樣反而更貼近官方教程,使用那個(gè)開(kāi)源庫(kù)還得理解它的邏輯。
于是我把他們教程的前8章都寫完了,倉(cāng)庫(kù)在這
教程如下:
開(kāi)始
作為第0章我們首先要完成的是安裝LLVM。網(wǎng)上關(guān)于這方面的文檔非常少,這個(gè)自己摸索的過(guò)程真是十分痛苦,下面說(shuō)一下如何去安裝LLVM并在xcode中使用。
下載LLVM
首先我們通過(guò)homebrew下載LLVM
brew install llvm
下載完LLVM我們繼續(xù)下載pkg-config
brew install pkg-config
不使用LLVMSwift
你需要在xcode直接引入LLVM可以通過(guò)添加環(huán)境到.bash_profile文件中實(shí)現(xiàn)
# 在.bash_profile下配置llvm命令行,具體情況根據(jù)你所安裝的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
下載來(lái)之LLVMSwift的腳本。
在Package中添加
.package(url: "https://github.com/llvm-swift/LLVMSwift.git", from: "0.5.0")
并在target中依賴LLVM
dependencies: ["LLVM"]
配置環(huán)境
swift utils/make-pkgconfig.swift
編譯工程
swift build
build完成之后就可以在工程中引入LLVM并使用LLVMSwift了。