From c5dfca63eed9520ab5ec57d45b42d21d6c1aa210 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Thu, 6 Mar 2014 16:46:19 -0500 Subject: [PATCH] added coverage options with gcov --- src/CMakeLists.txt | 11 ++++++++--- tests/run_nightly_tests.py | 27 +++++++++++++++++++-------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 21609a4d9a..11f48f1f38 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,6 +17,7 @@ option(petsc "Enable PETSC for use in CMFD acceleration" OFF) option(debug "Compile with debug flags" OFF) option(optimize "Turn on all compiler optimization flags" OFF) option(verbose "Create verbose Makefiles" OFF) +option(coverage "Compile with flags" OFF) if (verbose) set(CMAKE_VERBOSE_MAKEFILE on) @@ -62,6 +63,10 @@ if(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") set(f90flags "-fopenmp ${f90flags}") set(ldflags "-fopenmp ${ldflags}") endif() + if(coverage) + set(f90flags "-coverage ${f90flags}") + set(ldflags "-coverage ${ldflags}") + endif() elseif(CMAKE_Fortran_COMPILER_ID STREQUAL "Intel") # Intel Fortran compiler options @@ -241,7 +246,7 @@ foreach(test ${TESTS}) get_filename_component(TEST_NAME ${test} NAME) get_filename_component(TEST_PATH ${test} PATH) - if(NOT $ENV{MEM_CHECK}) + if(NOT $ENV{MEM_CHECK} AND NOT $ENV{COVERAGE}) # Check serial/parallel if (${MPI_ENABLED}) @@ -261,13 +266,13 @@ foreach(test ${TESTS}) endif(${MPI_ENABLED}) - else(NOT $ENV{MEM_CHECK}) + else(NOT $ENV{MEM_CHECK} AND NOT $ENV{COVERAGE}) # Perform serial valgrind test add_test(NAME ${TEST_NAME} WORKING_DIRECTORY ${TEST_PATH} COMMAND $ ${TEST_PATH}) - endif(NOT $ENV{MEM_CHECK}) + endif(NOT $ENV{MEM_CHECK} AND NOT $ENV{COVERAGE}) endforeach(test) diff --git a/tests/run_nightly_tests.py b/tests/run_nightly_tests.py index 51d3ce8562..8a1bc4e1d8 100755 --- a/tests/run_nightly_tests.py +++ b/tests/run_nightly_tests.py @@ -27,17 +27,23 @@ set (CTEST_BUILD_OPTIONS "{build_opts}") set(CTEST_CONFIGURE_COMMAND "${{CMAKE_COMMAND}} -H${{CTEST_SOURCE_DIRECTORY}} -B${{CTEST_BINARY_DIRECTORY}} ${{CTEST_BUILD_OPTIONS}}") set(CTEST_MEMORYCHECK_COMMAND "/usr/bin/valgrind") set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "--tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes --track-origins=yes") - set(MEM_CHECK {mem_check}) set(ENV{{MEM_CHECK}} ${{MEM_CHECK}}) +set(CTEST_COVERAGE_COMMAND "/usr/bin/gcov") +set(COVERAGE {coverage}) +set(ENV{{COVERAGE}} ${{COVERAGE}}) + ctest_start("Nightly") ctest_configure() ctest_build() -ctest_test(INCLUDE test_basic) +ctest_test() if(MEM_CHECK) ctest_memcheck(INCLUDE test_basic) endif(MEM_CHECK) +if(COVERAGE) +ctest_coverage() +endif(COVERAGE) ctest_submit()""" # Define test data structure @@ -45,7 +51,7 @@ tests = OrderedDict() class Test(object): def __init__(self, name, debug=False, optimize=False, mpi=False, openmp=False, - hdf5=False, petsc=False, valgrind=False): + hdf5=False, petsc=False, valgrind=False, coverage=False): self.name = name self.debug = debug self.optimize = optimize @@ -54,6 +60,7 @@ class Test(object): self.hdf5 = hdf5 self.petsc = petsc self.valgrind = valgrind + self.coverage = coverage def get_build_name(self): self.build_name = self.name @@ -69,6 +76,8 @@ class Test(object): build_str += "-Dopenmp=ON " if self.petsc: build_str += "-Dpetsc=ON " + if self.coverage: + build_str += "-Dcoverage=ON " self.build_opts = build_str return self.build_opts @@ -80,11 +89,11 @@ class Test(object): call(['ctest', '-S', 'ctestscript.run','-V']) def add_test(name, debug=False, optimize=False, mpi=False, openmp=False,\ - hdf5=False, petsc=False, valgrind=False): - tests.update({name:Test(name, debug, optimize, mpi, openmp, hdf5, petsc, valgrind)}) + hdf5=False, petsc=False, valgrind=False, coverage=False): + tests.update({name:Test(name, debug, optimize, mpi, openmp, hdf5, petsc, valgrind, coverage)}) # List of tests -add_test('basic-normal') +#add_test('basic-normal') #add_test('basic-debug', debug=True) #add_test('basic-optimize', optimize=True) #add_test('omp-normal', openmp=True) @@ -117,7 +126,8 @@ add_test('basic-normal') #add_test('omp-phdf5-petsc-normal', openmp=True, mpi=True, hdf5=True, petsc=True) #add_test('omp-phdf5-petsc-debug', openmp=True, mpi=True, hdf5=True, petsc=True, debug=True) #add_test('omp-phdf5-petsc-optimize', openmp=True, mpi=True, hdf5=True, petsc=True, optimize=True) -add_test('basic-debug_valgrind', debug=True, valgrind=True) +#add_test('basic-debug_valgrind', debug=True, valgrind=True) +add_test('basic-normal_coverage', coverage=True) # Setup CTest vars pwd = os.environ['PWD'] @@ -136,6 +146,7 @@ for key in iter(tests): ctest_vars.update({'build_name' : test.get_build_name()}) ctest_vars.update({'build_opts' : test.get_build_opts()}) ctest_vars.update({'mem_check' : test.valgrind}) + ctest_vars.update({'coverage' : test.coverage}) # Create ctest script test.create_ctest_script(ctest_vars) @@ -144,4 +155,4 @@ for key in iter(tests): test.run_ctest() # Clear build directory - call(['rm', '-rf', 'build']) +# call(['rm', '-rf', 'build'])