方舟编译器学习笔记6 方舟开源目录简介 - 知乎

方舟编译器第一批代码开源之后,很多人对方舟编译器感兴趣,包括一些之前不是做编译器相关工作的同学。所以有人反馈说想读代码却无从下手,毕竟代码中的注释也不多。本文将就方舟这次开源的目录做一个简单的介绍,因为还没有充足的时间深入的读这些源码,难免有疏漏之处,欢迎大家批评指正。

此次开源所放出来的一级目录主要六个:

1、build目录:该目录下主要是环境设置脚本,和一些build所用的Makefile。

2、doc目录:本次发布的几个文档,具体内容介绍见 文档导读

3、license目录:许可文件。

4、samples目录:示例程序目录,本次发布共公开了六个示例程序。

5、src目录:本次发布所公开的源码目录。

6、tools目录:为编译和使用过程中所用到的其他工具所预留的目录,该目录后续将存放llvm、gn、ninja。

我们所关注的源码,是位于src目录之下。src目录之下又有12个文件夹:

1、bin目录:该目录之下是四个可执行文件,其中除了maple之外的三个可执行文件,都要在build的时候copy到out/bin目录之下。

2、third_party目录:该目录之下存放了第三方库zlib。

3、deplibs目录:该目录之下存放了四个库,应该是编译的时候需要依赖的。

其中的libmempool.a、libmplphase.a和libmaple_driverutil.a是编译maple所需要的,但是src目录之下的mempool目录、mpl_phase目录、mpl_util目录都只有头文件,所以直接在源码里附上这几个库。

4、mempool目录:推测应该是内存池相关的代码,但是只有头文件,没有源文件。

5、mpl_phase目录:推测是maple的phase的基本功能的代码,该目录只有头文件,没有源文件。关于phase,doc目录有两个关于phase的文档,可以从文档中获取一部分信息。

6、mpl_util目录:推测是maple需要的一些util,字符串、log、计时器、版本等内容。

7、huawei_secure_c目录:是一些安全代码,主要字符串操作、输入输出等,具体到函数就是str_cat_s、str_cpy_s等。

8、maple_driver目录:这是maple可执行程序的主要源码所在的位置,它会调用其他的maple_开头的目录的部分内容。从其BUILD.gn中可以看到:

另外,该目录之下的src/maple.cpp中的main函数,是maple可执行程序的入口。我们前文也提到过maple是out/bin目录下面的四个可执行程序中唯一一个根据源码编译出来的,所以我们要分析方舟的程序,绕不开这个目录以及这个入口点。

9、maple_ipa目录:该目录是interleaved_manager和module_phase_manager的相关代码。phase的文档中对这块都有介绍:“PhaseManager负责phase的创建、管理和运行。与phase对应,有ModulePhaseManager和MeFuncPhaseManager两类。InterleavedManager负责phase manager的创建、管理和运行。通过调用AddPhases接口,它将创建一个对应类型的phase manager并添加进MapleVector中, 同时该phase manager相应的phase注册、添加也会自动被触发。”

10、maple_ir目录:该目录是针对maple的ir的基本操作的相关代码,与LLVM针对ir的基本操作类似。主要是对IR进行基本的分析,获取ir所要表达的信息。为之后的优化作准备。

11、maple_me目录:该目录包含了有关MeFuncPhaseManager相关的内容,这是phase相关的一部分。因为phase的概念本身就有点类似llvm的pass,所以该目录还包含了不少用于优化maple ir的代码。

12、mpl2mpl目录:该目录包含了一些从maple ir到maple ir的转换,这种转换都是为了后续的codegen做准备。

本次就简单的介绍了一级目录以及src目录之下的二级目录。后续会根据时间去具体的分析文档和代码。时间仓促,不足之处还望大家海涵。


Original url: Access
Created at: 2019-09-04 14:05:50
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论