当前位置:   article > 正文

华为方舟编译器OpenArkCompiler编译_note, selecting 'git' instead of 'git-core

note, selecting 'git' instead of 'git-core

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

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

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

 

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

开发环境推荐

您需要安装一个64位版本的Ubuntu(推荐Ubuntu 16.04)

  1. 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
  2. sudo apt-get -y install gcc-5-aarch64-linux-gnu g++-5-aarch64-linux-gnu

 

出现问题

在我输入第一行命令后

 

出现了

  1. Note, selecting 'git' instead of 'git-core'
  2. Note, selecting 'lib32z1-dev' instead of 'lib32z-dev'
  3. 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

  1. // 先安装 python-pip
  2. sudo apt install python-pip
  3. // 安装 python-jenkins
  4. 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编译器所在路径,例如:

  1. GN_C_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang"
  2. GN_CXX_COMPILER = "${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang++"
  3. 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可执行程序所在路径。例如:

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

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

 

开始编译方舟编译器

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

在openarkcompiler目录下执行以下命令,编译出OpenArkCompiler,默认输出路径 openarkcompiler/out/bin。

  1. source build/envsetup.sh
  2. make

命令说明:

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

出现问题

此时出现了问题

我在make时出现了报错

  1. 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;
  2. /bin/sh: 1: /tools/gn: not found
  3. /bin/sh: 1: /tools/ninja: not found
  4. Makefile:23: recipe for target 'mapleall' failed
  5. make: *** [mapleall] Error 127

 

 

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

 

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

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

  1. sudo apt-get update
  2. 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
  3. 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.

 

再次尝试执行编译

  1. source build/envsetup.sh
  2. 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上查看编译演示

开始演示

可以看到

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

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

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

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

再进行编译,

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

但此时又出错误了

  1. Starting jbc2mpl
  2. Starting:./jbc2mpl -mplt libjava-core/libjava-core.mplt HelloWorld.jar
  3. 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
  4. Error while Exe, cmd: ./jbc2mpl args: -mplt libjava-core/libjava-core.mplt HelloWorld.jar
  5. Error 40: Compile Fail!

 

啊!!!      -_-!!

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

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/556058
推荐阅读
相关标签
  

闽ICP备14008679号