编译方舟编译器源码教程
前言:本博客主要是对华为开源平台的官方编译文档,做进一步的讲解,以及解决在编译时可能会到的问题。现在,先把编译成功的流程分享出来,后续再对各个工具和术语,以及如何使用编译出来的编译器,做进一步的讲解。
配置要求:Ubuntu系统一个,最好是16.04或18.04。
一、克隆方舟编译器源码到本地
1、仓库地址:https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler.git
2、在home/目录下,打开终端,切换到root角色,执行以下命令。
git clone https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler.git
二、下载依赖库
2.1、在终端,先执行以下命令:
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.2、再执行:
apt-get -y install gcc-5-aarch64-linux-gnu g++-5-aarch64-linux-gnu
2.3、如果2.1和2.2没报错,请忽略2.3部分。 如果在执行2.1时,遇到以下错误: Unable to locate package python-jenkins。那么,我们重新执行如下命令(以下命令不带安装 python-jenkins):
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-requests python-xlwt libglib2.0-dev libpixman-1-dev linux-libc-dev:i386
再执行,以下命令,单独安装python-jenkins,成功后,再接着,执行2.2部分就行。
pip install python-jenkins
三、下载clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04
打开以下面地址:clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-xx下载clang+llvm。请注意,下载你的ubuntu系统所对应的版本,我的是18.04,就下载18.04的,如图所示。
下载完后,在终端,进入文件所在的位置,执行以下命令,解压文件:
tar -xvf clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz
将解压出来的文件,放置在方舟编译器源码目录下的这个位置:openarkcompiler/tools(我的实际克隆下来的目录名是OpenArkCompiler/,官方指导的是openarkcompiler,本篇以官方指导的为主,编译过程,请以你实际克隆下来的项目的目录名为准)。并打开openarkcompiler/build/config/BUILDCONFIG.gn文件,将GN_C_COMPILER、GN_CXX_COMPILER和GN_AR_COMPILER三个变量配置为Clang编译器所在路径(其中${MAPLE_ROOT}为openarkcompiler源码根目录。),例如:
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"
实际,如下图所示:
四、下Ninja、GN。
1、Ninja(v1.9.0)下载地址:
https://github.com/ninja-build/ninja/releases
下载完后,在终端,进入文件所在的位置,执行以下命令,解压文件:
tar -zxvf ninja-1.9.0.tar.gz
2、GN下载地址:https://archive.softwareheritage.org/browse/content/sha1_git:2dc0d5b26caef44f467de8120b26f8aad8b878be/raw/?filename=gn
下载完后,在终端,进入文件所在的位置,执行以下命令,让gn变成可执行文件:
chmod 777 gn
五、配置安装Ninja、GN。
1、复制解压后的ninja文件和下载的gn到openarkcompiler/tools目录下。然后,从终端进入ninja-1.9.0目录,并执行以下命令:
./configure.py --bootstrap
完成后,会生成一个ninja文件。
2、将GN和Ninja可执行程序放置到openarkcompiler/tools目录,打开openarkcompiler/Makefile文件,将GN和NINJA两个变量配置为GN和Ninja可执行程序所在路径。例如:
GN := ${MAPLE_ROOT}/tools/gn/gnNINJA := ${MAPLE_ROOT}/tools/ninja-1.9.0/ninja
实际,如下图所示(路径要根据实际的文件路径和命令而定):
四、编译源码。
做完成上述步骤后,在终端,回到**openarkcompiler/**目录下,执行以下命令,将上述配置,导到环境变量里面去:
source build/envsetup.sh
最后,执行编译命令:
make
编译成功后,如下图所示:
接着,由终端进入**openarkcompiler/out/bin/**目录下,就可以看到编译出来的,用于实现编译的相关工具,这里生成的不是一个类似于IDEA或Android Studio的可视化的编译工具。如下图所示:
五、Conclusion。
至此,我们已经成功的编译出了方舟编译器。接下来,我们需要进一步研究一下,如何使用它来编译我们的安卓代码。传说这个编译器,可以提高我们安卓程序的运行的流畅度,所以,很值得一学。现在,相关的资料较少,据知乎上的某大神的实验,现在方舟编译器仍然不能很好的运作。但是,据百度百科上,对方舟编译器的说明,已经有几十款流行APP,通过方舟编译,并成功上架华为市场。所以,但本博主,本着实践出真知的态度,一定要自己去试一遍,确定是不是真的,下篇见!Finally, Thank you for reading my post.
最后,附上官方文档地址:https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler/file?ref=master&path=doc%252FDevelopment_Preparation.md