方舟编译器开源,华为自家开源平台面世!(附编译过程)

大数据文摘出品

作者:曹培信

8月9日,华为EMUI官方微博发了这么一条微博。

对奉行实用至上的程序员来说,Linux的创始人Linus Torvalds的名言“Talk is cheap,show me the code.”这句话确实是戳到了心里。

8月31日,华为如约开源方舟编译器,并将源代码放出。然而开源并非是在GitHub上,而是自建了一个“华为开源平台”。

这意味着华为自己的开源平台也一并问世。

坊间猜测,这是由于7月底GitHub封禁了一批伊朗账户,让华为意识到了将方舟编译器和鸿蒙系统在GitHub上开源的风险,因此赶工赶出来一个开源平台。

目前平台上只有两个仓库,一是HarmonyOS/OpenArkComplier,另一个是测试用的example。

难怪有人表示:“这是我见过的最简洁的网站了”。

同时,华为还在码云(gitee)上建立了方舟编译器开源代码官方镜像仓库,如今标星已达3.6k。

打响了鸿蒙OS开源的第一枪

8月9日,在广东东莞举办的华为开发者大会HDC.2019上,华为消费者业务CEO余承东正式发布了鸿蒙HarmonyOS,并宣布鸿蒙OS全部开源!

次日,华为消费者软件副总裁刘丹对华为开源的系统设计和运作模式作了更详细的说明。

刘丹表示,华为软件开源,秉承的是自信、包容、公平、共建和共赢五大基本准则,在运作模式上,华为会参考国际常规模式,先以”孵化委员会”的简化模式进行初期探索,方舟编译器首先开源,随后其他模块也将分批开源。

对于未来的开源计划,现场也放出了一张表。

方舟编译器作为“排头兵”,打响了鸿蒙OS开源的第一枪。

方舟编译器开源范围

如今,方舟编译器首先在自家平台上开源了自定的编译器IR(Intermediate Representation)——MAPLE IR,RC(Reference Counting)和多语言设计思想等,用于与业界,学术界沟通交流。后续将陆续开源编译器前端,后端,支持其它语言(如JavaScript)的编译。

后续华为也会按照计划在2020年开始开源Java编译器工具链,支持Java程序编译;到2021年开始开源JavaScript编译器工具链,可用于JS程序的编译。

安卓卡顿的“终结者”

华为开发方舟编译器花了十年,为了解决安卓系统的“四大命门”,华为工程师们夜以继日,只为“再造安卓”。

方舟编译器官网上的一篇文章,生动地诉说了这一段历程。

文章地址:https://www.openarkcompiler.cn/news/detail/news5

  • 2009年,华为启动5G基础技术研究的同时,开始创建编译组,第一批海内外研究人员加入。
  • 2013年,华为推出面向基站领域的自研编译器,并正式提出编译器框架构想。
  • 2014年,众多海内外专家加入华为,方舟项目正式启动。
  • 2016年,成立编译器与编程语言实验室。
  • 2019年,华为方舟编译器正式面世!

2018年春节前一周,方舟编译器跑通安卓系统所有后台服务,并成功移植到手机。成功开机后,项目组成员甚至流下了激动的泪水!

大年初一清晨,总架构师发来了第一条方舟经编译器编译的程序发出来的拜年消息:

春节快乐,方舟大吉!

方舟编译器的优势在两方面,一是首次在Java领域将去掉了虚拟机,也是史上首次将Java/C/C++等混合代码一次编译成机器码直接在手机上运行,彻底告别Java的JNI额外开销,也彻底告别了虚拟机GC内存回收带来的应用进程掉线,使操作流畅度大幅提升。

方舟编译器整体框架

二是方舟编译器用空间换性能,直接将编译器的代码优化搬到了开发者环境,不再被手机端的硬件资源所限制,为代码优化提供了无限可能。

根据华为官方测试,方舟编译器提升手机系统操作流畅度高达24%,系统响应性能提升44%。

方舟编译器源码编译

方舟编译器开源之后,引起了业界广泛关注,方舟编译器仓库的文档也表示开发者可以根据方舟官方文档编译出OpenArkCompiler。

其中知乎网友“小乖他爹”根据文档进行了编译并撰写了《方舟编译器学习笔记》系列,文摘菌在取得作者授权后,将源码编译过程转载如下,快跟文摘菌一起一睹为快吧!

1、操作系统环境:

64位版本的Ubuntu(官方推荐Ubuntu 16.04)。我自己本身就有Ubuntu 16.04的虚拟机,所以直接就在上面编译了。

2、基础配置:

sudo apt-get -y install openjdk-8-jdk git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev
libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils
xsltproc unzip lib32z1-dev qemu g++-multilib gcc-multilib python3-paramiko python-paramiko python-jenkins
python-requests python-xlwt libglib2.0-dev libpixman-1-dev linux-libc-dev:i386
 
 
sudo apt-get -y install gcc-5-aarch64-linux-gnu g++-5-aarch64-linux-gnu

官方推荐安装上述库,但是即使是在Ubuntu 16.04上,这里很多库的版本较低。但是小版本号应该没什么太大的影响,我的本地环境以前编译过别的程序,所以导致很多库的版本都比这个推荐的要高,最终没有影响我的编译。所以不用太苛求其版本号。

3、源码下载:

git clone https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler.git

4、llvm和clang的下载及配置:

从LLVM Download Page下载LLVM8.0.0的Ubuntu 16.04 (.sig) 二进制包。解压之后,放到OpenArkCompiler/tools目录之下。

LLVM Download Page:http://releases.llvm.org/download.html#8.0.0

Ubuntu 16.04 (.sig):http://releases.llvm.org/8.0.0/

打开openarkcompiler/build/config/BUILDCONFIG.gn文件,将其中的GN_C_COMPILER、GN_CXX_COMPILER和GN_AR_COMPILER 三个变量配置为Clang编译器所在路径,例如:

GN_C_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang"
GN_CXX_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang++"
GN_AR_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/llvm-ar"

5、下载和配置Ninja、GN:

从下载Ninja v1.9.0,在tools下新建目录ninja_1.9.0,将ninja可执行文件放到ninja_1.9.0目录之下。

Ninja v1.9.0:https://github.com/ninja-build/ninja/releases

下载GN,在tools下新建目录GN,将GN可执行文件放到GN目录之下。

GN:https://archive.softwareheritage.org/browse/content/sha1_git:2dc0d5b26caef44f467de8120b26f8aad8b878be/raw/?filename=gn

打开openarkcompiler/Makefile文件,将GN和NINJA两个变量配置为GN和Ninja可执行程序所在路径。例如:

GN := ${MAPLE_ROOT}/tools/gn/gn
NINJA := ${MAPLE_ROOT}/tools/ninja_1.9.0/ninja

6、在OpenArkCompiler目录之下依次执行如下命令:

source build/envsetup.sh
make

命令说明:

source build/envsetup.sh初始化环境,将OpenArkCompiler工具链路径openarkcompiler/src/bin设置到环境变量中make编译OpenArkCompiler的Release版本make BUILD_TYPE=DEBUG编译OpenArkCompiler的Debug版本。

至此,完成方舟编译器源码的编译。编译完成之后的界面如图所示:

编译完成之后,在OpenArkCompiler/out目录之下,会有如下几个文件:

其实这几个文件在未编译之前,在OpenArkCompiler/src/bin目录下就有。读了下OpenArkCompiler目录下的Makefile,其中java2jar\jbc2mpl\mplcg都是直接从src/bin目录之下copy到out/bin目录之下的。只有maple有点特殊,它应该是编译生成的,然后install的时候反向copy到了src/bin目录之下,所以编译完成之后查看状态(git status),会发现src/bin/maple发生了变化。

OpenArkCompiler/Makefile中关于install的代码:

PHONY: install
install: mapleall
$(shell cp -rf $(MAPLE_ROOT)/src/bin/java2jar $(MAPLE_ROOT)/out/bin/)
$(shell cp -rf $(MAPLE_ROOT)/src/bin/jbc2mpl $(MAPLE_ROOT)/out/bin/)
$(shell cp -rf $(MAPLE_ROOT)/src/bin/mplcg $(MAPLE_ROOT)/out/bin/)
$(shell cp -rf $(MAPLE_ROOT)/out/bin/maple $(MAPLE_ROOT)/src/bin/)

另外附上作者方舟编译器学习笔记系列链接。

方舟编译器学习笔记1:方舟相关资料https://zhuanlan.zhihu.com/p/80624361

方舟编译器学习笔记2:源码编译https://zhuanlan.zhihu.com/p/80643681

方舟编译器学习笔记3:方舟可执行文件简介https://zhuanlan.zhihu.com/p/80693868

方舟编译器学习笔记4:文档导读https://zhuanlan.zhihu.com/p/80783831

方舟编译器学习笔记5:方舟开始接受代码合并请求https://zhuanlan.zhihu.com/p/80905553

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

Image placeholder
LeoMing
未设置
  16人点赞

没有讨论,发表一下自己的看法吧

推荐文章
深度好文 | 华为新贵!方舟编译器的荣光和使命

本文转自 | 菊厂搞机  future_technologies2017年5月的一个凌晨,华为某实验室里,方舟编译器上第一个Java程序“Hello,World”跑通了。当时项目组的一位工程师就哽咽了

平台+生态,华为凭什么为企业安全保驾护航?

当网络成为企业刚需,安全问题也不得不引起大家的重视。尤其是近年来,各种网络安全问题接连不断发生,给企业带来了严重不良后果。由此可见,企业亟需安全有效的解决方案来完善自己的网络。2019年3月21日,华

硬核盘点,华为面向开发者的十大技术

随着社会的发展,科技的进步,5G落地、AI爆发、大数据持续突破、云计算已然成为新时代的水电煤。日益增多的新兴技术,为开发者带来机遇的同时也带来了不少挑战。尽管开发者们经常身处历史性事件的前沿,但由于

重新定义数据基础设施,华为的底气与转变

摘要:重新定义,制定新规则,意味着变革,它能让我们在深度思考和发散思维之间寻找更好的解决方案。重新定义存储架构,重新定义数据处理平台,重新定义数据基础设施,今年,华为在数据基础设施领域有点忙。华为何要

除了5G,华为还有Wi-Fi 6

Wi-Fi6,这个处在“风口浪尖”的新技术,正以迅雷不及掩耳之势蹿红网络,成为继5G之后又一个热点话题。在变革当前无线网络应用承载的方式上,Wi-Fi6扮演着重要的角色。  ▲华为WLAN产品总监李兴

被美列入出口“黑名单”,华为海思凌晨发信:所有备胎芯片全转正,要科技自立

大数据文摘编辑部出品本周三,美国白宫和美国商务部双双采取行动。特朗普签署针对华为的行政令。美国商务部将华为列入管制“实体清单”,从事实上限制华为对美出售和从美采购。这些行动将禁止华为向美国市场出售技术

如何看待2019年多家开源公司修改软件许可?

从Web服务器到信息站,再到挖掘Facebook信息的大数据算法,几乎所有与您交互的计算机系统都至少有一部分在开源软件上运行。在科技行业,开源软件催生了一大批初创公司,促成了世界历史上最大的软件收购。

IT168企业存储月刊|十月多款新产品面世,上半年市场“交卷”

对于企业数据管理与存储市场而言,十月似乎是一个忙碌的月份。全球各大厂商相继发布新的产品与解决方案,为市场提供更多选择,帮助推动企业数字化升级。此外,IDC也发布了最新的市场调查报告,涉及企业级外部存储

浏览器开发者控制台

开发者控制台 代码是很容易出现错误的。你也很可能犯错误……哦,我在说什么?只要你是人,你一定会犯错误(在写代码的时候),除非你是机器人)。 但在浏览器中,默认情况下用户是看不到错误的。所以,如果脚本中

回馈开源,我如何排查一个MySQL Bug

X-Engine是阿里巴巴自研的高性能低成本存储引擎,经过多年的努力,我们在集团内部以AliSQL(X-Engine)的形式(AliSQL是阿里的MySQL分支)支持了许多业务,为用户带来了显著的成本

[解决方案] YDUI 香港服务器 IP 被墙,华东地区访问不了

域名是用的智能解析,华东地区全体阵亡被墙的IP:150.109.112.233香港腾讯云 被墙的IP:150.109.112.233香港腾讯云单独ping150.109.112.233解决方案:修改h

技术苍穹与平台沃土:华为构筑产业数字化的太极之道

产业数字化正在今天经历快速变化。自华为企业BG发布数字平台之后的7个月里,产业智能已经达成了广泛的行业共识、驱动传统经济向数字经济快速过渡被提升为国家战略,大量技术、人才、资金涌入产业数字化浪潮当中。

来福州,深入了解华为的“数字平台”

   数字化转型已成为几乎所有企业的必经之路,然而在相关战略的制定与真正落地的过程中,企业总是不可避免地会遇到一些困惑与挑战。  企业数字化转型的挑战——尤其对于许多传统行业的企业而言,主要体现在:A

SACC2019:爱奇艺的大数据中台战略(附演讲实录)

  孙斌爱奇艺高级总监主要负责爱奇艺的大数据中台、商业智能、内容智能制作等业务。在互联网产品设计和研发方面有十多年经验,曾就职于微软、hulu、雅虎等公司。摘要:爱奇艺的业务已经从单一的视频业务发展为

如何设计 QQ、微信、微博、Github 等等,第三方账号登陆 ?(附表设计)

前言:多账户登陆1.创业初期用户名密码注册登陆手机号注册登陆2.数据库设计3.引入第三方账户方案4.数据库设计5.总结前言:多账户登陆互联网应用当中,我们的应用会使用多个第三方账号进行登录,比如:网易

idea2019激活教程,永久激活,一次性搞定!(必看)

idea2019激活教程,永久激活,一次性搞定!(必看)此教程仅用作个人学习,请勿用于商业获利,造成后果自负!!!此教程已支持最新2019.2版本永久激活方法1.下载jar包点击链接网盘链接:pan.

使用js来设置、读取、删除cookie的最佳代码(附换肤应用)

课程推荐:Java开发工程师--学习猿地--送7个上线商业项目 继上一篇文章中我们讲到cookie的概念,今天我们来写如何用js来设置cookie、读取cookie、删除cookie。本文代码来自网络

springboot 多数据源,最简单的整合方式

简介 相信大家有配置过多数据源,或者即将配置多数据的朋友们,会发现网上大概有以下几种方案: 1.使用AOP切片进行动态数据源切换 2.使用MapperScan的basePackages配置不同的map

宜信开源|微服务任务调度平台SIA-TASK入手实践

引言最近宜信开源微服务任务调度平台SIA-TASK,SIA-TASK属于分布式的任务调度平台,使用起来简单方便,非常容易入手,部署搭建好SIA-TASK任务调度平台之后,编写TASK后配置JOB进行调

最新安卓零日漏洞被曝出,或影响谷歌、华为和小米等品牌手机

近日,据外媒BleepingComputer报道,谷歌威胁分析团队(TAG)称,一个最新的安卓0day漏洞或被用于攻击谷歌Pixel、华为、小米和三星以及OPPO等智能手机。 该漏洞是由谷歌Pro

欧盟发布2018全球企业研发费用榜单:华为超苹果跃居第5,BAT排名50开外

大数据文摘出品作者:王嘉仪、魏子敏华为的迅速增长并不是一蹴而就的,至少从近几年的研发投入上看,它比中国任何一家公司都努力。欧盟下属联合研究中心近日公布了2018年度全球企业R&D研发投资排行榜(EUI

这次华为重构园区网的目标:让光纤到每个桌面

当下,5G成为了聚光灯的宠儿,但5G的发展需要更快的光网络作为基础,5G基站之间的连接、5G基站到主干线等都需要光网络,从用户需求而言,VR/AR、4K/8K高清、云网专线等业务兴起,也亟需光网络升级

连续4年 华为依然是“高交会”上最靓的仔

2019年11月13-17日,由科技部、国家发改委等10个部委和深圳市人民政府共同举办的2019中国国际高新技术成果交易会(高交会)在深圳举办。这是华为连续第4年参加高交会智慧城市展览,不仅如此,华为

别小瞧了 Linux,安卓、华为的自研系统,均源自 Linux!

众所周知,目前国内已有众多的国产系统,基本上均源自linux,以linux为基础进行二次开发。比如红旗linux、深度等等。但不知道为什么,一说起某系统是基于linux而来,很多网友就瞧不起,并且会觉