build: add test coverage target
parent
97fae8cc85
commit
da406cb112
|
@ -20,6 +20,8 @@ set(ZIG_LIBC_INCLUDE_DIR "/usr/include" CACHE STRING "Default native target libc
|
||||||
set(ZIG_LD_PATH "ld" CACHE STRING "Path to ld for the native target")
|
set(ZIG_LD_PATH "ld" CACHE STRING "Path to ld for the native target")
|
||||||
set(ZIG_DYNAMIC_LINKER "" CACHE STRING "Override dynamic linker for native target")
|
set(ZIG_DYNAMIC_LINKER "" CACHE STRING "Override dynamic linker for native target")
|
||||||
|
|
||||||
|
option(ZIG_TEST_COVERAGE "Build Zig with test coverage instrumentation" OFF)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
find_package(llvm)
|
find_package(llvm)
|
||||||
|
@ -175,10 +177,17 @@ if(MINGW)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(EXE_CFLAGS "-std=c++11 -fno-exceptions -fno-rtti -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__USE_MINGW_ANSI_STDIO -Werror=strict-prototypes -Werror=old-style-definition -Werror=missing-prototypes")
|
set(EXE_CFLAGS "-std=c++11 -fno-exceptions -fno-rtti -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__USE_MINGW_ANSI_STDIO -Werror=strict-prototypes -Werror=old-style-definition -Werror=missing-prototypes")
|
||||||
|
set(EXE_LDFLAGS " ")
|
||||||
|
if(ZIG_TEST_COVERAGE)
|
||||||
|
set(EXE_CFLAGS "${EXE_CFLAGS} -fprofile-arcs -ftest-coverage")
|
||||||
|
set(EXE_LDFLAGS "-fprofile-arcs -ftest-coverage")
|
||||||
|
endif()
|
||||||
|
|
||||||
add_executable(zig ${ZIG_SOURCES})
|
add_executable(zig ${ZIG_SOURCES})
|
||||||
set_target_properties(zig PROPERTIES
|
set_target_properties(zig PROPERTIES
|
||||||
COMPILE_FLAGS ${EXE_CFLAGS})
|
COMPILE_FLAGS ${EXE_CFLAGS}
|
||||||
|
LINK_FLAGS ${EXE_LDFLAGS}
|
||||||
|
)
|
||||||
target_link_libraries(zig LINK_PUBLIC
|
target_link_libraries(zig LINK_PUBLIC
|
||||||
${CLANG_LIBRARIES}
|
${CLANG_LIBRARIES}
|
||||||
${LLVM_LIBRARIES}
|
${LLVM_LIBRARIES}
|
||||||
|
@ -208,4 +217,18 @@ add_executable(run_tests ${TEST_SOURCES})
|
||||||
target_link_libraries(run_tests)
|
target_link_libraries(run_tests)
|
||||||
set_target_properties(run_tests PROPERTIES
|
set_target_properties(run_tests PROPERTIES
|
||||||
COMPILE_FLAGS ${EXE_CFLAGS}
|
COMPILE_FLAGS ${EXE_CFLAGS}
|
||||||
|
LINK_FLAGS ${EXE_LDFLAGS}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (ZIG_TEST_COVERAGE)
|
||||||
|
add_custom_target(coverage
|
||||||
|
DEPENDS run_tests
|
||||||
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
COMMAND lcov --directory . --zerocounters --rc lcov_branch_coverage=1
|
||||||
|
COMMAND ./run_tests
|
||||||
|
COMMAND lcov --directory . --capture --output-file coverage.info --rc lcov_branch_coverage=1
|
||||||
|
COMMAND lcov --remove coverage.info '/usr/*' --output-file coverage.info.cleaned --rc lcov_branch_coverage=1
|
||||||
|
COMMAND genhtml -o coverage coverage.info.cleaned --rc lcov_branch_coverage=1
|
||||||
|
COMMAND rm coverage.info coverage.info.cleaned
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
14
README.md
14
README.md
|
@ -101,6 +101,20 @@ make
|
||||||
sudo make install
|
sudo make install
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Test Coverage
|
||||||
|
|
||||||
|
To see test coverage in Zig, configure with `-DZIG_TEST_COVERAGE=ON` as an
|
||||||
|
additional parameter to the Debug build.
|
||||||
|
|
||||||
|
You must have `lcov` installed and available.
|
||||||
|
|
||||||
|
Then `make coverage`.
|
||||||
|
|
||||||
|
With GCC you will get a nice HTML view of the coverage data. With clang,
|
||||||
|
the last step will fail, but you can execute
|
||||||
|
`llvm-cov gcov $(find CMakeFiles/ -name "*.gcda")` and then inspect the
|
||||||
|
produced .gcov files.
|
||||||
|
|
||||||
### Troubleshooting
|
### Troubleshooting
|
||||||
|
|
||||||
If you get one of these:
|
If you get one of these:
|
||||||
|
|
Loading…
Reference in New Issue