mirror of
https://gitee.com/openharmony/arkcompiler_ets_runtime
synced 2024-10-08 00:24:00 +00:00
2935828b96
--------------------------------- issue: https://gitee.com/openharmony/arkcompiler_ets_runtime/issues/I5RZFO?from=project-issue Signed-off-by: DaiHN <daihuina1@huawei.com> Change-Id: Id47fa5046d1756c8a315182afd01bc146dd93fb3
13 KiB
13 KiB
开发实例
本章节将介绍基于方舟运行时的开发测试实例。
HelloWorld
运行前准备
-
编译方舟运行时,编译命令:
编译x64版本:
./build.sh --product-name hispark_taurus_standard --build-target ark_js_host_linux_tools_packages --build-target ark_ts2abc_build # arm平台和host端运行工具
编译arm64版本:
./build.sh --product-name hispark_taurus_standard --gn-args use_musl=true --target-cpu arm64 --build-target ark_js_vm
编译arm32版本:
./build.sh --product-name hispark_taurus_standard --build-target ark_js_runtime
-
编译方舟前端,编译命令:
./build.sh --product-name hispark_taurus_standard --build-target ark_ts2abc_build
说明:上述编译命令为release版本,且执行路径为项目根目录。编译debug版本需增加编译选项:--gn-args is_debug=true。
运行hello-world.js
新建hello-world.js文件,写入以下源码:
print("Hello World!!!");
运行步骤:
-
通过方舟前端生成hello-world.abc文件,编译命令:
node --expose-gc /your code path/out/hispark_taurus/clang_x64/ark/ark/build/src/index.js hello-world.js
-
执行hello-world.abc文件:
-
设置搜索路径:
export LD_LIBRARY_PATH= /your code path/out/hispark_taurus/clang_x64/ark/ark:/your code path/out/hispark_taurus/clang_x64/ark/ark_js_runtime:/your code path/out/hispark_taurus/clang_x64/global/i18n_standard:/your code path/prebuilts/clang/ohos/linux-x86_64/llvm/lib
-
执行ark_js_vm:
/your code path/out/hispark_taurus/clang_x64/ark/ark_js_runtime/ark_js_vm hello-world.abc
执行结果如下:
Hello World!!!
-
说明:此处“your code path”为源码目录路径。
反汇编hello-world.abc
编译生成反汇编工具:
./build.sh --product-name hispark_taurus_standard --build-target ark_host_linux_tools_packages
执行如下命令,结果输出到output.pa文件中:
./your code path/out/hispark_taurus/clang_x64/ark/ark/ark_disasm hello-world.abc output.pa
hello-world.abc反汇编结果如下:
#
# source binary: hello-world.abc
#
# ====================
# LITERALS
# ====================
# RECORDS
.record _ESAnnotation <external>
.record _ESModuleMode {
u8 isModule
}
# ====================
# METHODS
.function any func_main_0_any_any_any_any_(any a0, any a1, any a2) <static> {
mov v2, a2
mov v1, a1
mov v0, a0
builtin.acc
sta v5
builtin.idi "print", 0x0 // 加载print函数
sta v3
lda.str "Hello World!!!" // 加载Hello World!!!字符串
sta v4
builtin.tern3 v3, v4 // 调用print函数
builtin.acc
}
运行Test262测试用例
运行前准备
- 编译方舟运行时,编译命令:
./build.sh --product-name hispark_taurus_standard --build-target ark_js_host_linux_tools_packages
- 编译方舟前端,编译命令:
./build.sh --product-name hispark_taurus_standard --build-target ark_ts2abc_build
说明:编译命令执行路径为项目根目录。
运行Test262
运行run_test262.py脚本,下载及运行Test262用例。
命令行格式:
python3 test262/run_test262.py [options]
执行路径为:项目根目录/arkcompiler/ets_frontend。
测试运行示例
-
运行ES51测试用例:
python3 test262/run_test262.py --es51
-
仅运行ES2015测试用例:
python3 test262/run_test262.py --es2015
-
仅运行ES2021测试用例:
python3 test262/run_test262.py --es2021 only
-
运行ES2015和ES51和ES2021所有测试用例:
python3 test262/run_test262.py --es2021 all
-
运行单一测试用例:
python3 test262/run_test262.py --file test262/data/test_es5/language/statements/break/12.8-1.js
-
运行某目录下所有测试用例:
python3 test262/run_test262.py --dir test262/data/test_es5/language/statements
-
使用`babel`把单个测试用例转换成es5后再运行:
python3 test262/run_test262.py --babel --file test262/data/test_es5/language/statements/break/12.8-1.js
测试输出
Test262所有用例的测试结果位于项目根目录/arkcompiler/ets_frontend/out下。shell中测试输出结果如下:
$python3 test262/run_test262.py --file test262/data/test_es2015/built-ins/Array/15.4.5.1-5-1.js
Wait a moment..........
Test command:
node
test262/harness/bin/run.js
--hostType=panda
--hostPath=python3
--hostArgs='-B test262/run_sunspider.py --ark-tool=/your code path/out/hispark_taurus/clang_x64/ark/ark_js_runtime/ark_js_vm --ark-frontend-tool=/your code path/out/hispark_taurus/clang_x64/ark/ark/build/src/index.js --libs-dir=/your code path/out/hispark_taurus/clang_x64/ark/ark:/your code path/out/hispark_taurus/clang_x64/global/i18n:/your code path/prebuilts/clang/ohos/linux-x86_64/llvm/lib/ --ark-frontend=ts2panda'
--threads=15
--mode=only strict mode
--timeout=60000
--tempDir=build/test262
--test262Dir=test262/data
--saveCompiledTests
test262/data/test_es5/language/statements/break/12.8-1.js
PASS test262/data/test_es2015/built-ins/Array/15.4.5.1-5-1.js (strict mode)
Ran 1 tests
1 passed
0 failed
used time is: 0:01:04.439642