Clang 之路——编写我的第一个 Clang 插件:检测 ObjC 中的类声明规范
栏目: Objective-C · 发布时间: 6年前
内容简介:本文所介绍插件检测的效果图前言
本文所介绍插件检测的效果图
前言
LLVM 是一个模块化和可重用的编译器和 工具 链技术的集合,Clang 是 LLVM 的子项目,是 C,C++ 和 Objective-C 编译器,因为多模块的复用,所以提供了惊人的快速编译,比 GCC 快3倍。创始人是 Chris Lattner,也是Swift之父,以下是他的部分履历:
-
开发了一个叫作 LLVM 的编译器开发工具套件
-
开发了 Clang,使得 LLVM 直接挑战 GCC 的地位
2005年加入苹果,将苹果使用的 GCC 全面转为 LLVM
2010年开始主导开发 Swift 语言
2017年入职特斯拉
加入特斯拉仅六个月之后离职,随后在 Google Brain 从事人工智能方面的工作。
LLVM 创始人 Chris Lattner
首先让我们来看下 LLVM 子项目都有哪些:
1)LLVM Core
提供了一个现代的源代码和目标独立优化器, 以及许多流行的 CPU (甚至是一些不太常见的处理器) 的汇编代码生成支持。
2)Clang
一个 C/C++/Objective-C 编译器,致力于提供令人惊讶的快速编译,极其有用的错误和警告信息,提供一个可用于构建很棒的源代码级别的工具。
3)dragonegg
GCC 插件,可将 GCC 的优化和代码生成器替换为 LLVM 的相应工具。
4)LLDB
基于LLVM提供的库和Clang构建的优秀的本地调试器。
5)libc++、libc++ ABI
符合标准的,高性能的C++标准库实现,以及对 C++11 的完整支持。
6)compiler-rt
针对 __fixunsdfdi 和其他目标机器上没有一个核心 IR(intermediate representation) 对应的短原生指令序列时,提供高度调优过的底层代码生成支持。
7)OpenMP
Clang 中对多平台并行编程的runtime支持。
8)vmkit
基于 LLVM 的 Java 和 .NET 虚拟机实现
9)polly
支持高级别的循环和数据本地化优化支持的 LLVM 框架。
10)libclc
OpenCL 标准库的实现
11)klee
基于 LLVM 编译基础设施的符号化虚拟机
12)SAFECode
内存安全的C/C++编译器
13)lld
Clang/LLVM 内置的链接器
Clang 作为 LLVM 提供的编译器前端,将用户的源代码 (C/C++/Objective-C) 编译成语言/目标设备无关的IR实现。并且提供良好的插件支持,容许用户在编译时,运行额外的自定义动作。
接下来,开始 “编写我的第一个 Clang 插件” 之路~~
源码编译
准备工作
Clang 需要用 CMake 和 Ninja 来编译,可以通过 Homebrew 安装
-
安装 Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
-
安装 CMake
$ brew install cmake
-
安装 Ninja
$ brew install ninja
源码下载
下载 LLVM
$ git clone https://git.llvm.org/git/llvm.git/
下载 Clang
$ cd llvm/tools
$ git clone https://git.llvm.org/git/clang.git/
:warning: Clang 源码需要安装到 llvm/tools 目录下
源码编译
1) 使用 Ninja 编译
在 LLVM 同级目录下新建一个 llvm_build 目录,然后执行以下操作
$ cd llvm_build $ cmake -G Ninja ../llvm -DCMAKE_INSTALL_PREFIX=../llvm_release # -DCMAKE_INSTALL_PREFIX 指定 LLVM 的安装路径
最终会在 llvm_build 目录下生成 build.ninja 文件
接着依次执行编译、安装指令
$ninja
编译完成后,llvm_build 目录大概 21.41GB 左右
$ninja install
安装完后,安装目录大概 12.04GB
2) 使用 Xcode 编译
在 LLVM 同级目录下新建一个 llvm_Xcode 目录,然后执行以下操作
$ cd llvm_xcode $ cmake -G Xcode ../llvm
生成的文件如下:
然后在 llvm_Xcode 目录下打开 LLVM.xcodeproj 文件,选择自动创建 Schemes:
选择 ALL_BUILD,编译,然后就是漫长的等待:hourglass:️,编译大概需要一个多小时...(我用公司配的闲置着的 macmini 从早上11:48同时开始命令行跟Xcode编译,一直到吃完午饭,1点多才编译好。。。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。