前言

前面一篇博客介绍了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一下项目)

九、更多

十、推荐书籍