diff options
Diffstat (limited to 'fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/tests/wamr-test-suites/test_wamr.sh')
-rwxr-xr-x | fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/tests/wamr-test-suites/test_wamr.sh | 882 |
1 files changed, 882 insertions, 0 deletions
diff --git a/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/tests/wamr-test-suites/test_wamr.sh b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/tests/wamr-test-suites/test_wamr.sh new file mode 100755 index 00000000..67868b9c --- /dev/null +++ b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/tests/wamr-test-suites/test_wamr.sh @@ -0,0 +1,882 @@ +#!/usr/bin/env bash + +# +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# + +function DEBUG() { + [[ -n $(env | grep "\<DEBUG\>") ]] && $@ +} +DEBUG set -xv pipefail + +function help() +{ + echo "test_wamr.sh [options]" + echo "-c clean previous test results, not start test" + echo "-s {suite_name} test only one suite (spec|wasi_certification)" + echo "-m set compile target of iwasm(x86_64|x86_32|armv7_vfp|thumbv7_vfp|riscv64_lp64d|riscv64_lp64)" + echo "-t set compile type of iwasm(classic-interp|fast-interp|jit|aot|fast-jit|multi-tier-jit)" + echo "-M enable multi module feature" + echo "-p enable multi thread feature" + echo "-S enable SIMD feature" + echo "-G enable GC feature" + echo "-X enable XIP feature" + echo "-x test SGX" + echo "-w enable WASI threads" + echo "-b use the wabt binary release package instead of compiling from the source code" + echo "-g build iwasm with debug version" + echo "-v enable GC heap verification" + echo "-P run the spec test parallelly" + echo "-Q enable qemu" + echo "-F set the firmware path used by qemu" + echo "-C enable code coverage collect" +} + +OPT_PARSED="" +WABT_BINARY_RELEASE="NO" +#default type +TYPE=("classic-interp" "fast-interp" "jit" "aot" "fast-jit" "multi-tier-jit") +#default target +TARGET="X86_64" +ENABLE_WASI_THREADS=0 +ENABLE_MULTI_MODULE=0 +ENABLE_MULTI_THREAD=0 +COLLECT_CODE_COVERAGE=0 +ENABLE_SIMD=0 +ENABLE_GC=0 +ENABLE_XIP=0 +ENABLE_DEBUG_VERSION=0 +ENABLE_GC_HEAP_VERIFY=0 +#unit test case arrary +TEST_CASE_ARR=() +SGX_OPT="" +PLATFORM=$(uname -s | tr A-Z a-z) +PARALLELISM=0 +ENABLE_QEMU=0 +QEMU_FIRMWARE="" +WASI_TESTSUITE_COMMIT="aca78d919355ae00af141e6741a439039615b257" + +while getopts ":s:cabgvt:m:MCpSXxwPGQF:" opt +do + OPT_PARSED="TRUE" + case $opt in + s) + TEST_CASE_ARR+=($OPTARG) + # get next suite if there are multiple vaule in -s + eval "nxarg=\${$((OPTIND))}" + # just get test cases, loop until the next symbol '-' + # IN ====> -s spec wasi unit -t fast-classic + # GET ====> spec wasi unit + while [[ "${nxarg}" != -* && ${nxarg} ]]; + do + TEST_CASE_ARR+=(${nxarg}) + OPTIND=$((OPTIND+1)) + eval "nxarg=\${$((OPTIND))}" + done + echo "test following cases: ${TEST_CASE_ARR[@]}" + ;; + c) + read -t 5 -p "Are you sure to delete all reports. y/n " cmd + if [[ $cmd == "y" && $(ls -A workspace/report) ]];then + rm -fr workspace/report/* + rm -fr /tmp/*.wasm /tmp/*.wast /tmp/*.aot + echo "cleaned all reports and temp files" + fi + exit 0;; + a) + TEST_ALL_AOT_RUNTIME="all" + echo "test all runtimes in sightglass_aot" + ;; + b) + WABT_BINARY_RELEASE="YES" + echo "use a WABT binary release instead of compiling from source code" + ;; + t) + echo "set compile type of wamr " ${OPTARG} + if [[ ${OPTARG} != "classic-interp" && ${OPTARG} != "fast-interp" \ + && ${OPTARG} != "jit" && ${OPTARG} != "aot" + && ${OPTARG} != "fast-jit" && ${OPTARG} != "multi-tier-jit" ]]; then + echo "*----- please varify a type of compile when using -t! -----*" + help + exit 1 + fi + + TYPE=(${OPTARG}) + ;; + m) + echo "set compile target of wamr" ${OPTARG} + TARGET=${OPTARG^^} # set target to uppercase if input x86_32 or x86_64 --> X86_32 and X86_64 + ;; + w) + echo "enable WASI threads" + ENABLE_WASI_THREADS=1 + ;; + M) + echo "enable multi module feature" + ENABLE_MULTI_MODULE=1 + ;; + C) + echo "enable code coverage" + COLLECT_CODE_COVERAGE=1 + ;; + p) + echo "enable multi thread feature" + ENABLE_MULTI_THREAD=1 + ;; + S) + echo "enable SIMD feature" + ENABLE_SIMD=1 + ;; + X) + echo "enable XIP feature" + ENABLE_XIP=1 + ;; + x) + echo "test SGX" + SGX_OPT="--sgx" + ;; + g) + echo "enable build iwasm with debug version" + ENABLE_DEBUG_VERSION=1 + ;; + v) + echo "enable GC heap verification" + ENABLE_GC_HEAP_VERIFY=1 + ;; + G) + echo "enable GC feature" + ENABLE_GC=1 + ;; + P) + PARALLELISM=1 + ;; + Q) + echo "enable QEMU" + ENABLE_QEMU=1 + ;; + F) + echo "QEMU firmware" ${OPTARG} + QEMU_FIRMWARE=${OPTARG} + ;; + ?) + help + exit 1;; + esac +done + +# Parameters are not allowed, use options instead +if [ -z "$OPT_PARSED" ]; +then + if [ ! -z "$1" ]; + then + help + exit 1 + fi +fi + +mkdir -p workspace +cd workspace + +readonly WORK_DIR=$PWD + +readonly DATE=$(date +%Y-%m-%d_%H:%M:%S) +readonly REPORT_DIR=${WORK_DIR}/report/${DATE} +mkdir -p ${REPORT_DIR} + +readonly WAMR_DIR=${WORK_DIR}/../../.. + +if [[ ${SGX_OPT} == "--sgx" ]];then + readonly IWASM_LINUX_ROOT_DIR="${WAMR_DIR}/product-mini/platforms/linux-sgx" + readonly IWASM_CMD="${WAMR_DIR}/product-mini/platforms/linux-sgx/enclave-sample/iwasm" +else + readonly IWASM_LINUX_ROOT_DIR="${WAMR_DIR}/product-mini/platforms/${PLATFORM}" + readonly IWASM_CMD="${WAMR_DIR}/product-mini/platforms/${PLATFORM}/build/iwasm" +fi + +readonly WAMRC_CMD="${WAMR_DIR}/wamr-compiler/build/wamrc" + +readonly CLASSIC_INTERP_COMPILE_FLAGS="\ + -DWAMR_BUILD_TARGET=${TARGET} \ + -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_INTERP=0 \ + -DWAMR_BUILD_JIT=0 -DWAMR_BUILD_AOT=0 \ + -DWAMR_BUILD_SPEC_TEST=1 \ + -DCOLLECT_CODE_COVERAGE=${COLLECT_CODE_COVERAGE}" + +readonly FAST_INTERP_COMPILE_FLAGS="\ + -DWAMR_BUILD_TARGET=${TARGET} \ + -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_INTERP=1 \ + -DWAMR_BUILD_JIT=0 -DWAMR_BUILD_AOT=0 \ + -DWAMR_BUILD_SPEC_TEST=1 \ + -DCOLLECT_CODE_COVERAGE=${COLLECT_CODE_COVERAGE}" + +# jit: report linking error if set COLLECT_CODE_COVERAGE, +# now we don't collect code coverage of jit type +readonly ORC_EAGER_JIT_COMPILE_FLAGS="\ + -DWAMR_BUILD_TARGET=${TARGET} \ + -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_FAST_INTERP=0 \ + -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_AOT=1 \ + -DWAMR_BUILD_LAZY_JIT=0 \ + -DWAMR_BUILD_SPEC_TEST=1 \ + -DCOLLECT_CODE_COVERAGE=${COLLECT_CODE_COVERAGE}" + +readonly ORC_LAZY_JIT_COMPILE_FLAGS="\ + -DWAMR_BUILD_TARGET=${TARGET} \ + -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_FAST_INTERP=0 \ + -DWAMR_BUILD_JIT=1 -DWAMR_BUILD_AOT=1 \ + -DWAMR_BUILD_LAZY_JIT=1 \ + -DWAMR_BUILD_SPEC_TEST=1 \ + -DCOLLECT_CODE_COVERAGE=${COLLECT_CODE_COVERAGE}" + +readonly AOT_COMPILE_FLAGS="\ + -DWAMR_BUILD_TARGET=${TARGET} \ + -DWAMR_BUILD_INTERP=0 -DWAMR_BUILD_FAST_INTERP=0 \ + -DWAMR_BUILD_JIT=0 -DWAMR_BUILD_AOT=1 \ + -DWAMR_BUILD_SPEC_TEST=1 \ + -DCOLLECT_CODE_COVERAGE=${COLLECT_CODE_COVERAGE}" + +readonly FAST_JIT_COMPILE_FLAGS="\ + -DWAMR_BUILD_TARGET=${TARGET} \ + -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_INTERP=0 \ + -DWAMR_BUILD_JIT=0 -DWAMR_BUILD_AOT=0 \ + -DWAMR_BUILD_FAST_JIT=1 \ + -DWAMR_BUILD_SPEC_TEST=1 \ + -DCOLLECT_CODE_COVERAGE=${COLLECT_CODE_COVERAGE}" + +readonly MULTI_TIER_JIT_COMPILE_FLAGS="\ + -DWAMR_BUILD_TARGET=${TARGET} \ + -DWAMR_BUILD_INTERP=1 -DWAMR_BUILD_FAST_INTERP=0 \ + -DWAMR_BUILD_FAST_JIT=1 -DWAMR_BUILD_JIT=1 \ + -DWAMR_BUILD_SPEC_TEST=1 \ + -DCOLLECT_CODE_COVERAGE=${COLLECT_CODE_COVERAGE}" + +readonly COMPILE_FLAGS=( + "${CLASSIC_INTERP_COMPILE_FLAGS}" + "${FAST_INTERP_COMPILE_FLAGS}" + "${ORC_EAGER_JIT_COMPILE_FLAGS}" + "${ORC_LAZY_JIT_COMPILE_FLAGS}" + "${AOT_COMPILE_FLAGS}" + "${FAST_JIT_COMPILE_FLAGS}" + "${MULTI_TIER_JIT_COMPILE_FLAGS}" + ) + +function unit_test() +{ + echo "Now start unit tests" + + cd ${WORK_DIR} + rm -fr unittest-build && mkdir unittest-build + cd unittest-build + + echo "Build unit test" + touch ${REPORT_DIR}/unit_test_report.txt + cmake ${WORK_DIR}/../../unit -DCOLLECT_CODE_COVERAGE=${COLLECT_CODE_COVERAGE} + make -j + make test | tee -a ${REPORT_DIR}/unit_test_report.txt + + echo "Finish unit tests" +} + +function sightglass_test() +{ + echo "Now start sightglass benchmark tests" + + cd ${WORK_DIR}/../sightglass/benchmarks + + # build iwasm first + if [[ $1 == "classic-interp" || $1 == "fast-interp" ]];then + ./test_interp.sh ${SGX_OPT} + cp report.txt ${REPORT_DIR}/sightglass_$1_test_report.txt + fi + + if [[ $1 == "aot" ]];then + ./test_aot.sh ${SGX_OPT} + cp report.txt ${REPORT_DIR}/sightglass_aot_test_report.txt + fi + + if [[ $1 == "jit" ]];then + [[ $TEST_ALL_AOT_RUNTIME ]] && ./test_aot.sh ${TEST_ALL_AOT_RUNTIME} ${SGX_OPT} \ + || ./test_aot.sh jit ${SGX_OPT} + cp report.txt ${REPORT_DIR}/sightglass_jit_test_report.txt + fi + + echo "Finish sightglass benchmark tests" +} + +# TODO: with iwasm only +function spec_test() +{ + echo "Now start spec tests" + touch ${REPORT_DIR}/spec_test_report.txt + + cd ${WORK_DIR} + if [ ! -d "spec" ];then + echo "spec not exist, clone it from github" + git clone -b master --single-branch https://github.com/WebAssembly/spec + fi + + pushd spec + + # restore and clean everything + git reset --hard HEAD + + # update basic test cases + echo "update spec test cases" + git fetch origin main + # restore from XX_ignore_cases.patch + # resotre branch + git checkout -B main + # [spec] Update note on module initialization trapping (#1493) + git reset --hard 044d0d2e77bdcbe891f7e0b9dd2ac01d56435f0b + git apply ../../spec-test-script/ignore_cases.patch + if [[ ${ENABLE_SIMD} == 1 ]]; then + git apply ../../spec-test-script/simd_ignore_cases.patch + fi + + # udpate thread cases + if [ ${ENABLE_MULTI_THREAD} == 1 ]; then + echo "checkout spec for threads proposal" + if [[ -z $(git remote -v | grep "\<threads\>") ]]; then + git remote add threads https://github.com/WebAssembly/threads + fi + + # fetch spec for threads proposal + git fetch threads + # Fix error in Web embedding desc for atomic.notify (#185) + git reset --hard 85b562cd6805947876ec5e8b975ab0127c55a0a2 + git checkout threads/main + + git apply ../../spec-test-script/thread_proposal_ignore_cases.patch + git apply ../../spec-test-script/thread_proposal_fix_atomic_case.patch + fi + + # update GC cases + if [[ ${ENABLE_GC} == 1 ]]; then + echo "checkout spec for GC proposal" + + popd + rm -fr spec + # check spec test cases for GC + git clone -b main --single-branch https://github.com/WebAssembly/gc.git spec + pushd spec + + git restore . && git clean -ffd . + # Sync constant expression descriptions + git reset --hard 62beb94ddd41987517781732f17f213d8b866dcc + git apply ../../spec-test-script/gc_ignore_cases.patch + + echo "compile the reference intepreter" + pushd interpreter + make opt + popd + fi + + popd + echo $(pwd) + + if [ ${WABT_BINARY_RELEASE} == "YES" ]; then + echo "download a binary release and install" + local WAT2WASM=${WORK_DIR}/wabt/out/gcc/Release/wat2wasm + if [ ! -f ${WAT2WASM} ]; then + case ${PLATFORM} in + linux) + WABT_PLATFORM=ubuntu + ;; + darwin) + WABT_PLATFORM=macos + ;; + *) + echo "wabt platform for ${PLATFORM} in unknown" + exit 1 + ;; + esac + if [ ! -f /tmp/wabt-1.0.31-${WABT_PLATFORM}.tar.gz ]; then + wget \ + https://github.com/WebAssembly/wabt/releases/download/1.0.31/wabt-1.0.31-${WABT_PLATFORM}.tar.gz \ + -P /tmp + fi + + cd /tmp \ + && tar zxf wabt-1.0.31-${WABT_PLATFORM}.tar.gz \ + && mkdir -p ${WORK_DIR}/wabt/out/gcc/Release/ \ + && install wabt-1.0.31/bin/wa* ${WORK_DIR}/wabt/out/gcc/Release/ \ + && cd - + fi + else + echo "download source code and compile and install" + if [ ! -d "wabt" ];then + echo "wabt not exist, clone it from github" + git clone --recursive https://github.com/WebAssembly/wabt + fi + echo "upate wabt" + cd wabt + git pull + git reset --hard origin/main + cd .. + make -C wabt gcc-release -j 4 + fi + + ln -sf ${WORK_DIR}/../spec-test-script/all.py . + ln -sf ${WORK_DIR}/../spec-test-script/runtest.py . + + local ARGS_FOR_SPEC_TEST="" + + # multi-module only enable in interp mode + if [[ 1 == ${ENABLE_MULTI_MODULE} ]]; then + if [[ $1 == 'classic-interp' || $1 == 'fast-interp' ]]; then + ARGS_FOR_SPEC_TEST+="-M " + fi + fi + + # sgx only enable in interp mode and aot mode + if [[ ${SGX_OPT} == "--sgx" ]];then + if [[ $1 == 'classic-interp' || $1 == 'fast-interp' || $1 == 'aot' ]]; then + ARGS_FOR_SPEC_TEST+="-x " + fi + fi + + # simd only enable in jit mode and aot mode + if [[ ${ENABLE_SIMD} == 1 ]]; then + if [[ $1 == 'jit' || $1 == 'aot' ]]; then + ARGS_FOR_SPEC_TEST+="-S " + fi + fi + + if [[ ${ENABLE_MULTI_THREAD} == 1 ]]; then + ARGS_FOR_SPEC_TEST+="-p " + fi + + if [[ ${ENABLE_XIP} == 1 ]]; then + ARGS_FOR_SPEC_TEST+="-X " + fi + + # set the current running target + ARGS_FOR_SPEC_TEST+="-m ${TARGET} " + + # require warmc only in aot mode + if [[ $1 == 'aot' ]]; then + ARGS_FOR_SPEC_TEST+="-t " + fi + + if [[ ${PARALLELISM} == 1 ]]; then + ARGS_FOR_SPEC_TEST+="--parl " + fi + + if [[ ${ENABLE_GC} == 1 ]]; then + ARGS_FOR_SPEC_TEST+="--gc " + fi + + if [[ ${ENABLE_QEMU} == 1 ]]; then + ARGS_FOR_SPEC_TEST+="--qemu " + ARGS_FOR_SPEC_TEST+="--qemu-firmware ${QEMU_FIRMWARE} " + fi + + # set log directory + ARGS_FOR_SPEC_TEST+="--log ${REPORT_DIR}" + + cd ${WORK_DIR} + echo "python3 ./all.py ${ARGS_FOR_SPEC_TEST} | tee -a ${REPORT_DIR}/spec_test_report.txt" + python3 ./all.py ${ARGS_FOR_SPEC_TEST} | tee -a ${REPORT_DIR}/spec_test_report.txt + if [[ ${PIPESTATUS[0]} -ne 0 ]];then + echo -e "\nspec tests FAILED" | tee -a ${REPORT_DIR}/spec_test_report.txt + exit 1 + fi + cd - + + echo -e "\nFinish spec tests" | tee -a ${REPORT_DIR}/spec_test_report.txt +} + +function wasi_test() +{ + echo "Now start wasi tests" + touch ${REPORT_DIR}/wasi_test_report.txt + + cd ${WORK_DIR}/../../wasi + [[ $1 != "aot" ]] && \ + python wasi_test.py --interpreter ${IWASM_CMD} ${SGX_OPT}\ + | tee ${REPORT_DIR}/wasi_test_report.txt \ + || \ + python wasi_test.py --aot --aot-compiler ${WAMRC_CMD} ${SGX_OPT}\ + --interpreter ${IWASM_CMD} \ + | tee ${REPORT_DIR}/wasi_test_report.txt + echo "Finish wasi tests" +} + +function wasi_certification_test() +{ + echo "Now start wasi certification tests" + + cd ${WORK_DIR} + if [ ! -d "wasi-testsuite" ]; then + echo "wasi not exist, clone it from github" + git clone -b prod/testsuite-all \ + --single-branch https://github.com/WebAssembly/wasi-testsuite.git + fi + cd wasi-testsuite + git reset --hard ${WASI_TESTSUITE_COMMIT} + + bash ../../wasi-test-script/run_wasi_tests.sh $1 $TARGET \ + | tee -a ${REPORT_DIR}/wasi_test_report.txt + ret=${PIPESTATUS[0]} + + if [[ ${ret} -ne 0 ]];then + echo -e "\nwasi tests FAILED" | tee -a ${REPORT_DIR}/wasi_test_report.txt + exit 1 + fi + echo -e "\nFinish wasi tests" | tee -a ${REPORT_DIR}/wasi_test_report.txt +} + +function polybench_test() +{ + echo "Now start polybench tests" + + cd ${WORK_DIR}/../polybench + if [[ $1 == "aot" || $1 == "jit" ]];then + ./build.sh AOT ${SGX_OPT} + ./test_aot.sh $1 ${SGX_OPT} + else + ./build.sh + ./test_interp.sh ${SGX_OPT} + fi + cp report.txt ${REPORT_DIR}/polybench_$1_test_report.txt + + echo "Finish polybench tests" +} + +function libsodium_test() +{ + echo "Now start libsodium tests" + + cd ${WORK_DIR}/../libsodium + if [[ $1 == "aot" || $1 == "jit" ]];then + ./build.sh ${SGX_OPT} + ./test_aot.sh $1 ${SGX_OPT} + else + ./test_interp.sh ${SGX_OPT} + fi + cp report.txt ${REPORT_DIR}/libsodium_$1_test_report.txt + + echo "Finish libsodium tests" +} + +function malformed_test() +{ + # build iwasm firstly + cd ${WORK_DIR}/../../malformed + ./malformed_test.py --run ${IWASM_CMD} | tee ${REPORT_DIR}/malfomed_$1_test_report.txt +} + +function collect_standalone() +{ + if [[ ${COLLECT_CODE_COVERAGE} == 1 ]]; then + pushd ${WORK_DIR} > /dev/null 2>&1 + + CODE_COV_FILE="" + if [[ -z "${CODE_COV_FILE}" ]]; then + CODE_COV_FILE="${WORK_DIR}/wamr.lcov" + else + CODE_COV_FILE="${CODE_COV_FILE}" + fi + + STANDALONE_DIR=${WORK_DIR}/../../standalone + + echo "Collect code coverage of standalone dump-call-stack" + ./collect_coverage.sh "${CODE_COV_FILE}" "${STANDALONE_DIR}/dump-call-stack/build" + echo "Collect code coverage of standalone dump-mem-profiling" + ./collect_coverage.sh "${CODE_COV_FILE}" "${STANDALONE_DIR}/dump-mem-profiling/build" + echo "Collect code coverage of standalone dump-perf-profiling" + ./collect_coverage.sh "${CODE_COV_FILE}" "${STANDALONE_DIR}/dump-perf-profiling/build" + if [[ $1 == "aot" ]]; then + echo "Collect code coverage of standalone pad-test" + ./collect_coverage.sh "${CODE_COV_FILE}" "${STANDALONE_DIR}/pad-test/build" + fi + echo "Collect code coverage of standalone test-invoke-native" + ./collect_coverage.sh "${CODE_COV_FILE}" "${STANDALONE_DIR}/test-invoke-native/build" + echo "Collect code coverage of standalone test-running-modes" + ./collect_coverage.sh "${CODE_COV_FILE}" "${STANDALONE_DIR}/test-running-modes/build" + echo "Collect code coverage of standalone test-running-modes/c-embed" + ./collect_coverage.sh "${CODE_COV_FILE}" "${STANDALONE_DIR}/test-running-modes/c-embed/build" + echo "Collect code coverage of standalone test-ts2" + ./collect_coverage.sh "${CODE_COV_FILE}" "${STANDALONE_DIR}/test-ts2/build" + + popd > /dev/null 2>&1 + fi +} + +function standalone_test() +{ + if [[ ${COLLECT_CODE_COVERAGE} == 1 ]]; then + export COLLECT_CODE_COVERAGE=1 + fi + + cd ${WORK_DIR}/../../standalone + + args="--$1" + + [[ ${SGX_OPT} == "--sgx" ]] && args="$args --sgx" || args="$args --no-sgx" + + [[ ${ENABLE_MULTI_THREAD} == 1 ]] && args="$args --thread" || args="$args --no-thread" + + [[ ${ENABLE_SIMD} == 1 ]] && args="$args --simd" || args="$args --no-simd" + + args="$args ${TARGET}" + + ./standalone.sh $args | tee ${REPORT_DIR}/standalone_$1_test_report.txt + + collect_standalone "$1" +} + +function build_iwasm_with_cfg() +{ + echo "Build iwasm with compile flags with " $* " for spec test" \ + | tee -a ${REPORT_DIR}/spec_test_report.txt + + if [[ ${SGX_OPT} == "--sgx" ]];then + cd ${WAMR_DIR}/product-mini/platforms/linux-sgx \ + && if [ -d build ]; then rm -rf build/*; else mkdir build; fi \ + && cd build \ + && cmake $* .. \ + && make -j 4 + cd ${WAMR_DIR}/product-mini/platforms/linux-sgx/enclave-sample \ + && make clean \ + && make SPEC_TEST=1 + else + cd ${WAMR_DIR}/product-mini/platforms/${PLATFORM} \ + && if [ -d build ]; then rm -rf build/*; else mkdir build; fi \ + && cd build \ + && cmake $* .. \ + && make -j 4 + fi + + if [ "$?" != 0 ];then + echo -e "build iwasm failed" + exit 1 + fi +} + +function build_wamrc() +{ + if [[ $TARGET == "ARMV7_VFP" || $TARGET == "THUMBV7_VFP" + || $TARGET == "RISCV32" || $TARGET == "RISCV32_ILP32" || $TARGET == "RISCV32_ILP32D" + || $TARGET == "RISCV64" || $TARGET == "RISCV64_LP64D" || $TARGET == "RISCV64_LP64" ]];then + echo "suppose wamrc is already built" + return + fi + + echo "Build wamrc for spec test under aot compile type" + cd ${WAMR_DIR}/wamr-compiler \ + && ./build_llvm.sh \ + && if [ -d build ]; then rm -r build/*; else mkdir build; fi \ + && cd build \ + && cmake .. -DCOLLECT_CODE_COVERAGE=${COLLECT_CODE_COVERAGE} \ + && make -j 4 +} + +### Need to add a test suite? +### The function name should be ${suite_name}_test +# function xxx_test() +# { +# +# } + +function collect_coverage() +{ + if [[ ${COLLECT_CODE_COVERAGE} == 1 ]]; then + ln -sf ${WORK_DIR}/../spec-test-script/collect_coverage.sh ${WORK_DIR} + + CODE_COV_FILE="" + if [[ -z "${CODE_COV_FILE}" ]]; then + CODE_COV_FILE="${WORK_DIR}/wamr.lcov" + else + CODE_COV_FILE="${CODE_COV_FILE}" + fi + + pushd ${WORK_DIR} > /dev/null 2>&1 + echo "Collect code coverage of iwasm" + ./collect_coverage.sh ${CODE_COV_FILE} ${IWASM_LINUX_ROOT_DIR}/build + if [[ $1 == "llvm-aot" ]]; then + echo "Collect code coverage of wamrc" + ./collect_coverage.sh ${CODE_COV_FILE} ${WAMR_DIR}/wamr-compiler/build + fi + for suite in "${TEST_CASE_ARR[@]}"; do + if [[ ${suite} = "unit" ]]; then + echo "Collect code coverage of unit test" + ./collect_coverage.sh ${CODE_COV_FILE} ${WORK_DIR}/unittest-build + break + fi + done + popd > /dev/null 2>&1 + else + echo "code coverage isn't collected" + fi +} + +function trigger() +{ + local EXTRA_COMPILE_FLAGS="" + # default enabled features + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_BULK_MEMORY=1" + + if [[ ${ENABLE_MULTI_MODULE} == 1 ]];then + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_MULTI_MODULE=1" + else + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_MULTI_MODULE=0" + fi + + if [[ ${ENABLE_MULTI_THREAD} == 1 ]];then + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_LIB_PTHREAD=1" + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_REF_TYPES=0" + else + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_REF_TYPES=1" + fi + + if [[ ${ENABLE_SIMD} == 1 ]]; then + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_SIMD=1" + else + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_SIMD=0" + fi + + if [[ ${ENABLE_GC} == 1 ]]; then + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_GC=1" + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_REF_TYPES=1" + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_BULK_MEMORY=1" + fi + + if [[ ${ENABLE_DEBUG_VERSION} == 1 ]]; then + EXTRA_COMPILE_FLAGS+=" -DCMAKE_BUILD_TYPE=Debug" + fi + + if [[ ${ENABLE_GC_HEAP_VERIFY} == 1 ]]; then + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_GC_HEAP_VERIFY=1" + fi + + if [[ ${ENABLE_WASI_THREADS} == 1 ]]; then + EXTRA_COMPILE_FLAGS+=" -DWAMR_BUILD_LIB_WASI_THREADS=1" + fi + + for t in "${TYPE[@]}"; do + case $t in + "classic-interp") + if [[ ${ENABLE_SIMD} == 1 ]]; then + echo "does not support SIMD in interp mode, bypass" + continue + fi + + echo "work in classic-interp mode" + # classic-interp + BUILD_FLAGS="$CLASSIC_INTERP_COMPILE_FLAGS $EXTRA_COMPILE_FLAGS" + if [[ ${ENABLE_QEMU} == 0 ]]; then + build_iwasm_with_cfg $BUILD_FLAGS + fi + for suite in "${TEST_CASE_ARR[@]}"; do + $suite"_test" classic-interp + done + collect_coverage classic-interp + ;; + + "fast-interp") + if [[ ${ENABLE_SIMD} == 1 ]]; then + echo "does not support SIMD in interp mode, bypass" + continue + fi + + echo "work in fast-interp mode" + # fast-interp + BUILD_FLAGS="$FAST_INTERP_COMPILE_FLAGS $EXTRA_COMPILE_FLAGS" + if [[ ${ENABLE_QEMU} == 0 ]]; then + build_iwasm_with_cfg $BUILD_FLAGS + fi + for suite in "${TEST_CASE_ARR[@]}"; do + $suite"_test" fast-interp + done + collect_coverage fast-interp + ;; + + "jit") + if [[ ${TARGET} == "X86_32" ]]; then + echo "does not support an X86_32 target in JIT mode, bypass" + continue + fi + + echo "work in orc jit eager compilation mode" + BUILD_FLAGS="$ORC_EAGER_JIT_COMPILE_FLAGS $EXTRA_COMPILE_FLAGS" + build_iwasm_with_cfg $BUILD_FLAGS + for suite in "${TEST_CASE_ARR[@]}"; do + $suite"_test" jit + done + collect_coverage llvm-jit + + echo "work in orc jit lazy compilation mode" + BUILD_FLAGS="$ORC_EAGER_JIT_COMPILE_FLAGS $EXTRA_COMPILE_FLAGS" + build_iwasm_with_cfg $BUILD_FLAGS + for suite in "${TEST_CASE_ARR[@]}"; do + $suite"_test" jit + done + collect_coverage llvm-jit + ;; + + "aot") + echo "work in aot mode" + # aot + BUILD_FLAGS="$AOT_COMPILE_FLAGS $EXTRA_COMPILE_FLAGS" + if [[ ${ENABLE_QEMU} == 0 ]]; then + build_iwasm_with_cfg $BUILD_FLAGS + fi + build_wamrc + for suite in "${TEST_CASE_ARR[@]}"; do + $suite"_test" aot + done + collect_coverage llvm-aot + ;; + + "fast-jit") + echo "work in fast-jit mode" + # fast-jit + BUILD_FLAGS="$FAST_JIT_COMPILE_FLAGS $EXTRA_COMPILE_FLAGS" + build_iwasm_with_cfg $BUILD_FLAGS + for suite in "${TEST_CASE_ARR[@]}"; do + $suite"_test" fast-jit + done + collect_coverage fast-jit + ;; + + "multi-tier-jit") + echo "work in multi-tier-jit mode" + # multi-tier-jit + BUILD_FLAGS="$MULTI_TIER_JIT_COMPILE_FLAGS $EXTRA_COMPILE_FLAGS" + build_iwasm_with_cfg $BUILD_FLAGS + for suite in "${TEST_CASE_ARR[@]}"; do + $suite"_test" multi-tier-jit + done + collect_coverage multi-tier-jit + ;; + + *) + echo "unexpected mode, do nothing" + ;; + esac + done +} + +# if collect code coverage, ignore -s, test all test cases. +if [[ $TEST_CASE_ARR ]];then + trigger || (echo "TEST FAILED"; exit 1) +else + # test all suite, ignore polybench and libsodium because of long time cost + TEST_CASE_ARR=("spec") + : ' + if [[ $COLLECT_CODE_COVERAGE == 1 ]];then + # add polybench if collecting code coverage data + TEST_CASE_ARR+=("polybench") + # add libsodium if needed, which takes long time to run + TEST_CASE_ARR+=("libsodium") + fi + ' + trigger || (echo "TEST FAILED"; exit 1) + # Add more suites here +fi + +echo -e "Test finish. Reports are under ${REPORT_DIR}" +DEBUG set +xv pipefail +echo "TEST SUCCESSFUL" +exit 0 |