@@ -39,6 +39,44 @@ if(${enable_cbmc_tests})
39
39
enable_testing ()
40
40
endif ()
41
41
42
+ if ("${CMAKE_CXX_COMPILER_ID} " STREQUAL "Clang" OR
43
+ "${CMAKE_CXX_COMPILER_ID} " STREQUAL "AppleClang" OR
44
+ "${CMAKE_CXX_COMPILER_ID} " STREQUAL "GNU"
45
+ )
46
+ set (enable_coverage off CACHE BOOL "Build with coverage recording" )
47
+ set (parallel_tests "1" CACHE STRING "Number of tests to run in parallel" )
48
+ if (${enable_coverage} )
49
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage -g" )
50
+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage -g" )
51
+ if (NOT DEFINED CODE_COVERAGE_OUTPUT_DIR )
52
+ set (CODE_COVERAGE_OUTPUT_DIR ${CMAKE_BINARY_DIR} /html )
53
+ set (CODE_COVERAGE_INFO_FILE ${CODE_COVERAGE_OUTPUT_DIR} /coverage.info )
54
+ endif ()
55
+ find_program (CODE_COVERAGE_LCOV lcov )
56
+ find_program (CODE_COVERAGE_GENHTML genhtml )
57
+ add_custom_target (coverage
58
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CODE_COVERAGE_OUTPUT_DIR}
59
+ COMMAND ctest -V -L CORE -j${parallel_tests}
60
+ COMMAND ${CODE_COVERAGE_LCOV} ${LCOV_FLAGS} --capture --directory ${CMAKE_BINARY_DIR} --output-file ${CODE_COVERAGE_INFO_FILE}
61
+ COMMAND ${CODE_COVERAGE_LCOV} ${LCOV_FLAGS} --remove ${CODE_COVERAGE_INFO_FILE} '/usr/*' --output-file ${CODE_COVERAGE_INFO_FILE}
62
+ COMMAND ${CODE_COVERAGE_GENHTML} ${CODE_COVERAGE_INFO_FILE} --output-directory ${CODE_COVERAGE_OUTPUT_DIR}
63
+ DEPENDS
64
+ java-models-library java-unit unit
65
+ "$<TARGET_FILE:cbmc>"
66
+ "$<TARGET_FILE:driver>"
67
+ "$<TARGET_FILE:goto-analyzer>"
68
+ "$<TARGET_FILE:goto-cc>"
69
+ "$<TARGET_FILE:goto-diff>"
70
+ "$<TARGET_FILE:goto-instrument>"
71
+ "$<TARGET_FILE:janalyzer>"
72
+ "$<TARGET_FILE:jbmc>"
73
+ "$<TARGET_FILE:jdiff>"
74
+ "$<TARGET_FILE:smt2_solver>"
75
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
76
+ )
77
+ endif ()
78
+ endif ()
79
+
42
80
add_subdirectory (src )
43
81
add_subdirectory (regression )
44
82
add_subdirectory (unit )
0 commit comments