LLVMSwift is a set of Swifty API wrappers for the LLVM C API. It makes compiler development feel great from Swift!Usage
To start emitting IR, you'll want to create a Moduleobject, with an optional Contextparameter, and an IRBuilderthat will build instructions for that module.let module = Module(name: "main")let builder = IRBuilder(module: module)
Once you do that, you can start adding functions, global variables, and generating instructions!let main = builder.addFunction(name: "main", type: FunctionType(argTypes: , returnType: VoidType())let entry = builder.appendBasicBlock(named: "entry")builder.positionAtEnd(of: entry)builder.buildRetVoid()module.dump()
The IRBuilder class has methods for almost all functions from the LLVM C API, like:builder.buildAdd builder.buildSub builder.buildMul builder.buildCondBr builder.addSwitch
and so many more.
Plus, it provides common wrappers around oft-used types like Function, Global, Switch, and PhiNode.Installation
There are a couple, annoying steps you need to get it working before it'll build. Number one, you'll need a custom cllvmpkg-config file, which is included in the repo. Drop that in /usr/local/lib/pkgconfigand make sure you have LLVM installed through homebrew:brew install llvm
Once you do that, you can add LLVMSwift as a dependency for your own Swift compiler projects!
This project is used byTrill for all its code generation.Authors Harlan Haskins (@harlanhaskins) Robert Widmann (@CodaFi) License
This project is released under the MIT license, a copy of which is available in this repo.
- 1Swift Label计算高度
- 3swift4.0 Any 和 AnyObject
- 4Swift4.0 guard，Array，Dictionary
- 6swift （一）
- 8iOS- 上传代码到Github
- 10iOS11 图片下拉放大，出现信号栏白条的bug解决