华为方舟编译器OpenArkCompiler编译

2019.8.31 华为在其华为开源平台开源了方舟编译器源码

网址如下:https://code.opensource.huaweicloud.com/home

https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler/home

打开Readme.md,进入“环境配置”,可以看到

开发环境推荐

您需要安装一个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

出现问题

在我输入第一行命令后

出现了

Note, selecting 'git' instead of 'git-core'
Note, selecting 'lib32z1-dev' instead of 'lib32z-dev'
E: Unable to locate package python-jenkins

所以我选择照着他的要求修改,并将“python-jenkins”从中删除

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

完成安装后,我查找方法安装python-jenkins

// 先安装 python-pip
sudo apt install python-pip
// 安装 python-jenkins
sudo pip install python-jenkins

如是,第一条命令所要求的环境都安装成功了

不过我在下载之后有报错说E: Unable to fetch http:...../qemu/...

所以我就直接sudo apt-get install qemu了

还有一个报错 E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing

我就直接sudo apt-get update后就再没管他了(事后证明这里出现了大问题)

再执行第二条命令

sudo apt-get -y install gcc-5-aarch64-linux-gnu g++-5-aarch64-linux-gnu

安装Clang编译器并完成配置(用于编译方舟编译器代码)

回到Readme.md下的环境配置,

下载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_COMPILERGN_CXX_COMPILERGN_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

(这两个步骤都不会出现什么问题)

开始编译方舟编译器

回到Readme.md,进入“开发者指南”

在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版本

出现问题

此时出现了问题

我在make时出现了报错

mkdir -p /out; /tools/gn gen /out --args=' GN_INSTALL_PREFIX="" GN_BUILD_TYPE="RELEASE" HOST_ARCH=64 MIR_JAVA=1'; cd /out; /tools/ninja -v  maple;
/bin/sh: 1: /tools/gn: not found
/bin/sh: 1: /tools/ninja: not found
Makefile:23: recipe for target 'mapleall' failed
make: *** [mapleall] Error 127

一开始我以为是我在改哪些config文件是改错了,我又反复检查这些文件,发现并没有错误

错后我猜想可能是环境的问题,我测试了一下java,居然发现根本没有,我就先安装上了Java

于是我开始重新配置环境,经过反复多次执行

sudo apt-get update
sudo apt-get -y install openjdk-8-jdk git gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip lib32z1-dev qemu g++-multilib gcc-multilib python3-paramiko python-paramiko 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

之后,知道出现0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

再次尝试执行编译

source build/envsetup.sh
make

就成功了

本想测试编译器究竟能不能使用的,但我编写了一个helloworld程序,使用maple编译,却始终报出

Error 40: Init Fail!
的错误,我改不清楚这是什么情况,还请各位高手赐教。

我使用的系统是Ubuntu18.04版本的

##################################################################################

2019.09.01

又找到了个网站,方舟编译器目前的官网https://www.openarkcompiler.cn/home

可以下载到二进制文件

拿来编译,仍然报错Error 40: Init Fail!

实在找不到方舟编译器该如何使用,也没个文档,难受ing...

###################################################################

编译(使用官方提供的编译器二进制文件)

又在官网https://www.openarkcompiler.cn/home上查看编译演示

开始演示

可以看到

maple --mplt libjava-core/libjava-core.mplt -O0 HelloWorld.jar 
//--mplt libjava-core.mplt 加载libjava-core.mplt文件, -O0 默认编译优化level
Starting jbc2mpl // OpenArkCompiler前端:编译.jar文件,生成原始的IR文件(.mpl)。
Starting:jbc2mpl -mplt libjava-core.mplt HelloWorld.jar
jbc2mpl consumed 1s
Starting mpl2mpl&mplme // OpenArkCompiler中端:编译.mpl文件,生成中端优化后的IR文件(.VtableImpl.mpl)。其中,mpl2mpl是中端的功能框架,me是中端的优化框架
Starting maple --run=me:mpl2mpl --option=' --quiet: --quiet --regnativefunc --maplelinker' HelloWorld.mpl //--quiet 减少不必要的日志打印, --regnativefunc 动态链接绑定选项, --maplelinker OpenArkCompiler链接器
Starting parse input
Parse consumed 0s
Processing mpl2mpl&mplme
mpl2mpl&mplme consumed 0s
Starting mplcg // OpenArkCompiler后端:编译.VtableImpl.mpl文件,生成后端优化后的汇编文件(.VtableImpl.s)。
Starting:mplcg --fpic --maplelinker --no-pie --quiet --verbose-asm HelloWorld.VtableImpl.mpl //--fpic fpic功能开启选项, --no-pie pie功能关闭选项, --verbose-asm 汇编文件增加注释信息
mplcg consumed 1s
//(当前方舟编译器只支持生成.s文件,运行时库未开源,生成.so的过程不做演示。)
编译完成生成 (HelloWorld).so

从第一行中我们可以了解到maple操作的对象是jar文件,而非java源码文件

所以我们使用java2jar生成jar文件

./java2jar HelloWorld.jar ./MANIFEST.MF HelloWorld.class

再进行编译,

 ./maple --mplt libjava-core/libjava-core.mplt -O0 HelloWorld.jar

但此时又出错误了

Starting jbc2mpl
Starting:./jbc2mpl -mplt libjava-core/libjava-core.mplt  HelloWorld.jar
Tid(3755): CHECK/CHECK_FATAL failure: f != nullptr at [../../../mapleall/maple_ir/src/bin_mpl_import.cpp:63] Error while reading the binary file: libjava-core/libjava-core.mplt
Error while Exe, cmd: ./jbc2mpl args:  -mplt libjava-core/libjava-core.mplt  HelloWorld.jar
Error 40: Compile Fail!

啊!!!      -_-!!

继续难受ing,继续求各位大佬赐教

发布了21 篇原创文章 · 获赞 34 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/Owen_Suen/article/details/100177647