From 82f45ee597937f3e1086771345a15de6d4334f4e Mon Sep 17 00:00:00 2001 From: julianlitz Date: Fri, 25 Apr 2025 11:56:22 +0000 Subject: [PATCH 1/3] Fix #81: Correct broken code coverage setup --- .github/workflows/coverage.yml | 44 +++++++++++++++++ CMakeLists.txt | 71 +++++++++++++++++++++------- scripts/coverage.sh | 86 ++++++++++++++++++++++++++++++++++ 3 files changed, 184 insertions(+), 17 deletions(-) create mode 100644 .github/workflows/coverage.yml create mode 100755 scripts/coverage.sh diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 00000000..6674743b --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,44 @@ +name: Code Coverage + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + coverage: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y lcov + + - name: Configure CMake + run: | + cmake -B build \ + -DGMGPOLAR_BUILD_TESTS=ON \ + -DGMGPOLAR_ENABLE_COVERAGE=ON \ + -DCMAKE_BUILD_TYPE=Debug + + - name: Build and Generate Coverage + run: | + cmake --build build --parallel $(nproc) + cmake --build build --target coverage + + - name: Upload Coverage Report + uses: actions/upload-artifact@v2 + with: + name: coverage-report + path: build/coverage-report + + # Optional: Upload to Codecov + - name: Upload to Codecov + uses: codecov/codecov-action@v2 + with: + files: build/coverage-filtered.info + fail_ci_if_error: false \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 658a11e2..0c7bdb78 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,39 +1,40 @@ cmake_minimum_required(VERSION 3.12) project(GMGPolar VERSION 2.0.0 LANGUAGES CXX) +# Options should be defined before they're used option(GMGPOLAR_BUILD_TESTS "Build GMGPolar unit tests." ON) option(GMGPOLAR_USE_LIKWID "Use LIKWID to measure code (regions)." OFF) option(GMGPOLAR_USE_MUMPS "Use MUMPS to solve linear systems." OFF) +option(GMGPOLAR_ENABLE_COVERAGE "Enable code coverage reporting (requires GCC/Clang)" OFF) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) +# Set build type - must come before compiler flags if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() +# Set compiler flags set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wextra -pedantic -Wno-unused -Wno-psabi") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -mtune=generic -Wno-psabi") -# code coverage analysis -# Note: this only works under linux and with make -# Ninja creates different directory names which do not work together with this scrupt -# as STREQUAL is case-sensitive https://github.com/TriBITSPub/TriBITS/issues/131, also allow DEBUG as accepted input -option(GMGPOLAR_TEST_COVERAGE "Enable GCov coverage analysis (adds a 'coverage' target)" OFF) - -if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "DEBUG") - if(GMGPOLAR_TEST_COVERAGE) - message(STATUS "Coverage enabled") - include(CodeCoverage) - append_coverage_compiler_flags() - setup_target_for_coverage_lcov( - NAME coverage - EXECUTABLE tests/gmgpolar_tests - LCOV_ARGS --ignore-errors gcov,mismatch - EXCLUDE "${CMAKE_SOURCE_DIR}/tests*" "${CMAKE_SOURCE_DIR}/src/InputFunctions*" "${CMAKE_BINARY_DIR}/*" "/usr*" - ) +# Set coverage compiler flags - must come before any targets are defined +if(GMGPOLAR_ENABLE_COVERAGE) + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + message(STATUS "Enabling code coverage flags") + # Use generator expressions to apply only to specific configurations + add_compile_options($<$:--coverage>) + add_link_options($<$:--coverage>) + # Force Debug build when coverage is enabled + if(CMAKE_BUILD_TYPE STREQUAL "Release") + message(STATUS "Forcing Debug build for coverage") + set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type" FORCE) + endif() + else() + message(WARNING "Code coverage requires GCC or Clang. Current compiler: ${CMAKE_CXX_COMPILER_ID}") endif() endif() @@ -54,4 +55,40 @@ if(GMGPOLAR_BUILD_TESTS) enable_testing() add_subdirectory(third-party) add_subdirectory(tests) + + # Add coverage target - moved after test configuration + if(GMGPOLAR_ENABLE_COVERAGE) + find_program(LCOV_PATH lcov) + find_program(GENHTML_PATH genhtml) + + if(LCOV_PATH AND GENHTML_PATH) + add_custom_target(coverage + # Reset counters + COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --zerocounters + # Run tests + COMMAND ctest --test-dir ${CMAKE_BINARY_DIR} || true + # Capture coverage data + COMMAND ${LCOV_PATH} --directory ${CMAKE_BINARY_DIR} --capture + --output-file ${CMAKE_BINARY_DIR}/coverage.info + --ignore-errors mismatch,unused + --rc geninfo_unexecuted_blocks=1 + # Filter out system and unwanted directories + COMMAND ${LCOV_PATH} --remove ${CMAKE_BINARY_DIR}/coverage.info + '/usr/*' + '*/tests/*' + '*/third-party/*' + '*/_deps/googletest-src/*' + '*/include/InputFunctions/*' + '*/src/InputFunctions/*' + --output-file ${CMAKE_BINARY_DIR}/coverage-filtered.info + --ignore-errors unused + # Generate HTML report + COMMAND ${GENHTML_PATH} ${CMAKE_BINARY_DIR}/coverage-filtered.info + --output-directory ${CMAKE_BINARY_DIR}/coverage-report + --ignore-errors source + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generating code coverage report" + ) + endif() + endif() endif() diff --git a/scripts/coverage.sh b/scripts/coverage.sh new file mode 100755 index 00000000..3e7bed05 --- /dev/null +++ b/scripts/coverage.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +# Set up environment variables for dependencies +# export MUMPS_DIR="$HOME/spack/opt/spack/linux-ubuntu24.04-x86_64/gcc-13.3.0/mumps-5.5.1-2v3iw45om32klbzpdsssblfbm2zklrl6" +# export METIS_DIR="$HOME/spack/opt/spack/linux-ubuntu24.04-x86_64_v4/gcc-13.3.0/metis-5.1.0-ab7tqwpnvjmngmrgxodnjykdsysypfbx" +# export LIKWID_DIR="$HOME/spack/opt/spack/linux-ubuntu24.04-x86_64_v4/gcc-13.3.0/likwid-5.2.2-nswn2ksoi2phc7qx55urkko6hxvfqkhf" + +# Default values +CLEAN=True +BUILD_TYPE="Debug" +JOBS=16 +TESTS=True +COVERAGE=True +MUMPS=False +LIKWID=False + +# Validate boolean options +for var in CLEAN COVERAGE LIKWID MUMPS TESTS; do + declare -n value=$var + if [[ "$value" != "True" && "$value" != "False" ]]; then + echo "Invalid value for $var: $value (must be True or False)" + exit 1 + fi +done + +# Validate build type +case "$BUILD_TYPE" in + Debug|Release) + ;; + *) + echo "Invalid build type: $BUILD_TYPE" + usage + ;; +esac + +# Set up build directory +BUILD_DIR="../build" + +if [ "$CLEAN" = "True" ] && [ -d "$BUILD_DIR" ]; then + echo "Removing existing build directory..." + rm -rf "$BUILD_DIR" || { echo "Failed to remove build directory"; exit 1; } +fi + +if [ ! -d "$BUILD_DIR" ]; then + echo "Creating build directory..." + mkdir -p "$BUILD_DIR" || { echo "Failed to create build directory"; exit 1; } +fi + +# Configure with CMake +echo "Configuring with options:" +echo " Build type: $BUILD_TYPE" +echo " Tests: $TESTS" +echo " Coverage: $COVERAGE" +echo " LIKWID: $LIKWID" +echo " MUMPS: $MUMPS" + +CMAKE_OPTIONS=( + "-DCMAKE_BUILD_TYPE=$BUILD_TYPE" + "-DGMGPOLAR_BUILD_TESTS=$TESTS" + "-DGMGPOLAR_USE_LIKWID=$LIKWID" + "-DGMGPOLAR_USE_MUMPS=$MUMPS" + "-DGMGPOLAR_ENABLE_COVERAGE=$COVERAGE" +) + +cmake -S .. -B "$BUILD_DIR" "${CMAKE_OPTIONS[@]}" || { echo "CMake configuration failed"; exit 1; } + +# Build the project +echo "Building with $JOBS parallel jobs..." +cmake --build "$BUILD_DIR" -j "$JOBS" || { echo "Build failed"; exit 1; } + +# Run coverage if enabled +if [ "$COVERAGE" = "True" ] && [ "$TESTS" = "True" ]; then + echo "Generating coverage report..." + cmake --build "$BUILD_DIR" --target coverage || { echo "Coverage generation failed"; exit 1; } + + # Open the coverage report if possible + if command -v xdg-open >/dev/null 2>&1; then + xdg-open "$BUILD_DIR/coverage-report/index.html" + else + echo "Coverage report generated at: $BUILD_DIR/coverage-report/index.html" + fi +elif [ "$COVERAGE" = "True" ] && [ "$TESTS" = "False" ]; then + echo "Warning: Coverage requested but tests are disabled" +fi + +echo "Build completed successfully!" \ No newline at end of file From 67314770f557a5438e3761f33e7c8e9089e57ebc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=BChn?= Date: Fri, 25 Apr 2025 23:55:02 +0200 Subject: [PATCH 2/3] . --- README.md | 2 +- gmgpolar_small.png | Bin 0 -> 13461 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 gmgpolar_small.png diff --git a/README.md b/README.md index 11fad7ec..a62def75 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -GMGPolar +![gmgpolar_logo](gmgpolar_small.png) ======= GMGPolar is a performant geometric multigrid solver using implicit extrapolation to raise the convergence order. It is based on meshes in tensor- or product-format. GMGPolar's focus applications are geometries that can be described by polar or curvilinear coordinates for which suited smoothing procedures have been developed. diff --git a/gmgpolar_small.png b/gmgpolar_small.png new file mode 100644 index 0000000000000000000000000000000000000000..b0855da7206501725d28cbe297d4cdea8dc68d42 GIT binary patch literal 13461 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 Dm^X|f literal 0 HcmV?d00001 From a5bc270ef34259dd861413a7ae8ed5de0b9e3a71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=BChn?= Date: Sat, 26 Apr 2025 00:00:35 +0200 Subject: [PATCH 3/3] . --- .github/workflows/coverage.yml | 44 ---------------------------------- pull_request_template.md | 9 +------ 2 files changed, 1 insertion(+), 52 deletions(-) delete mode 100644 .github/workflows/coverage.yml diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml deleted file mode 100644 index 6674743b..00000000 --- a/.github/workflows/coverage.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Code Coverage - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - coverage: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get install -y lcov - - - name: Configure CMake - run: | - cmake -B build \ - -DGMGPOLAR_BUILD_TESTS=ON \ - -DGMGPOLAR_ENABLE_COVERAGE=ON \ - -DCMAKE_BUILD_TYPE=Debug - - - name: Build and Generate Coverage - run: | - cmake --build build --parallel $(nproc) - cmake --build build --target coverage - - - name: Upload Coverage Report - uses: actions/upload-artifact@v2 - with: - name: coverage-report - path: build/coverage-report - - # Optional: Upload to Codecov - - name: Upload to Codecov - uses: codecov/codecov-action@v2 - with: - files: build/coverage-filtered.info - fail_ci_if_error: false \ No newline at end of file diff --git a/pull_request_template.md b/pull_request_template.md index c384ce61..ec8b0224 100644 --- a/pull_request_template.md +++ b/pull_request_template.md @@ -6,7 +6,7 @@ As many checkboxes as possible should be ticked. ### Checks by code author: Always to be checked: * [ ] There is at least one issue associated with the pull request. -* [ ] New code adheres with the [coding guidelines](https://github.com/mknaranja/GMGPolar/wiki) +* [ ] New code adheres with the [coding guidelines](https://github.com/SciCompMod/GMGPolar/wiki) * [ ] No large data files have been added to the repository. Maximum size for files should be of the order of KB not MB. In particular avoid adding of pdf, word, or other files that cannot be change-tracked correctly by git. If functions were changed or functionality was added: @@ -22,13 +22,6 @@ If new third party software is used: If new mathematical methods or epidemiological terms are used: * [ ] Are new methods referenced? Did you provide further documentation? -[ ] The following questions are addressed in the documentation (if need be): -* Developers (what did you do?, how can it be maintained?) -* For users (how to use your work?) -* For admins (how to install and configure your work?) - -* For documentation: Please write or update the Readme in the current working directory! - ### Checks by code reviewer(s): * [ ] Is the code clean of development artifacts e.g., unnecessary comments, prints, ... * [ ] The ticket goals for each associated issue are reached or problems are clearly addressed (i.e., a new issue was introduced).