Clang 之路——编写我的第一个 Clang 插件:检测 ObjC 中的类声明规范

栏目: Objective-C · 发布时间: 7年前

内容简介:本文所介绍插件检测的效果图前言

Clang 之路——编写我的第一个 Clang 插件:检测 ObjC 中的类声明规范

本文所介绍插件检测的效果图

前言

LLVM 是一个模块化和可重用的编译器和 工具 链技术的集合,Clang 是 LLVM 的子项目,是 C,C++ 和 Objective-C 编译器,因为多模块的复用,所以提供了惊人的快速编译,比 GCC 快3倍。创始人是 Chris Lattner,也是Swift之父,以下是他的部分履历:

  • 开发了一个叫作 LLVM 的编译器开发工具套件

  • 开发了 Clang,使得 LLVM 直接挑战 GCC 的地位

    2005年加入苹果,将苹果使用的 GCC 全面转为 LLVM

    2010年开始主导开发 Swift 语言

    2017年入职特斯拉

    加入特斯拉仅六个月之后离职,随后在 Google Brain 从事人工智能方面的工作。

Clang 之路——编写我的第一个 Clang 插件:检测 ObjC 中的类声明规范

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 文件

Clang 之路——编写我的第一个 Clang 插件:检测 ObjC 中的类声明规范

接着依次执行编译、安装指令

$ninja

编译完成后,llvm_build 目录大概 21.41GB 左右

Clang 之路——编写我的第一个 Clang 插件:检测 ObjC 中的类声明规范

$ninja install

安装完后,安装目录大概 12.04GB

Clang 之路——编写我的第一个 Clang 插件:检测 ObjC 中的类声明规范

2) 使用 Xcode 编译

在 LLVM 同级目录下新建一个 llvm_Xcode 目录,然后执行以下操作

$ cd llvm_xcode 
$ cmake -G Xcode ../llvm

生成的文件如下:

Clang 之路——编写我的第一个 Clang 插件:检测 ObjC 中的类声明规范

然后在 llvm_Xcode 目录下打开 LLVM.xcodeproj 文件,选择自动创建 Schemes:

Clang 之路——编写我的第一个 Clang 插件:检测 ObjC 中的类声明规范

选择 ALL_BUILD,编译,然后就是漫长的等待:hourglass:️,编译大概需要一个多小时...(我用公司配的闲置着的 macmini 从早上11:48同时开始命令行跟Xcode编译,一直到吃完午饭,1点多才编译好。。。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

精通CSS与HTML设计模式

精通CSS与HTML设计模式

Michael Bowers / 刘申 朱瑜敏 鲁奇 / 人民邮电出版社 / 2008-9 / 69.00元

本书是一部非常实用的CSS 与HTML(XHTML)解决方案手册。书中包含了350 多种可以立即使用的设计模式(涉及文本、背景、边框、图片、表格、布局等多方面),并介绍了每种模式的原理和使用。每种设计模式、示例和源代码都经过了精心设计,易于实现和使用。通过阅读此书,可大大提高读者在 Web 设计和开发中的效率和创造力。 本书结构清晰,示例丰富,实践性强,适用于所有Web 开发和设计人员......一起来看看 《精通CSS与HTML设计模式》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器