开发工具:
文件大小: 1mb
下载次数: 0
上传时间: 2019-09-01
详细说明:方舟编译器是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台,包含编译器、工具链、运行时等关键部件。 方舟编译器还在持续演进中,陆续将上述能力实现和开源。致谢
致谢
当前文档《华为方舟编译器开发文档》由进击的皇虫使用书栈( Bookstack.CN)进行构建,生成于
2019-08-31。
书栈(Bσ okstack,CN)仅提供文档编写、整理、归类等功能,以及对文档内容的生成和导出工具。
文档內容由网友们编写和整理,书栈( Bookstack.CN)难以确认文档内容知识点是否错漏。如果您在阅读文档
获取知识的时候,发现文档內容有不恰当的地方,请向我们反馈,让我们共同携手,将知识准确、高效且有效地传递
给每一个人。
同时,如果您在日常工作、生活和学习中遇到有价值有营养的知识文档,欢迎分享到书栈( Bookstack,CN),
为知识的传承献上您的一份力量!
如果当前文档生成时间太久,请到书栈( Bookstack.CN)获取最新的文档,以跟上知识更新换代的步伐。
内容来源:华为htps://ww, openarkcompiler.cn/ document/ frameworkDesgin
文档地址:http://www.bookstackcn/books/openarkcompiler
书栈官网:htp://w. bookstack.cn
书栈开源:https://github.com/truthhun
分享,让知识传承更久远!感谢知识的创造者,感谢知识的分享者,也感谢每一位阅读到此处的读者,因为我们
都将成为知识的传承者。
本文档使用书栈( Bookstack. CN)构建
架构设计
架构设计
方舟编译器架构示意图
编译器输入
编译器处理
编译器输出
语言运
进制
行时库
Java/koin程序
文件
方舟R
语言特性实现
转换器
方舟
优化及代码生
可执行
成
文件
因
编译器
其它编程语言
运行时
基础依
赖库
方舟编译器架构示意图
当前方舟编译器支持Java/Kot1in程序字节码的前端输入,其它编程语言的支持(如C/C++/JS等)还在规划中
方舟编译器的中间表示〔IR)转换器将前端输入转换成方舟工R,并输送给后端的优化器,最终生成二进制文件,二进
制文件与编译器运行时库文件链接生成可执行文件,在方舟的运行环境中就可执行该文件
方舟编译器IR是攴持程序编译和运行的中间程序表示。程序源代码中的仼何信息对于程序分析和优化都是有帮助的,
所以方舟IR的目标是尽可能完整详细地提供源程序的信息。关于方舟编译器IR的详细信息,请参考文档:方舟IR设计
方舟编译器开源范围请参考这里
本文档使用书栈( Bookstack. CN)构建
环境配置
环境配置
硬件推荐配置
2GHz双核处理器或者更高等级CPU
·2GB系统内存及以上
200GB可用磁盘空间
开发环境推荐
您需要安装一个64位版本的 lUbuntu(推荐 Ubuntu16,04)
udo apt-get -y install openjdk-8-jdk git-core gnupg flex bison gperf build-essential zip curl zliblg-dev
libc6-dev-1386 l1b32ncurses5-dev xllproto-core-dev libxll-dev 11b32Z-dev ccache libgll-mesa-dev libxm12-utils
xsltproc unzip lib32Z1-dev gemu g++-multilib gcc-multilib python 3- paramiko python-paramiko python- jenkins
1. python -requests python-xlwt libglib2 0-dey libpixman-1-dev linux-libc -dev: 1386
lo ap
y install gcc-5
gnu g++-5-aarch64-1
g
安装 clang编译器并完成配置(用于编译方舟编译器代码)
N#clang+llvm-80.0-8664-linux-gnu-ubuntu-1604
LLWM下载地址.http://releases.llvm.org/download.htm1#8.0.0
放置到 openarkcompiler/too1s目录,打开 openarkcompiler/build/ config/ BUILDCONFIG.gn文件,
将 N C COMPILER、 N CXX COMPIlεR和、NAR三^变量配置为 clang编译器所在路径,例如:
1.GN_CCOMPILER="$(MAPLE_ROOT/tools/clang_llvm-8..0-x8664-linux-gnu-ubuntu-1604/bin/clang
2. GN_CXX_COMPILER="$MAPLE_ROOT]/tools/clang_llvm-80.0-x86_64-linux-gnu-uhuntu-1604/bin/clang++
3. GN_AR ="SMAPLE_ROOT]/tools/clang_llvm-80.0-x86-_64-linux-gnu-uhuntu-1604/bin/1lvm-ar
其中${ MAPLE R00T}为 openarkcompiler源码根目录。
安装 Ninja、GN并完成配置
下载Ninja(v1.9.0)及GN(LinuxVersion)Ninja下载地址:https://github.com/ninja-
build/ninja/releases
GN下载地
te:https://archive.softwareheritage.org/browse/content/sha1_git:2dcod5b26caef44f467de8
120b26f8aad8b878be/raw/?filename=gn
将GN和 Ninja可执行程序放置到 openar compiler/too1s目录,打开 openarkcompiler/ Makefile文件,将GN
和 NINJAI两个变量配置为GN和 Ninja可执行程序所在路径。例如
本文档使用书栈( Bookstack. CN)构建
环境配置
1, GN =$MAPLE_ROOT/tools/gn/gn
IINJA :=$MAPLE_ROOT/tools/ninja_1.9.0/ninja
本文档使用书栈( Bookstack. CN)构建
开发指南
开发者指南
通过参考本文档,您可以下载编译器源码编译出 openEr compiler。
请先按照环境配置文档完成您的开发环境准备
本文档使用书栈( Bookstack. CN)构建
源码编译
源码编译
源码下载
下载地址:https://code.opensourcehuaweicloud.com/harmonyos/Openarkcompiler/home可以通
过 Clone or download的方式下载 openar compiler源码
注:默认源码下载目录为 openarkcompiler
源码编译
在 openar compiler目录下执行以下命令,编译出 openArkCompiler,默认输出路径
openarkcompiler/out/bino
1. source build/envsetup sh
2. make
命令说明:
source build/ envsetup.sh初始化环境,将 OpenArkCompiler工具链路径 openarkcompiler/src/bin设置
到环境变量中
·make编译0 penAr compiler的 Release版本
make BUILD TYPE=DEBug编译0 penArkCompiler的 Debug版本
本文档使用书栈( Bookstack. CN)构建
编程规范
编程规范
目的
规则并不是完美的,通过禁止在特定情况下有用的特性,可能会对代码实现造成影响。但是我们制定规则的目的“为了
大多数程序员可以得到更多的好处″,如果在团队运作中认为某个规则无法遵循,希望可以共同改进该规则。
参考该规范之前,希望您具有相应的C艹+基础能力,而不是通过该文档来学习C+十。
了解C++的IS0标准;
·熟知C++的基本语言特性,包括C++03/11/14/17相关特性;
了解C++的标准库;
重点关注
·约定C++的编程风格,比如命名,排版等。
C++的模块化设计,如何设计头文件,类,接口和函数。
C艹+相关特性的优秀实践,比如常量,类型转换,资源管理,模板等。
现代C艹的优秀实践,包括C++11/14/17中可以提高代码可维护性,提高代码可靠性的相关约定。
约定
规则:编程时必须遵守的约定(must)
建议:编程时应该遵守的约定(shou1d)
本规范适用通用C++标准,如果没有特定的标准版本,适用所有的版本(C++03/11/14/17)。
例外
无论是规则'还是'建议',都必须理解该条目这么规定的原因,并努力遵守。但是,有些规则和建议可能会有例外。
在不违背总体原则,经过充分考虑,有充足的理由的前提下,可以适当违背规范中约定。例外破坏了代码的一致性,
请尽量避免。"规则的例外应该是极少的。
下列情况,应凤格一致性原则优先:修改外部开源代码、第三方代码时,应该遵守开源代码、第三方代码已有规范
保持风格统一。*某些特定领域,优先参考其行业规范。**
本文档使用书栈( Bookstack. CN)构建
原
原贝
好代码的原则
我们参考 Kent beck的简单设计四原则来指导我们的如何写出优秀的代码,如何有效地判断我们的代码是优秀的。
·通过所有测试( Passes its tests)
·尽可能消除重复( Minimizes duplication)
尽可能清晰表达( Maximizes clarity)
更少代码元素( Has fewer elements)
以上四个原则的重要程度依次降低。这组定义被称做简单设计原则。第一条强调的是外部需求,这是代码实现最
重要的;第二点就是代码的模块架构设计,保证代码的正交性,保证代码更容易修改;第三点是代码的可阅读
性,保证代码是容易阅读的;最后一点才是保证代码是简洁的,在简洁和表达力之间,我们更看重表达力。
类和函数设计指导原则
C艹+是典型的面向对象编程语言,软件工程界已经有很多00P原则来指导我们编写大规模的,高可扩展的,可维护性的
代码:
高内聚,低耦合的基本原则
· SOLID原则
●迪米特法则
“Te11,Don"task"原则
组合/聚合复用原则
保证静态类型安全
我们希望C艹++应该是静态类型安全的,这样可以减少运行时的错误,提高代码的健壮性。但是由于C++的下面的特性存
在,会破坏C++静态类型安全,我们针对这部分特性要仔细处理。
unions联合体
●类型转换cast
·缩窄转换 nar rowing conversions
·类型退化 type decay
·范围错误 range errors
void*类型指针我们可以通过约束这些特性的使用,或者使用C++的新特性,比如 variant(C++17),GSL的
span, narrow_cast等来解决这些问题,提高C++代码的健壮性。
遵循C++ISO标准
希望通过使用Is0C+标准的特性来编写C艹+代码,对于IS0标准中未定乂的或者编译器实现的特性要谨慎使用,对于
GCC等编译器的提供的扩展特性也需要谨慎使用,这些特性会导致代码的可移植性比较差。
注意:如果模块中需要使用相关的扩展特性来,那么尽可能将这些特性封装成独立的接口,并且可以通过编译选项关
闭或者编译这岀特性。对于这些扩展特性旳使用,请模埉制定特性编程指南来指导这些特性旳使用。
本文档使用书栈( Bookstack. CN)构建
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.