From 231040a727da5c5d5ed10a3259d4e720aef1f818 Mon Sep 17 00:00:00 2001 From: Rokashevich Svetlana Date: Sun, 10 Aug 2025 17:27:27 +0800 Subject: [PATCH] Add force rebuild option Issue: https://gitee.com/openharmony/arkcompiler_runtime_core/issues/ICSFO0 Signed-off-by: Rokashevich Svetlana Change-Id: Ica9acf47030c931647ad08381c24208abd247227 --- ets2panda/CMakeLists.txt | 15 +++- ets2panda/aot/CMakeLists.txt | 2 +- ets2panda/bindings/native/CMakeLists.txt | 4 +- ets2panda/cmake/PandaCmakeFunctions.cmake | 31 +++++++ ets2panda/declgen_ets2ts/CMakeLists.txt | 2 +- .../driver/dependency_analyzer/CMakeLists.txt | 4 +- ets2panda/lsp/CMakeLists.txt | 5 +- ets2panda/public/CMakeLists.txt | 2 +- ets2panda/test/unit/declgen/CMakeLists.txt | 87 +++++++++++++++++++ ets2panda/test/unit/plugin/CMakeLists.txt | 4 +- ets2panda/test/unit/plugin_ut/CMakeLists.txt | 2 +- 11 files changed, 146 insertions(+), 12 deletions(-) create mode 100644 ets2panda/cmake/PandaCmakeFunctions.cmake create mode 100644 ets2panda/test/unit/declgen/CMakeLists.txt diff --git a/ets2panda/CMakeLists.txt b/ets2panda/CMakeLists.txt index b615d8f125..2ae469b045 100644 --- a/ets2panda/CMakeLists.txt +++ b/ets2panda/CMakeLists.txt @@ -14,10 +14,23 @@ cmake_minimum_required (VERSION 3.5.0) include(cmake/coverage.cmake) +include(cmake/PandaCmakeFunctions.cmake) project (es2panda) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +# ----- Aliases ---------------------------------------------------------------- + +add_custom_target(frontend_bins COMMENT "Build all common frontend binaries") +add_dependencies(frontend_bins + es2panda + es2panda-lib + es2panda-public + dependency_analyzer + dependency_analyzer_lib + declgen_ets2ts +) + set(ES2PANDA_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) set(ES2PANDA_BINARY_ROOT ${CMAKE_CURRENT_BINARY_DIR}) @@ -660,7 +673,7 @@ set(ES2PANDA_LIB_SRC # libes2panda does not include bytecode optimizer, because it is used in # libarkruntime, and conflict with JIT setup ensues -panda_add_library(es2panda-lib ${PANDA_DEFAULT_LIB_TYPE} ${ES2PANDA_LIB_SRC}) +panda_frontend_add_library(es2panda-lib ${PANDA_DEFAULT_LIB_TYPE} ${ES2PANDA_LIB_SRC}) add_dependencies(es2panda-lib isa_gen_es2panda es2panda_options_gen es2panda_diagnostic_gen es2panda_keywords es2panda_signatures) set(ICU_INCLUDE_DIRS diff --git a/ets2panda/aot/CMakeLists.txt b/ets2panda/aot/CMakeLists.txt index 5da24a781a..b0fccc82c7 100644 --- a/ets2panda/aot/CMakeLists.txt +++ b/ets2panda/aot/CMakeLists.txt @@ -15,7 +15,7 @@ set(ES2PANDA_AOT_SRC main.cpp ) -panda_add_executable(es2panda ${ES2PANDA_AOT_SRC}) +panda_frontend_add_executable(es2panda ${ES2PANDA_AOT_SRC}) panda_target_link_libraries(es2panda es2panda-public es2panda-lib arkassembler arkbytecodeopt) panda_target_include_directories(es2panda PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) panda_target_include_directories(es2panda PRIVATE ${OUTPUT_DIR}) diff --git a/ets2panda/bindings/native/CMakeLists.txt b/ets2panda/bindings/native/CMakeLists.txt index 60dcbb51de..223ee8eef2 100644 --- a/ets2panda/bindings/native/CMakeLists.txt +++ b/ets2panda/bindings/native/CMakeLists.txt @@ -27,7 +27,7 @@ function(panda_add_node_library TARGET) set(ARG_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/bindings) endif() - panda_add_library(${TARGET} SHARED ${ARG_SOURCES}) + panda_frontend_add_library(${TARGET} SHARED ${ARG_SOURCES}) panda_target_link_libraries(${TARGET} ${ARG_LIBRARIES}) if(PANDA_TARGET_OHOS) @@ -99,6 +99,8 @@ panda_add_node_library(${NAPI_BINDINGS_LIB} OUTPUT_SUFFIX ".node" ) +add_dependencies(frontend_bins ${NAPI_BINDINGS_LIB}) + panda_target_include_directories(${NAPI_BINDINGS_LIB} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include SYSTEM PRIVATE ${NAPI_HEADERS_PATH} diff --git a/ets2panda/cmake/PandaCmakeFunctions.cmake b/ets2panda/cmake/PandaCmakeFunctions.cmake new file mode 100644 index 0000000000..a698304d3a --- /dev/null +++ b/ets2panda/cmake/PandaCmakeFunctions.cmake @@ -0,0 +1,31 @@ +# Copyright (c) 2025 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# 32-bits pointers optimization in Panda for objects => addresses usage low 4GB +# We need use linker scripts for section replacement above 4GB +# Note: AddressSanitizer reserves (mmap) addresses for its own needs, +# so we have difference start addresses for asan and default buildings + +function(panda_frontend_add_executable target) + if(PANDA_FRONTEND_BUILD) + set(ARGV "${ARGV};FORCE_REBUILD") + endif() + panda_add_executable(${ARGV}) +endfunction() + +function(panda_frontend_add_library target) + if(PANDA_FRONTEND_BUILD) + set(ARGV "${ARGV};FORCE_REBUILD") + endif() + panda_add_library(${ARGV}) +endfunction() diff --git a/ets2panda/declgen_ets2ts/CMakeLists.txt b/ets2panda/declgen_ets2ts/CMakeLists.txt index 6d0687fa1d..0b981072a9 100644 --- a/ets2panda/declgen_ets2ts/CMakeLists.txt +++ b/ets2panda/declgen_ets2ts/CMakeLists.txt @@ -21,7 +21,7 @@ set(DECLGEN_ETS2TS_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/.. ) -panda_add_executable(declgen_ets2ts ${DECLGEN_ETS2TS_SRC}) +panda_frontend_add_executable(declgen_ets2ts ${DECLGEN_ETS2TS_SRC}) panda_target_link_libraries(declgen_ets2ts es2panda-public es2panda-lib arkassembler arkbytecodeopt) panda_target_include_directories(declgen_ets2ts PRIVATE ${DECLGEN_ETS2TS_INCLUDE_DIRS}) panda_target_compile_options(declgen_ets2ts PRIVATE -fexceptions) diff --git a/ets2panda/driver/dependency_analyzer/CMakeLists.txt b/ets2panda/driver/dependency_analyzer/CMakeLists.txt index 7801000201..69bf897aeb 100644 --- a/ets2panda/driver/dependency_analyzer/CMakeLists.txt +++ b/ets2panda/driver/dependency_analyzer/CMakeLists.txt @@ -15,9 +15,9 @@ set(DEP_ANALYZER_SRC dep_analyzer.cpp ) -panda_add_executable(dependency_analyzer main.cpp) +panda_frontend_add_executable(dependency_analyzer main.cpp) -panda_add_library(dependency_analyzer_lib ${PANDA_DEFAULT_LIB_TYPE} ${DEP_ANALYZER_SRC}) +panda_frontend_add_library(dependency_analyzer_lib ${PANDA_DEFAULT_LIB_TYPE} ${DEP_ANALYZER_SRC}) panda_target_link_libraries(dependency_analyzer_lib es2panda-public es2panda-lib arkassembler) panda_target_include_directories(dependency_analyzer_lib PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/ets2panda/lsp/CMakeLists.txt b/ets2panda/lsp/CMakeLists.txt index 73c5561cbb..5639e4a98d 100644 --- a/ets2panda/lsp/CMakeLists.txt +++ b/ets2panda/lsp/CMakeLists.txt @@ -72,7 +72,8 @@ set(ES2PANDA_LSP_SRC ./src/get_name_or_dotted_name_span.cpp ) -panda_add_library(${LSP_LIB} SHARED ${ES2PANDA_LSP_SRC}) +panda_frontend_add_library(${LSP_LIB} SHARED ${ES2PANDA_LSP_SRC}) +add_dependencies(frontend_bins ${LSP_LIB}) panda_target_include_directories(${LSP_LIB} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include @@ -81,7 +82,7 @@ panda_target_include_directories(${LSP_LIB} ) panda_target_compile_options(${LSP_LIB} - PRIVATE -fexceptions -Werror=shadow + PRIVATE -fexceptions -Werror=shadow -Wno-return-type-c-linkage ) panda_target_link_libraries(${LSP_LIB} diff --git a/ets2panda/public/CMakeLists.txt b/ets2panda/public/CMakeLists.txt index 12227ac6fe..09d032a98e 100644 --- a/ets2panda/public/CMakeLists.txt +++ b/ets2panda/public/CMakeLists.txt @@ -630,7 +630,7 @@ set(ES2PANDA_PUBLIC_SOURCES ) -panda_add_library(es2panda-public ${PANDA_DEFAULT_LIB_TYPE} ${ES2PANDA_PUBLIC_SOURCES}) +panda_frontend_add_library(es2panda-public ${PANDA_DEFAULT_LIB_TYPE} ${ES2PANDA_PUBLIC_SOURCES}) add_dependencies(es2panda-lib gen_api) add_dependencies(es2panda-public es2panda-lib) diff --git a/ets2panda/test/unit/declgen/CMakeLists.txt b/ets2panda/test/unit/declgen/CMakeLists.txt new file mode 100644 index 0000000000..26a2ab75ad --- /dev/null +++ b/ets2panda/test/unit/declgen/CMakeLists.txt @@ -0,0 +1,87 @@ +# Copyright (c) 2025 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if (PANDA_ENABLE_ADDRESS_SANITIZER OR PANDA_ENABLE_THREAD_SANITIZER) + return() +endif() + +set(COMMON_SOURCE_FILES + "util.cpp" +) + +set(DECLGEN_PLUGIN_TESTS + "test_ets2ts_isolated_declgen cpp" +) + +set(ETS2TS_ISOLATED_TESTS + "./ets2ts_isolated/test_ets2ts_isolated_class.ets" + "./ets2ts_isolated/test_ets2ts_isolated_enum.ets" + "./ets2ts_isolated/test_ets2ts_isolated_module.ets" + "./ets2ts_isolated/test_ets2ts_isolated_namespace.ets" + "./ets2ts_isolated/test_ets2ts_isolated_interface.ets" + "./ets2ts_isolated/test_ets2ts_isolated_function_with_optional_parameter.ets" + "./ets2ts_isolated/test_ets2ts_infer_function_return_type_with_import_symbol.ets" +) + +foreach(TEST_DATA IN ITEMS ${DECLGEN_PLUGIN_TESTS}) + string(REPLACE " " ";" TEST_DATA_ELEM "${TEST_DATA}") + list(GET TEST_DATA_ELEM 0 TEST_NAME) + list(GET TEST_DATA_ELEM 1 EXTENSION) + + panda_frontend_add_executable(${TEST_NAME} ${TEST_NAME}.${EXTENSION} ${COMMON_SOURCE_FILES} OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + panda_add_sanitizers(TARGET ${TEST_NAME} SANITIZERS ${PANDA_SANITIZERS_LIST}) + + panda_target_include_directories(${TEST_NAME} + PRIVATE ${ES2PANDA_PATH} + PRIVATE ${PANDA_ROOT}/assembler + PRIVATE ${OUTPUT_DIR} + PUBLIC ${CMAKE_CURRENT_BINARY_DIR} + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} + PUBLIC ${CMAKE_SOURCE_DIR}/libpandabase + PUBLIC ${CMAKE_SOURCE_DIR}/runtime + PUBLIC ${CMAKE_BINARY_DIR}/libpandabase + ${CMAKE_BINARY_DIR} + ) + panda_target_link_libraries(${TEST_NAME} es2panda-public arkassembler arkbase arkfile) +endforeach() + +add_custom_target(es2panda-declgen-plugin-test) + +set(ETS2TS "ets2ts_isolated") +foreach(TEST_DATA IN ITEMS ${DECLGEN_PLUGIN_TESTS}) + string(REPLACE " " ";" TEST_DATA_ELEM "${TEST_DATA}") + list(GET TEST_DATA_ELEM 0 TEST_NAME) + list(GET TEST_DATA_ELEM 1 EXTENSION) + foreach(TEST_ETS_FILE IN ITEMS ${ETS2TS_ISOLATED_TESTS}) + cmake_path(SET PATH_ITEM "${TEST_ETS_FILE}") + cmake_path(GET PATH_ITEM STEM FILE_NAME) + add_custom_target(es2panda-declgen-plugin-test-compile-${FILE_NAME} + COMMAND ${CMAKE_COMMAND} -E env + LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${PANDA_RUN_PREFIX} + ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME} $ + --extension=ets --ets-unnamed --output="${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.abc" + "${CMAKE_CURRENT_SOURCE_DIR}/${TEST_ETS_FILE}" > "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.out" 2>&1 + ) + add_dependencies(es2panda-declgen-plugin-test-compile-${FILE_NAME} es2panda ${TEST_NAME} es2panda-lib) + add_dependencies(es2panda-declgen-plugin-test es2panda-declgen-plugin-test-compile-${FILE_NAME}) + + add_custom_target(es2panda-declgen-plugin-test-expected-${FILE_NAME} + COMMAND ${CMAKE_COMMAND} -E compare_files + "${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.d.ets" "${CMAKE_CURRENT_SOURCE_DIR}/${ETS2TS}/${FILE_NAME}-expected.txt" + ) + add_dependencies(es2panda-declgen-plugin-test-expected-${FILE_NAME} es2panda-declgen-plugin-test-compile-${FILE_NAME} es2panda-lib) + add_dependencies(es2panda-declgen-plugin-test es2panda-declgen-plugin-test-expected-${FILE_NAME}) + endforeach() +endforeach() + +add_dependencies(es2panda_tests es2panda-declgen-plugin-test) \ No newline at end of file diff --git a/ets2panda/test/unit/plugin/CMakeLists.txt b/ets2panda/test/unit/plugin/CMakeLists.txt index fd18ff92dd..784487958d 100644 --- a/ets2panda/test/unit/plugin/CMakeLists.txt +++ b/ets2panda/test/unit/plugin/CMakeLists.txt @@ -128,9 +128,9 @@ foreach(TEST_DATA IN ITEMS ${PLUGIN_TESTS}) list(GET TEST_DATA_ELEM 3 EXTENSION) list(GET TEST_DATA_ELEM 4 PLUGIN_MODE) if(${PLUGIN_MODE} STREQUAL ${LIBRARY_PLUGIN}) - panda_add_library(${TEST_NAME} SHARED ${TEST_NAME}.${EXTENSION} ${COMMON_SOURCE_FILES}) + panda_frontend_add_library(${TEST_NAME} SHARED ${TEST_NAME}.${EXTENSION} ${COMMON_SOURCE_FILES}) else() - panda_add_executable(${TEST_NAME} ${TEST_NAME}.${EXTENSION} ${COMMON_SOURCE_FILES} OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + panda_frontend_add_executable(${TEST_NAME} ${TEST_NAME}.${EXTENSION} ${COMMON_SOURCE_FILES} OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) panda_add_sanitizers(TARGET ${TEST_NAME} SANITIZERS ${PANDA_SANITIZERS_LIST}) endif() panda_target_include_directories(${TEST_NAME} diff --git a/ets2panda/test/unit/plugin_ut/CMakeLists.txt b/ets2panda/test/unit/plugin_ut/CMakeLists.txt index d71a3104c2..4e3c3607fe 100644 --- a/ets2panda/test/unit/plugin_ut/CMakeLists.txt +++ b/ets2panda/test/unit/plugin_ut/CMakeLists.txt @@ -49,7 +49,7 @@ foreach(TEST_DATA IN ITEMS ${PLUGIN_UT_TESTS}) list(GET TEST_DATA_ELEM 0 TEST_NAME) list(GET TEST_DATA_ELEM 3 EXTENSION) - panda_add_executable(${TEST_NAME} ${TEST_NAME}.${EXTENSION} ${COMMON_SOURCE_FILES} OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + panda_frontend_add_executable(${TEST_NAME} ${TEST_NAME}.${EXTENSION} ${COMMON_SOURCE_FILES} OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) panda_add_sanitizers(TARGET ${TEST_NAME} SANITIZERS ${PANDA_SANITIZERS_LIST}) panda_target_include_directories(${TEST_NAME} -- Gitee