From e95b0819b59afe637c2832020306add35c27af9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Lalik?= Date: Fri, 6 May 2022 18:07:59 +0200 Subject: [PATCH 1/2] Refactor ccov target dependencies tree --- code-coverage.cmake | 52 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/code-coverage.cmake b/code-coverage.cmake index 0a4d933..d1e66e1 100644 --- a/code-coverage.cmake +++ b/code-coverage.cmake @@ -430,7 +430,7 @@ function(target_code_coverage TARGET_NAME) # Capture coverage data if(${CMAKE_VERSION} VERSION_LESS "3.17.0") add_custom_target( - ccov-capture-${target_code_coverage_COVERAGE_TARGET_NAME} + ccov-clean-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${CMAKE_COMMAND} -E remove -f ${COVERAGE_INFO} COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --zerocounters COMMAND @@ -444,7 +444,7 @@ function(target_code_coverage TARGET_NAME) DEPENDS ${TARGET_NAME}) else() add_custom_target( - ccov-capture-${target_code_coverage_COVERAGE_TARGET_NAME} + ccov-clean-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${CMAKE_COMMAND} -E rm -f ${COVERAGE_INFO} COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --zerocounters COMMAND @@ -458,14 +458,32 @@ function(target_code_coverage TARGET_NAME) DEPENDS ${TARGET_NAME}) endif() - # Generates HTML output of the coverage information for perusal add_custom_target( - ccov-${target_code_coverage_COVERAGE_TARGET_NAME} + ccov-capture-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND + ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --base-directory + ${CMAKE_SOURCE_DIR} --capture ${EXTERNAL_OPTION} --output-file + ${COVERAGE_INFO} + COMMAND ${EXCLUDE_COMMAND} + DEPENDS) + + # Only generates HTML output of the coverage information for perusal + add_custom_target( + ccov-html-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${GENHTML_PATH} -o ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/${target_code_coverage_COVERAGE_TARGET_NAME} ${COVERAGE_INFO} DEPENDS ccov-capture-${target_code_coverage_COVERAGE_TARGET_NAME}) + + # Generates HTML output of the coverage information for perusal + add_custom_target( + ccov-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND + DEPENDS + ccov-clean-${target_code_coverage_COVERAGE_TARGET_NAME} + ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME} + ccov-html-${target_code_coverage_COVERAGE_TARGET_NAME}) endif() add_custom_command( @@ -483,6 +501,11 @@ function(target_code_coverage TARGET_NAME) endif() add_dependencies(ccov ccov-${target_code_coverage_COVERAGE_TARGET_NAME}) + if(NOT TARGET ccov-html) + add_custom_target(ccov-html) + endif() + add_dependencies(ccov-html ccov-html-${target_code_coverage_COVERAGE_TARGET_NAME}) + if(NOT CMAKE_C_COMPILER_ID MATCHES "GNU" AND NOT CMAKE_CXX_COMPILER_ID MATCHES "GNU") if(NOT TARGET ccov-report) @@ -671,7 +694,7 @@ function(add_code_coverage_all_targets) # Capture coverage data if(${CMAKE_VERSION} VERSION_LESS "3.17.0") add_custom_target( - ccov-all-capture + ccov-all-clean COMMAND ${CMAKE_COMMAND} -E remove -f ${COVERAGE_INFO} COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --capture --output-file ${COVERAGE_INFO} @@ -679,7 +702,7 @@ function(add_code_coverage_all_targets) DEPENDS ccov-all-processing) else() add_custom_target( - ccov-all-capture + ccov-all-clean COMMAND ${CMAKE_COMMAND} -E rm -f ${COVERAGE_INFO} COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --capture --output-file ${COVERAGE_INFO} @@ -687,13 +710,26 @@ function(add_code_coverage_all_targets) DEPENDS ccov-all-processing) endif() - # Generates HTML output of all targets for perusal add_custom_target( - ccov-all + ccov-all-capture + COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --capture + --output-file ${COVERAGE_INFO} + COMMAND ${EXCLUDE_COMMAND} + DEPENDS) + + # Only generates HTML output of all targets for perusal + add_custom_target( + ccov-all-html COMMAND ${GENHTML_PATH} -o ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/all-merged ${COVERAGE_INFO} -p ${CMAKE_SOURCE_DIR} DEPENDS ccov-all-capture) + # Generates HTML output of all targets for perusal + add_custom_target( + ccov-all + COMMAND + DEPENDS ccov-preprocessing ccov-all-processing ccov-all-clean ccov-all-html) + endif() add_custom_command( From cd4009e8afc2800bb50fb2d896b0e5cff6992c8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Lalik?= Date: Tue, 10 May 2022 01:05:56 +0200 Subject: [PATCH 2/2] Add ccov-html-TARGET also for clang build --- code-coverage.cmake | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/code-coverage.cmake b/code-coverage.cmake index d1e66e1..94b43a7 100644 --- a/code-coverage.cmake +++ b/code-coverage.cmake @@ -346,7 +346,7 @@ function(target_code_coverage TARGET_NAME) ${LLVM_PROFDATA_PATH} merge -sparse ${target_code_coverage_COVERAGE_TARGET_NAME}.profraw -o ${target_code_coverage_COVERAGE_TARGET_NAME}.profdata - DEPENDS ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME}) + DEPENDS) # Ignore regex only works on LLVM >= 7 if(LLVM_COV_VERSION VERSION_GREATER_EQUAL "7.0.0") @@ -385,9 +385,9 @@ function(target_code_coverage TARGET_NAME) ${CMAKE_COVERAGE_OUTPUT_DIRECTORY}/${target_code_coverage_COVERAGE_TARGET_NAME}.json DEPENDS ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME}) - # Generates HTML output of the coverage information for perusal + # Only generates HTML output of the coverage information for perusal add_custom_target( - ccov-${target_code_coverage_COVERAGE_TARGET_NAME} + ccov-html-${target_code_coverage_COVERAGE_TARGET_NAME} COMMAND ${LLVM_COV_PATH} show $ -instr-profile=${target_code_coverage_COVERAGE_TARGET_NAME}.profdata @@ -396,6 +396,15 @@ function(target_code_coverage TARGET_NAME) -format="html" ${LINKED_OBJECTS} ${EXCLUDE_REGEX} DEPENDS ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME}) + # Generates HTML output of the coverage information for perusal + add_custom_target( + ccov-${target_code_coverage_COVERAGE_TARGET_NAME} + COMMAND + DEPENDS + ccov-run-${target_code_coverage_COVERAGE_TARGET_NAME} + ccov-processing-${target_code_coverage_COVERAGE_TARGET_NAME} + ccov-html-${target_code_coverage_COVERAGE_TARGET_NAME}) + elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") set(COVERAGE_INFO @@ -728,7 +737,7 @@ function(add_code_coverage_all_targets) add_custom_target( ccov-all COMMAND - DEPENDS ccov-preprocessing ccov-all-processing ccov-all-clean ccov-all-html) + DEPENDS ccov-preprocessing ccov-all-processing ccov-all-capture ccov-all-html) endif()