赞
踩
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
回到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_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(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,继续求各位大佬赐教
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。