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
14set(SRC_DIR "${CMAKE_CURRENT_BINARY_DIR}/src")
15set(COMPILED_DIR "${CMAKE_CURRENT_BINARY_DIR}/compiled")
16make_directory(${SRC_DIR})
17make_directory(${COMPILED_DIR})
18
19set(DUMPER_TESTS
20    ${ES2PANDA_PATH}/test/runtime/ets/OptionalChains.sts
21    ${ES2PANDA_PATH}/test/runtime/ets/AccessFannkuch.sts
22    ${ES2PANDA_PATH}/test/runtime/ets/DeclareFunction.sts
23    ${ES2PANDA_PATH}/test/runtime/ets/Override-1.sts
24    ${ES2PANDA_PATH}/test/runtime/ets/TypeInferObject1.sts
25)
26
27add_custom_target(test-src-dumper)
28add_dependencies(es2panda_tests test-src-dumper)
29
30function(add_test_src_dumper_target FILE_PATH)
31
32    get_filename_component(FILE_NAME "${FILE_PATH}" NAME)
33    get_filename_component(FILE_NAME_WE "${FILE_PATH}" NAME_WE)
34
35    set(NEW_TARGET_NAME test-src-dumper-${FILE_NAME_WE})
36
37    string(REGEX REPLACE "[^a-zA-Z0-9_-]" "_" NEW_TARGET_NAME ${NEW_TARGET_NAME})
38
39    add_custom_target(${NEW_TARGET_NAME}
40        COMMENT "Dumping and compiling dumped: ${FILE_NAME}"
41
42        COMMAND cp -rf ${FILE_PATH} ${SRC_DIR}/${FILE_NAME}
43
44        COMMAND ${CMAKE_COMMAND} -E env
45            ${PANDA_RUN_PREFIX} $<TARGET_FILE:es2panda>
46            --dump-ets-src-after-phases plugins-after-parse --output "${COMPILED_DIR}/${FILE_NAME_WE}.abc"
47            "${FILE_PATH}" > "${SRC_DIR}/${FILE_NAME_WE}_dumped.sts"
48
49        COMMAND sed -i '1d' "${SRC_DIR}/${FILE_NAME_WE}_dumped.sts"
50
51        COMMAND ${CMAKE_COMMAND} -E env
52            ${PANDA_RUN_PREFIX} $<TARGET_FILE:es2panda>
53            --output "${COMPILED_DIR}/${FILE_NAME_WE}_dumped.abc"
54            "${SRC_DIR}/${FILE_NAME_WE}_dumped.sts"
55    )
56
57    add_dependencies(${NEW_TARGET_NAME} es2panda)
58    add_dependencies(test-src-dumper ${NEW_TARGET_NAME})
59
60endfunction()
61
62
63foreach(TEST_PATH IN LISTS DUMPER_TESTS)
64    add_test_src_dumper_target(${TEST_PATH})
65endforeach()
66