2019 年 8 月 31 日,华为方舟编译器开源官网正式上线,并首次开放了框架源码。方舟编译器对终端软件编译机制进行了架构级优化,将显著地提升用户体验。
官方网站:
https://www.openarkcompiler.cn/
本次方舟编译器开源的是编译器框架部分源码,包括编译器中间表示(IR)和语言编译实现,同时搭配编译器其他二进制组件,实现Java程序到aarch64汇编指令的编译过程。开发者可基于开源代码+二进制,编译构建出编译器工具链,尝试对Java程序进行编译。社区参与者可以通过框架源码学习方舟编译器的编译器中间表达(IR)及基本的中端编译框架,熟悉方舟编译器的架构思想,并参与诸如对编译器中端优化的贡献。
方舟编译器架构示意图
当前方舟编译器支持Java/Kotlin程序字节码的前端输入,其它编程语言的支持(如 C/C++/JS 等)还在规划中,方舟编译器的中间表示(IR)转换器将前端输入转换成方舟IR,并输送给后端的优化器,最终生成二进制文件,二进制文件与编译器运行时库文件链接生成可执行文件,在方舟的运行环境中就可执行该文件
方舟编译器IR是支持程序编译和运行的中间程序表示。程序源代码中的任何信息对于程序分析和优化都是有帮助的,所以方舟IR的目标是尽可能完整详细地提供源程序的信息。关于方舟编译器IR的详细信息,请参考文档:方舟IR设计
https://www.openarkcompiler.cn/download/MapleIRDesign.pdf
下面官方有几个的样例,有编译运行的过程和结果演示 。如果看不清楚,大家可以具体登陆网站查看一下。
环境配置
硬件推荐配置
-
2 GHz 双核处理器或者更高等级CPU
-
2 GB 系统内存及以上
-
200GB 可用磁盘空间
开发环境推荐
您需要安装一个64位版本的Ubuntu(推荐Ubuntu 16.04)
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
安装Clang编译器并完成配置(用于编译方舟编译器代码)
下载clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04
LLVM下载地址:http://releases.llvm.org/download.html#8.0.0
放置到openarkcompiler/tools
目录,打开openarkcompiler/build/config/BUILDCONFIG.gn
文件,将GN_C_COMPILER
、GN_CXX_COMPILER
和GN_AR
三个变量配置为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 = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/llvm-ar"
其中${MAPLE_ROOT}为openarkcompiler源码根目录。
安装Ninja、GN并完成配置
下载Ninja(v1.9.0)及GN(Linux Version) Ninja下载地址:https://github.com/ninja-build/ninja/releases
GN下载地址:https://archive.softwareheritage.org/browse/content/sha1_git:2dc0d5b26caef44f467de8120b26f8aad8b878be/raw/?filename=gn
将GN和Ninja可执行程序放置到openarkcompiler/tools目录,打开openarkcompiler/Makefile文件,将GN和NINJA两个变量配置为GN和Ninja可执行程序所在路径。例如:
GN := ${MAPLE_ROOT}/tools/gn/gn
NINJA := ${MAPLE_ROOT}/tools/ninja_1.9.0/ninja
源码编译
源码下载
下载地址:https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler/home,可以通过 Clone or Download 的方式下载openarkcompiler源码
注:默认源码下载目录为openarkcompiler
源码编译
在openarkcompiler目录下执行以下命令,编译出OpenArkCompiler,默认输出路径 openarkcompiler/out/bin。
source build/envsetup.sh
make
命令说明:
-
source build/envsetup.sh
初始化环境,将OpenArkCompiler工具链路径openarkcompiler/src/bin设置到环境变量中 -
make
编译OpenArkCompiler的Release版本 -
make BUILD_TYPE=DEBUG
编译OpenArkCompiler的Debug版本
最后,方舟编译器是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台,包含编译器、工具链、运行时等关键部件。方舟编译器还在持续演进中,陆续会慢慢会把更多东西开源出来的,慢慢期待。
官方网站:
https://www.openarkcompiler.cn/home
源代码:
https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler/home
< END >
关注微信公众号,在后台回复关键字:1024 可以获取一份编程学习大礼包。