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

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

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

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点多才编译好。。。


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

查看所有标签

猜你喜欢:

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

Mastering Regular Expressions, Second Edition

Mastering Regular Expressions, Second Edition

Jeffrey E F Friedl / O'Reilly Media / 2002-07-15 / USD 39.95

Regular expressions are an extremely powerful tool for manipulating text and data. They have spread like wildfire in recent years, now offered as standard features in Perl, Java, VB.NET and C# (and an......一起来看看 《Mastering Regular Expressions, Second Edition》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具