方舟编译器简介
方舟编译器(ArkCompiler)是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编译运行时平台。
- ArkCompiler主要分成两个部分:编译工具链与运行时。
- ArkCompiler eTS Runtime主要由四个子系统组成:Core Subsystem、Execution Subsystem、Compiler Subsystem、Runtime subsystem。
- ArkCompiler 的设计特点:原生支持类型、并发模型优化与并发API、安全。
要了解虚拟机的详细设计请参考 概述
环境搭建和编译
环境配置
搭建Ubuntu环境
-
初始环境软件安装(Ubuntu版本推荐18.04或20.04)
sudo apt-get update sudo apt-get upgrade sudo apt-get install git-lfs git bison flex gnupg build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses-dev x11proto-core-dev libx11-dev libc++1 lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 libtinfo5 bc npm genext2fs liblz4-tool libssl-dev ruby openjdk-8-jre-headless gdb python3-pip libelf-dev libxcursor-dev libxrandr-dev libxinerama-dev
详细Ubuntu安装搭建请参考 搭建Ubuntu环境
源码获取
下载源码请参考 下载说明
代码编译
注意:下列命令需在源码根目录下执行
-
首次编译:
./build.sh --product-name rk3568
-
首次编译后增量编译方舟运行时:
编译linux-x86版本:
./build.sh --product-name rk3568 --build-target ark_js_host_linux_tools_packages
编译oh-arm64版本:
./build.sh --product-name rk3568 --gn-args use_musl=true --target-cpu arm64 --build-target ark_js_packages
编译oh-arm32版本:
./build.sh --product-name rk3568 --build-target ark_js_packages
-
首次编译后增量编译方舟前端:
./build.sh --product-name rk3568 --build-target ets_frontend_build
更多编译命令请参考 编译命令
说明:上述编译命令为release版本,编译debug版本需增加编译选项:--gn-args is_debug=true。
方舟相关的二进制文件在如下路径:
out/rk3568/arkcompiler/runtime_core/
out/rk3568/arkcompiler/ets_frontend/
out/rk3568/arkcompiler/ets_runtime/
out/rk3568/clang_x64/arkcompiler/runtime_core/
out/rk3568/clang_x64/arkcompiler/ets_frontend/
out/rk3568/clang_x64/arkcompiler/ets_runtime
开发实例
本章节将介绍基于方舟运行时的开发测试实例。
HelloWorld
运行前准备
-
编译编译方舟运行时和方舟前端
./build.sh --product-name rk3568 --build-target ark_js_host_linux_tools_packages --build-target ets_frontend_build
运行hello-world.js
新建hello-world.js文件,写入以下源码:
print("Hello World!!!");
运行步骤:
-
通过方舟前端生成hello-world.abc文件,编译命令:
/your_code_path/out/rk3568/clang_x64/arkcompiler/ets_frontend/es2abc hello-world.js
-
执行hello-world.abc文件:
-
设置搜索路径:
export LD_LIBRARY_PATH=/your_code_path/out/rk3568/clang_x64/arkcompiler/ets_runtime:/your_code_path/prebuilts/clang/ohos/linux-x86_64/llvm/lib:/your_code_path/out/rk3568/clang_x64/thirdparty/zlib
-
执行ark_js_vm:
/your_code_path/out/rk3568/clang_x64/arkcompiler/ets_runtime/ark_js_vm hello-world.abc
执行结果如下:
Hello World!!!
-
说明:此处“your_code_path”为源