added coverage options with gcov

This commit is contained in:
Bryan Herman 2014-03-06 16:46:19 -05:00
parent c074268ba1
commit c5dfca63ee
2 changed files with 27 additions and 11 deletions

View file

@ -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 $<TARGET_FILE:openmc> ${TEST_PATH})
endif(NOT $ENV{MEM_CHECK})
endif(NOT $ENV{MEM_CHECK} AND NOT $ENV{COVERAGE})
endforeach(test)

View file

@ -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'])