diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index d421f5581469f201a93a2488503c61dd59661ea4..f39e75f7a199bb4873ed7976827d1ef1db663d2d 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -49,6 +49,11 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict") endif() +option(ENABLE_COVERAGE "Enable code coverage" OFF) +if(ENABLE_COVERAGE) + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage") +endif() + ######################################################################## # User input options # ######################################################################## @@ -819,9 +824,38 @@ if(ENABLE_TESTING) add_test(ShowHelp lmp${LAMMPS_MACHINE} -help) endif() -################################## +############################################################################### +# Testing +# +# Requires latest gcovr (for GCC 8.1 support):# +# pip install git+https://github.com/gcovr/gcovr.git +############################################################################### +if(ENABLE_COVERAGE) + find_program(GCOVR_BINARY gcovr) + find_package_handle_standard_args(GCOVR DEFAULT_MSG GCOVR_BINARY) + + if(GCOVR_FOUND) + get_filename_component(ABSOLUTE_LAMMPS_SOURCE_DIR ${LAMMPS_SOURCE_DIR} ABSOLUTE) + + add_custom_target( + gen_coverage_xml + COMMAND ${GCOVR_BINARY} -s -x -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.xml + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generating XML Coverage Report..." + ) + + add_custom_target( + gen_coverage_html + COMMAND ${GCOVR_BINARY} -s --html --html-details -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.html + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generating HTML Coverage Report..." + ) + endif() +endif() + +############################################################################### # Print package summary -################################## +############################################################################### foreach(PKG ${DEFAULT_PACKAGES} ${OTHER_PACKAGES} ${ACCEL_PACKAGES}) if(PKG_${PKG}) message(STATUS "Building package: ${PKG}")