刘泉皓

没有最强的法术,只有最强的法师。

方舟编译器环境搭建详解

05 Sep 2019 » memory

一、ubuntu18.04按照官方文档搭建环境出错

邮件列表有人说ubuntu18.04按照官方文档搭建编译环境会报错,如下:

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

我对邮件列表回复却被拒绝,提示“收件人邮件地址(developer@openarkcompiler.cn)不存在,邮件无法送达。”,所以就在我博客写好了。

出这个问题是没有设置好MAPLE_ROOT变量导致,需要把它设置为源码openarkcompiler目录位置,例如我的:

liuxu:~/Downloads/OpenArkCompiler-0.2/openarkcompiler$ pwd
/home/liuxu/Downloads/OpenArkCompiler-0.2/openarkcompiler
liuxu:~/Downloads/OpenArkCompiler-0.2/openarkcompiler$ export MAPLE_ROOT=/home/liuxu/Downloads/OpenArkCompiler-0.2/openarkcompiler

文档是以ubuntu16.04为例子,现在普遍用ubuntu18.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 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

2.下载clang+llvm,我这里直接给ubuntu18.04的下载地址,其他版本选择自己系统对应的压缩包。

http://releases.llvm.org/8.0.0/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz

3.编辑openarkcompiler/build/config/BUILDCONFIG.gn,注意此处不要直接复制文档,文档是ubuntu16.04目录,我们是ubuntu18.04,看我的目录位置。

liuxu:~/Downloads/OpenArkCompiler-0.2/openarkcompiler/tools$ pwd
/home/liuxu/Downloads/OpenArkCompiler-0.2/openarkcompiler/tools

liuxu:~/Downloads/OpenArkCompiler-0.2/openarkcompiler/tools$ tree -L 2
.
├── clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04
│   ├── bin
│   ├── include
│   ├── lib
│   ├── libexec
│   └── share
├── clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz
└── README

8 directories, 5 files

那么此时我的配置文件就应该这么设置:

GN_C_COMPILER = "${MAPLE_ROOT}/tools/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang"
GN_CXX_COMPILER = "${MAPLE_ROOT}/tools/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang++"
GN_AR_COMPILER = "${MAPLE_ROOT}/tools/clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/llvm-ar"

4.下载ninja和gn并配置。

liuxu:~/Downloads/OpenArkCompiler-0.2/openarkcompiler/tools$ pwd
/home/liuxu/Downloads/OpenArkCompiler-0.2/openarkcompiler/tools
liuxu:~/Downloads/OpenArkCompiler-0.2/openarkcompiler/tools$ tree -L 2
.
├── clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04
│   ├── bin
│   ├── include
│   ├── lib
│   ├── libexec
│   └── share
├── clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz
├── gn
│   └── gn
├── ninja_1.9.0
│   └── ninja
├── ninja-linux.zip
└── README

注意gn下载后没有执行权限,要手动给它,不然脚本会没有权限执行它:

liuxu:~/Downloads/OpenArkCompiler-0.2/openarkcompiler$ chmod +x /home/liuxu/Downloads/OpenArkCompiler-0.2/openarkcompiler/tools/gn/gn

此时我按照Makefile命令的目录所以不需要改openarkcompiler/Makefile配置文件。Makefile相关配置如下,和目录匹配。

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

5.设置MAPLE_ROOT变量,否则脚本所有${MAPLE_ROOT}会为空,导致其他目录直接定位为从根目录开始。

liuxu:~/Downloads/OpenArkCompiler-0.2/openarkcompiler$ export MAPLE_ROOT=/home/liuxu/Downloads/OpenArkCompiler-0.2/openarkcompiler

6.开始编译,我的CPU是amd 3800x,8核16线程,所以我使用了cpu+1编译。

liuxu:~/Downloads/OpenArkCompiler-0.2/openarkcompiler$ pwd
/home/liuxu/Downloads/OpenArkCompiler-0.2/openarkcompiler
liuxu:~/Downloads/OpenArkCompiler-0.2/openarkcompiler$ make -j17
liuxu:~/Downloads/OpenArkCompiler-0.2/openarkcompiler$ tree -L 2 out/
out/
├── args.gn
├── bin
│   ├── java2jar
│   ├── jbc2mpl
│   ├── maple
│   └── mplcg
├── build.ninja
├── build.ninja.d
├── lib
│   ├── 64
│   └── libmplmewpo.a
├── obj
│   ├── ABS_PATH
│   ├── maple.stamp
│   └── src
└── toolchain.ninja

6 directories, 10 files

这样就编译好了,你可以make install或放到自定义目录去。


知识共享许可协议    鄂ICP备 15002452号-5    鄂公网安备 42088102000048号