• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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