From 3a063b1508b0216b6f8e09cd4242770e93e69747 Mon Sep 17 00:00:00 2001 From: wenxingsen Date: Tue, 28 Mar 2023 07:41:03 +0000 Subject: [PATCH] [fix] support latest code support coverage build --- cmake/Env.cmake | 11 +++++++---- cmake/Utils.cmake | 9 +++++++++ src/sql/parser/CMakeLists.txt | 6 ++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/cmake/Env.cmake b/cmake/Env.cmake index cf355f868..a512effe4 100644 --- a/cmake/Env.cmake +++ b/cmake/Env.cmake @@ -39,7 +39,10 @@ if(WITH_COVERAGE) # -ftest-coverage to generate .gcno file # -fprofile-arcs to generate .gcda file # -DDBUILD_COVERAGE marco use to mark 'coverage build type' and to handle some speical case - set(CMAKE_COVERAGE_FLAG "-ftest-coverage -fprofile-arcs -Xclang -coverage-version='502*' -DBUILD_COVERAGE") + set(CMAKE_COVERAGE_COMPILE_OPTIONS -ftest-coverage -fprofile-arcs -Xclang -coverage-version=408R -DBUILD_COVERAGE) + set(CMAKE_COVERAGE_EXE_LINKER_OPTIONS "-ftest-coverage -fprofile-arcs") + + add_compile_options(${CMAKE_COVERAGE_COMPILE_OPTIONS}) set(DEBUG_PREFIX "") endif() @@ -97,11 +100,11 @@ if (OB_USE_CLANG) set(REORDER_LINK_OPT "-Wl,--no-rosegment,--build-id=sha1,--no-warn-symbol-ordering,--symbol-ordering-file,${HOTFUNC_PATH}") set(OB_LD_BIN "${DEVTOOLS_DIR}/bin/ld.lld") endif() - set(CMAKE_CXX_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG} ${CMAKE_COVERAGE_FLAG} -std=gnu++11") - set(CMAKE_C_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG} ${CMAKE_COVERAGE_FLAG}") + set(CMAKE_CXX_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG} -std=gnu++11") + set(CMAKE_C_FLAGS "--gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT} ${THIN_LTO_OPT} -fcolor-diagnostics ${REORDER_COMP_OPT} -fmax-type-align=8 ${CMAKE_ASAN_FLAG}") set(CMAKE_CXX_LINK_FLAGS "${LD_OPT} ${THIN_LTO_CONCURRENCY_LINK} --gcc-toolchain=${GCC9} ${DEBUG_PREFIX} ${AUTO_FDO_OPT}") set(CMAKE_SHARED_LINKER_FLAGS "${LD_OPT} -Wl,-z,noexecstack ${THIN_LTO_CONCURRENCY_LINK} ${REORDER_LINK_OPT}") - set(CMAKE_EXE_LINKER_FLAGS "${LD_OPT} -Wl,-z,noexecstack ${THIN_LTO_CONCURRENCY_LINK} ${REORDER_LINK_OPT} ${OB_EXE_LINKER_OPT}") + set(CMAKE_EXE_LINKER_FLAGS "${LD_OPT} -Wl,-z,noexecstack ${THIN_LTO_CONCURRENCY_LINK} ${REORDER_LINK_OPT} ${OB_EXE_LINKER_OPT} ${CMAKE_COVERAGE_EXE_LINKER_OPTIONS}") else() # not clang, use gcc message("gcc9 not support currently, please set OB_USE_CLANG ON and we will finish it as soon as possible") endif() diff --git a/cmake/Utils.cmake b/cmake/Utils.cmake index a1e4e91a0..df5ac5eb4 100644 --- a/cmake/Utils.cmake +++ b/cmake/Utils.cmake @@ -85,6 +85,15 @@ function(config_ccls_flag target) endif() endfunction() +function(config_remove_coverage_flag target) + # 针对于特定的目标,由于某种写法会命中clang的DAG解析的bug,将少量文件不参与coverage编译 + if (WITH_COVERAGE) + get_target_property(EXTLIB_COMPILE_FLAGS ${target} COMPILE_OPTIONS) + list(REMOVE_ITEM EXTLIB_COMPILE_FLAGS ${CMAKE_COVERAGE_COMPILE_OPTIONS}) + set_target_properties(${target} PROPERTIES COMPILE_OPTIONS "${EXTLIB_COMPILE_FLAGS}") + endif() +endfunction() + function(ob_add_object_target target) add_library(${target} OBJECT "${${target}_cache_objects_}") config_target_unity(${target}) diff --git a/src/sql/parser/CMakeLists.txt b/src/sql/parser/CMakeLists.txt index 1e7e61de4..dc04b62e9 100644 --- a/src/sql/parser/CMakeLists.txt +++ b/src/sql/parser/CMakeLists.txt @@ -84,6 +84,12 @@ add_library(ob_sql_server_parser_objects OBJECT target_link_libraries(ob_sql_proxy_parser_objects PUBLIC ob_base ob_sql_parser_base) target_link_libraries(ob_sql_server_parser_objects PUBLIC ob_base) +if (WITH_COVERAGE) + # 排除少量sql解析文件,不参与coverage编译,clang针对于特殊语法文件会core + config_remove_coverage_flag(ob_sql_proxy_parser_objects) + config_remove_coverage_flag(ob_sql_server_parser_objects) +endif() + target_compile_definitions(ob_sql_proxy_parser_objects PUBLIC SQL_PARSER_COMPILATION) add_library(ob_sql_proxy_parser_static