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


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

查看所有标签

猜你喜欢:

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

程序员修炼之道(影印版)

程序员修炼之道(影印版)

Andrew Hunt、David Thomas / 中国电力出版社 / 2003-8-1 / 39.00

本书直击编程陈地,穿过了软件开发中日益增长的规范和技术藩篱,对核心过程进行了审视——即根据需求,创建用户乐于接受的、可工作和易维护的代码。本书包含的内容从个人责任到职业发展,直至保持代码灵活和易于改编重用的架构技术。从本书中将学到防止软件变质、消除复制知识的陷阱、编写灵活、动态和易适应的代码、避免出现相同的设计、用契约、断言和异常对代码进行防护等内容。一起来看看 《程序员修炼之道(影印版)》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

SHA 加密
SHA 加密

SHA 加密工具

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

html转js在线工具