diff --git a/ets2panda/CMakeLists.txt b/ets2panda/CMakeLists.txt index 9ea3c3f73aa6b4fa696d2c0ad6d614db618e817c..30cae66ddec7250e2afcbd3cc7d5fc6c099740ed 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}) @@ -669,7 +682,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 5da24a781ac5ae19b637f3d8eb2023e9c670a584..b0fccc82c774b5423d550b2f69c6c8f5bb94e75f 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 60dcbb51deb07e07eb70997d893412ccc8075766..223ee8eef2cd5a5a3bb3c7f8f216bac304d693e1 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 0000000000000000000000000000000000000000..a698304d3a14ad355e84b3c942b593317a7b0441 --- /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 994c760889998db0613097afecd940ef98bd54be..2fc43f2779854e9df6f9f4f4de3964567e7bb4b6 100644 --- a/ets2panda/declgen_ets2ts/CMakeLists.txt +++ b/ets2panda/declgen_ets2ts/CMakeLists.txt @@ -22,7 +22,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 9a5380dd87a1bf96fbee1d80963793e378721a11..c00a99b5ae83a5ee02b65a5df239c18ec8bac9ba 100644 --- a/ets2panda/driver/dependency_analyzer/CMakeLists.txt +++ b/ets2panda/driver/dependency_analyzer/CMakeLists.txt @@ -17,9 +17,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 0126ccf9b1593baf081b0844b0194678b62c1435..0367fd7309348582859bd2cb7556bcced7daf727 100644 --- a/ets2panda/lsp/CMakeLists.txt +++ b/ets2panda/lsp/CMakeLists.txt @@ -131,8 +131,9 @@ set(ES2PANDA_LSP_SRC ./src/get_node.cpp ) -panda_add_library(${LSP_LIB} SHARED ${ES2PANDA_LSP_SRC}) +panda_frontend_add_library(${LSP_LIB} SHARED ${ES2PANDA_LSP_SRC}) add_dependencies(${LSP_LIB} es2panda_code_fix_register_gen) +add_dependencies(frontend_bins ${LSP_LIB}) panda_target_include_directories(${LSP_LIB} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include @@ -141,7 +142,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 29ebe35e309529a070caf7e6df5a350d59a02d1e..965ef9d300021cd9e2b19404ce342b52f5264a4c 100644 --- a/ets2panda/public/CMakeLists.txt +++ b/ets2panda/public/CMakeLists.txt @@ -646,7 +646,7 @@ if (PANDA_TARGET_WINDOWS) set(CMAKE_STATIC_LIBRARY_SUFFIX ".lib") endif() -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 index 1e0cab0b035f78f620b5cfed4e1864175eb6d50c..26a2ab75ad92d08eb698fcab85617fc7f8e01cec 100644 --- a/ets2panda/test/unit/declgen/CMakeLists.txt +++ b/ets2panda/test/unit/declgen/CMakeLists.txt @@ -38,7 +38,7 @@ foreach(TEST_DATA IN ITEMS ${DECLGEN_PLUGIN_TESTS}) list(GET TEST_DATA_ELEM 0 TEST_NAME) list(GET TEST_DATA_ELEM 1 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} diff --git a/ets2panda/test/unit/plugin/CMakeLists.txt b/ets2panda/test/unit/plugin/CMakeLists.txt index e0fa2fe3f59d5815a9b77e520eede628d4b13128..655ccb4560cc3dd77cb2d499b9042b67471e6f98 100644 --- a/ets2panda/test/unit/plugin/CMakeLists.txt +++ b/ets2panda/test/unit/plugin/CMakeLists.txt @@ -133,9 +133,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 d71a3104c240e6231d43c04f611bdc3da5ba58b6..4e3c3607fe7d5ad30f703f9273f3ff03ed74f3e0 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}