1# Copyright (c) 2024 Huawei Device Co., Ltd. 2# Licensed under the Apache License, Version 2.0 (the "License"); 3# you may not use this file except in compliance with the License. 4# You may obtain a copy of the License at 5# 6# http://www.apache.org/licenses/LICENSE-2.0 7# 8# Unless required by applicable law or agreed to in writing, software 9# distributed under the License is distributed on an "AS IS" BASIS, 10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11# See the License for the specific language governing permissions and 12# limitations under the License. 13 14# now plugin tests with sanitizers triggers CI failure, which could not be reproduce locally, will be fixed in future 15if (PANDA_ENABLE_ADDRESS_SANITIZER OR PANDA_ENABLE_THREAD_SANITIZER) 16 return() 17endif() 18 19# how_to_test_mode 20set(COMPILE_MODE "COMPILE") 21set(RUNTIME_MODE "RUNTIME") 22set(EXPECTED_MODE "EXPECTED") 23 24# how_to_compile_mode 25set(LIBRARY_PLUGIN "LIB") 26set(EXECUTABLE_PLUGIN "EXE") 27 28set(PLUGIN_TESTS 29 #"test_name test_sts_file how_to_test_mode plugin_file_extension(c|cpp) how_to_compile_mode" 30 "e2p_test_plugin_dump_json compile.sts ${RUNTIME_MODE} c ${LIBRARY_PLUGIN}" 31 "e2p_test_plugin_ets_src compile.sts ${RUNTIME_MODE} c ${LIBRARY_PLUGIN}" 32 "e2p_test_plugin_ets_benchmark_test compile.sts ${RUNTIME_MODE} cpp ${LIBRARY_PLUGIN}" 33 # 20756 "e2p_test_plugin_ets_benchmark_with_checker_func_test compile.sts ${RUNTIME_MODE} cpp ${LIBRARY_PLUGIN}" 34 "e2p_test_plugin_ets_node_types compile.sts ${RUNTIME_MODE} c ${LIBRARY_PLUGIN}" 35 "e2p_test_plugin_ets_varibles_and_types compile.sts ${RUNTIME_MODE} c ${LIBRARY_PLUGIN}" 36 "e2p_test_plugin_change_func runtime_change_func_call.sts ${RUNTIME_MODE} cpp ${LIBRARY_PLUGIN}" 37 "e2p_test_plugin compile.sts ${EXPECTED_MODE} c ${LIBRARY_PLUGIN}" 38 "e2p_test_plugin_is compile.sts ${EXPECTED_MODE} c ${LIBRARY_PLUGIN}" 39 "plugin_proceed_to_state compile.sts ${EXPECTED_MODE} cpp ${EXECUTABLE_PLUGIN}" 40 "plugin_proceed_to_state_update_statements compile.sts ${RUNTIME_MODE} cpp ${EXECUTABLE_PLUGIN}" 41 "plugin_proceed_to_state_update_statements_lambda compile.sts ${RUNTIME_MODE} cpp ${EXECUTABLE_PLUGIN}" 42 "plugin_proceed_to_state_change_func runtime_change_func_call.sts ${RUNTIME_MODE} cpp ${EXECUTABLE_PLUGIN}" 43 "plugin_proceed_to_state_change_call_lambda compile.sts ${COMPILE_MODE} cpp ${EXECUTABLE_PLUGIN}" 44) 45 46set(RUNTIME_ARGUMENTS 47 --boot-panda-files=${PANDA_BINARY_ROOT}/plugins/ets/etsstdlib.abc${EXTRA_BOOT_PANDAFILES} 48 --load-runtimes=ets 49 --compiler-enable-jit=true 50) 51 52set(ENTRY_POINT ETSGLOBAL::main) 53 54foreach(TEST_DATA IN ITEMS ${PLUGIN_TESTS}) 55 string(REPLACE " " ";" TEST_DATA_ELEM "${TEST_DATA}") 56 list(GET TEST_DATA_ELEM 0 TEST_NAME) 57 list(GET TEST_DATA_ELEM 3 EXTENSION) 58 list(GET TEST_DATA_ELEM 4 PLUGIN_MODE) 59 if(${PLUGIN_MODE} STREQUAL ${LIBRARY_PLUGIN}) 60 panda_add_library(${TEST_NAME} SHARED ${TEST_NAME}.${EXTENSION}) 61 else() 62 panda_add_executable(${TEST_NAME} ${TEST_NAME}.${EXTENSION} OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 63 panda_add_sanitizers(TARGET ${TEST_NAME} SANITIZERS ${PANDA_SANITIZERS_LIST}) 64 endif() 65 panda_target_include_directories(${TEST_NAME} 66 PRIVATE "${ES2PANDA_PATH}" 67 PRIVATE ${OUTPUT_DIR} 68 ) 69 panda_target_link_libraries(${TEST_NAME} es2panda-public) 70endforeach() 71 72add_custom_target(es2panda-plugin-test) 73 74foreach(TEST_DATA IN ITEMS ${PLUGIN_TESTS}) 75 string(REPLACE " " ";" TEST_DATA_ELEM "${TEST_DATA}") 76 list(GET TEST_DATA_ELEM 0 TEST_NAME) 77 list(GET TEST_DATA_ELEM 1 TEST_STS_FILE) 78 list(GET TEST_DATA_ELEM 2 TEST_MODE) 79 list(GET TEST_DATA_ELEM 4 PLUGIN_MODE) 80 if(${PLUGIN_MODE} STREQUAL ${LIBRARY_PLUGIN}) 81 add_custom_target(es2panda-plugin-test-compile-${TEST_NAME} 82 COMMAND ${CMAKE_COMMAND} -E env 83 LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX} $<TARGET_FILE:es2panda> 84 --plugins=${TEST_NAME} --extension=sts --output="${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.abc" 85 "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_STS_FILE}" > "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.out" 86 ) 87 endif() 88 if(${PLUGIN_MODE} STREQUAL ${EXECUTABLE_PLUGIN}) 89 add_custom_target(es2panda-plugin-test-compile-${TEST_NAME} 90 COMMAND ${CMAKE_COMMAND} -E env 91 LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX} 92 ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME} $<TARGET_FILE:es2panda> 93 --extension=sts --output="${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.abc" 94 "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_STS_FILE}" > "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.out" 95 ) 96 endif() 97 add_dependencies(es2panda-plugin-test-compile-${TEST_NAME} es2panda ${TEST_NAME} es2panda-lib) 98 if(${TEST_MODE} STREQUAL ${EXPECTED_MODE}) 99 add_custom_target(es2panda-plugin-test-expected-${TEST_NAME} 100 COMMAND ${CMAKE_COMMAND} -E compare_files 101 "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.out" "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_NAME}-expected.txt" 102 ) 103 add_dependencies(es2panda-plugin-test-expected-${TEST_NAME} es2panda-plugin-test-compile-${TEST_NAME} es2panda-lib) 104 add_dependencies(es2panda-plugin-test es2panda-plugin-test-expected-${TEST_NAME}) 105 endif() 106 if(${TEST_MODE} STREQUAL ${RUNTIME_MODE}) 107 add_custom_target(es2panda-plugin-test-runtime-${TEST_NAME} 108 COMMAND ${CMAKE_COMMAND} -E env 109 LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX} $<TARGET_FILE:ark> 110 ${RUNTIME_ARGUMENTS} "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.abc" ${ENTRY_POINT} 111 > "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}-runtime.out" 112 ) 113 add_dependencies(es2panda-plugin-test-runtime-${TEST_NAME} es2panda-plugin-test-compile-${TEST_NAME} ark es2panda-lib) 114 add_dependencies(es2panda-plugin-test es2panda-plugin-test-runtime-${TEST_NAME}) 115 endif() 116 if(${TEST_MODE} STREQUAL ${COMPILE_MODE}) 117 add_dependencies(es2panda-plugin-test es2panda-plugin-test-compile-${TEST_NAME}) 118 endif() 119endforeach() 120 121add_custom_target(update-es2panda-plugin-test-expected) 122 123foreach(TEST_DATA IN ITEMS ${PLUGIN_TESTS}) 124 string(REPLACE " " ";" TEST_DATA_ELEM "${TEST_DATA}") 125 list(GET TEST_DATA_ELEM 0 TEST_NAME) 126 list(GET TEST_DATA_ELEM 1 TEST_STS_FILE) 127 list(GET TEST_DATA_ELEM 2 TEST_MODE) 128 list(GET TEST_DATA_ELEM 4 PLUGIN_MODE) 129 if(${TEST_MODE} STREQUAL ${EXPECTED_MODE}) 130 if(${PLUGIN_MODE} STREQUAL ${LIBRARY_PLUGIN}) 131 add_custom_target(update-es2panda-plugin-test-expected-${TEST_NAME} 132 COMMAND ${CMAKE_COMMAND} -E env 133 LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX} $<TARGET_FILE:es2panda> 134 --plugins=${TEST_NAME} --extension=sts "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_STS_FILE}" > 135 "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_NAME}-expected.txt") 136 else() 137 add_custom_target(update-es2panda-plugin-test-expected-${TEST_NAME} 138 COMMAND ${CMAKE_COMMAND} -E env 139 LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX} 140 ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME} $<TARGET_FILE:es2panda> 141 "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_STS_FILE}" > 142 "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_NAME}-expected.txt") 143 endif() 144 add_dependencies(update-es2panda-plugin-test-expected-${TEST_NAME} es2panda ${TEST_NAME} es2panda-lib) 145 add_dependencies(update-es2panda-plugin-test-expected update-es2panda-plugin-test-expected-${TEST_NAME}) 146 endif() 147endforeach() 148 149add_dependencies(es2panda_tests es2panda-plugin-test) 150