1# Copyright (c) 2021-2022 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 14add_custom_target(checked_tests COMMENT "Running tests with checkers") 15add_dependencies(checked_tests ark) 16 17# Unit tests checker.rb script. 18if (PANDA_WITH_TESTS AND PANDA_TARGET_AMD64) 19 set(CHECKER_UNIT_TESTS_DIR "${CMAKE_CURRENT_BINARY_DIR}/unit_tests") 20 file(MAKE_DIRECTORY ${CHECKER_UNIT_TESTS_DIR}) 21 add_custom_target(checker_unit_tests COMMENT "Checker tests" 22 COMMAND /usr/bin/env ruby ${CMAKE_CURRENT_SOURCE_DIR}/checker_tests.rb 23 WORKING_DIRECTORY ${CHECKER_UNIT_TEST_DIR} 24 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/checker_tests.rb) 25 add_dependencies(tests checker_unit_tests) 26endif() 27 28function(compile_file) 29 set(prefix ARG) 30 set(singleValues FILE OUTPUT_FILE WORKING_DIR) 31 cmake_parse_arguments(${prefix} "" "${singleValues}" "${multiValues}" ${ARGN}) 32 33 # Compile assembly file 34 add_custom_command(OUTPUT "${ARG_OUTPUT_FILE}" 35 COMMENT "Building ${TEST_NAME}" 36 COMMAND ${PANDA_RUN_PREFIX} $<TARGET_FILE:ark_asm> --log-file ${BUILD_LOG} ${ARG_FILE} ${ARG_OUTPUT_FILE} 37 DEPENDS ${assembler} "${ARG_FILE}" 38 WORKING_DIRECTORY "${ARG_WORKING_DIR}") 39endfunction() 40 41function(panda_add_checked_test) 42 set(prefix ARG) 43 set(singleValues NAME FILE SUPPORT_RELEASE) 44 set(multiValues AUX_FILES EXT_FILES) 45 cmake_parse_arguments(${prefix} "" "${singleValues}" "${multiValues}" ${ARGN}) 46 47 # Events work only in Debug mode 48 if (NOT DEFINED ARG_SUPPORT_RELEASE AND NOT ${CMAKE_BUILD_TYPE} MATCHES "Debug") 49 return() 50 endif() 51 52 if ("${ARG_NAME}" STREQUAL "") 53 get_filename_component(TEST_NAME "${ARG_FILE}" NAME_WE) 54 set(TEST_NAME "${TEST_NAME}.checked") 55 else() 56 set(TEST_NAME "${ARG_NAME}.checked") 57 endif() 58 set(CHECKER "${CMAKE_CURRENT_SOURCE_DIR}/checker.rb") 59 set(TEST_DIR "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}") 60 set(BINARY_FILE "${TEST_DIR}/test.abc") 61 set(BUILD_LOG "${TEST_DIR}/build.log") 62 63 if (NOT DEFINED ARG_FILE) 64 message(FATAL_ERROR "Mandatory FILE argument is not defined.") 65 endif() 66 67 file(MAKE_DIRECTORY "${TEST_DIR}") 68 69 set(stdlibs "${arkstdlib_BINARY_DIR}/arkstdlib.abc") 70 set(spaces "core") 71 72 compile_file(FILE ${ARG_FILE} OUTPUT_FILE ${BINARY_FILE} WORKING_DIR ${TEST_DIR}) 73 74 set(EXT_FILES "") 75 foreach(APP_FILE ${ARG_EXT_FILES}) 76 get_filename_component(APP_FILE_BASE "${APP_FILE}" NAME_WE) 77 set(APP_FILE_OUTPUT "${TEST_DIR}/${APP_FILE_BASE}.bin") 78 compile_file(FILE ${APP_FILE} OUTPUT_FILE "${APP_FILE_OUTPUT}" WORKING_DIR ${TEST_DIR}) 79 # TODO(msherstennikov): pass external files via --app-panda-files (now it doesn't work) 80 list(APPEND stdlibs "${APP_FILE_OUTPUT}") 81 list(APPEND EXT_FILES "${APP_FILE_OUTPUT}") 82 endforeach() 83 84 string(REPLACE ";" ":" boot_stdlibs "${stdlibs}") 85 string(REPLACE ";" ":" boot_spaces "${spaces}") 86 87 get_filename_component(TEST_TYPE "${ARG_FILE}" EXT) 88 set(COMMAND_TOKEN "#!") 89 90 set(OPTIONS "--boot-panda-files" 91 "${boot_stdlibs}" 92 "--load-runtimes=${boot_spaces}") 93 94 if (NOT ${CMAKE_BUILD_TYPE} MATCHES "Debug") 95 set(RELEASE_OPT "--release") 96 endif() 97 98 # ARCHITECTURE need to skip PAOC tests for arm32 99 if (PANDA_TARGET_AMD64) 100 set(ARCHITECTURE "x64") 101 elseif (PANDA_TARGET_ARM64) 102 set(ARCHITECTURE "arm64") 103 else() 104 set(ARCHITECTURE "arm32") 105 endif() 106 107 # Run checker 108 add_custom_target(${TEST_NAME} 109 COMMAND ${CHECKER} --source ${ARG_FILE} 110 --panda $<TARGET_FILE:ark> 111 --paoc $<TARGET_FILE:ark_aot> 112 --run-prefix \"${PANDA_RUN_PREFIX}\" 113 --test-file ${BINARY_FILE} 114 --panda-options \"${OPTIONS}\" 115 --paoc-options \"${OPTIONS}\" 116 --command-token \"${COMMAND_TOKEN}\" 117 --arch ${ARCHITECTURE} 118 ${RELEASE_OPT} 119 WORKING_DIRECTORY ${TEST_DIR} 120 COMMENT "Running ${TEST_NAME} checked test" 121 DEPENDS ${BINARY_FILE} ${EXT_FILES}) 122 123 add_dependencies(checked_tests ${TEST_NAME}) 124 125 foreach(AUX_FILE ${ARG_AUX_FILES}) 126 get_filename_component(AUX_NAME "${AUX_FILE}" NAME_WE) 127 set(AUX_NAME "${AUX_NAME}.checked") 128 add_dependencies(${TEST_NAME} ${AUX_NAME}) 129 endforeach() 130 131endfunction() 132 133# Disable checked tests with sanitizers for arm64, since it takes too long time running on qemu. 134if (PANDA_TARGET_AMD64 OR (PANDA_TARGET_ARM64 AND NOT PANDA_ENABLE_ADDRESS_SANITIZER AND NOT PANDA_ENABLE_THREAD_SANITIZER)) 135 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/aot.pa) 136 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/const_array_test.pa) 137 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/disable_intrinsics.pa) 138 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/ldarray_obj.pa) 139 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/float_zero.pa) 140 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/inline_external.pa) 141 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/irreducible_loop_test.pa) 142 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/monitor.pa) 143 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/basics_aot.pa) 144 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/ref_check_elim_test.pa) 145 panda_add_checked_test(NAME verify_aot_tests_file1 FILE ${CMAKE_CURRENT_SOURCE_DIR}/verify_aot_tests/file1/test.pa) 146 panda_add_checked_test(NAME verify_aot_tests_file2 FILE ${CMAKE_CURRENT_SOURCE_DIR}/verify_aot_tests/file2/test.pa) 147 if (NOT PANDA_PRODUCT_BUILD) 148 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/tlab_test.pa) 149 endif() 150 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/aot_cha.pa AUX_FILES basics_aot.pa) 151 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/inline.pa AUX_FILES inline_external.pa) 152 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/verify_aot_tests/verify_aot_test.pa AUX_FILES verify_aot_tests_file1 verify_aot_tests_file2) 153 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/zero_const_in_save_state.pa) 154endif() 155 156panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/implicit_nullcheck_tests.pa) 157panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/parameter_test.pa SUPPORT_RELEASE true) 158panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/stack_overflow.pa SUPPORT_RELEASE true) 159 160panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/disasm_and_log_demo.pa) 161if (PANDA_COMPILER_TARGET_AARCH64 AND PANDA_COMPILER_TARGET_AARCH32) 162 panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/cross_peephole.pa) 163endif() 164panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/ifcvt.pa) 165#Test for issues 1376 and 1413 166panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/remove_redundant_checks.pa) 167panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/deoptimize_compare.pa) 168 169panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/cast_bool.pa) 170panda_add_checked_test(FILE ${CMAKE_CURRENT_SOURCE_DIR}/compare_lenarray_with_zero.pa) 171