LLVM-Clang插件开发
前言
前面一篇博客介绍了LLVM
相关内容,那现在就开始用学到的LLVM
知识,做一下实践;
–Clang
插件开发
一、插件目录
- 在【
clang/tools
】源码目录下新建一个插件目录,叫做【ly-plugin
】(自定义)
- 在【
clang/tools/CMakeLists.txt
】最后加入内容:add_clang_subdirectory(ly -plugin)
,小括号里是插件目录名
二、插件必要的文件
- 在【
ly-plugin
】目录下新建一个【CMakeLists.txt
】,文件内容是:add_llvm_loadable_module(LYPlugin LYPlugin.cpp
)
三、编写插件源码
- 【
LYPlugin.cpp
】参考
四、编译插件
- 利用
cmake
生成的Xcode
项目来编译插件(第一次编写完插件,需要利用cmake
重新生成一下Xcode
项目) - 插件源代码在【
Sources/Loadable modules
】目录下可以找到,这样就可以直接在Xcode
里编写插件代码 - 选择
LYPlugin
这个target
进行编译,编译完会生成一个动态库文件
五、加载插件
- 在
Xcode
项目中指定加载插件动态库:Build Settings > OTHER_CFLAGS
-Xclang -load -Xclang
动态库路径-Xclang -add-plugin -Xclang
插件名称
六、Hack Xcode
- 首先要对
Xcode
进行Hack
,才能修改默认的编译器 - 下载【XcodeHacking.zip】,解压,修改【
HackedClang.xcplugin/Contents/Resources/HackedClang.xcspec
】的内容,设置一下自己编译好的clang
的路径
- 然后在
XcodeHacking
目录下进行命令行,将XcodeHacking
的内容剪切到Xcode
内部
1 | $ sudo mv HackedClang.xcplugin `xcode-select-printpath`/../PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins |
1 | $ sudo mv HackedBuildSystem.xcspec `xcode-select-printpath`/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications |
七、修改Xcode的编译器
八、编译项目
- 编译项目后,会在编译日志看到
LYPlugin
插件的打印信息(如果插件更新了,最好先Clean
一下项目)
九、更多
想要实现更复杂的插件功能,就需要利用
clang
的API
针对语法树(AST
)进行相应的分析和处理关于AST的资料
十、推荐书籍
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DeveloperLY's Blog!