changeset 56:1ac96e2f167c

build: Use lcov instead of kcov (faster, better counting)
author Lewin Bormann <lbo@spheniscida.de>
date Fri, 23 Aug 2019 16:13:02 +0200
parents 11a36d53bf37
children aff8b46c1fb9
files CMakeLists.txt coverage.sh kcoverage.sh lcoverage.sh src/CMakeLists.txt src/base/CMakeLists.txt
diffstat 6 files changed, 73 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Fri Aug 23 15:35:01 2019 +0200
+++ b/CMakeLists.txt	Fri Aug 23 16:13:02 2019 +0200
@@ -8,6 +8,10 @@
 
 # SET(CMAKE_EXPORT_COMPILE_COMMANDS ON)
 
+if (CMAKE_BUILD_TYPE STREQUAL "")
+    SET(CMAKE_BUILD_TYPE "Debug")
+endif ()
+
 if (CMAKE_BUILD_TYPE STREQUAL "Release")
 ADD_COMPILE_OPTIONS(-O3)
 else ()
@@ -40,8 +44,12 @@
 endif ()
 
 GET_PROPERTY(ALL_TEST_EXECUTABLES GLOBAL PROPERTY YALL_TESTS)
+ADD_CUSTOM_TARGET(kcoverage
+    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/kcoverage.sh ${ALL_TEST_EXECUTABLES}
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+)
 ADD_CUSTOM_TARGET(coverage
-    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/coverage.sh ${ALL_TEST_EXECUTABLES}
+    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lcoverage.sh ${ALL_TEST_EXECUTABLES}
     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
 )
 ADD_CUSTOM_TARGET(valgrind
@@ -49,4 +57,5 @@
     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
 )
 
-MESSAGE("${ALL_TEST_EXECUTABLES}")
+MESSAGE("Test binaries: ${ALL_TEST_EXECUTABLES}")
+MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
--- a/coverage.sh	Fri Aug 23 15:35:01 2019 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-#!/bin/bash
-
-# Expects a list of test executables as arguments.
-# Run this from the build directory using `make coverage`.
-
-set -ex
-
-KCOV="kcov"
-KCOV_ARGS="--exclude-pattern=/usr/src,/usr/include,/usr/lib,_test.c"
-
-TESTS=$@
-TESTS_BASENAME=`basename -a $TESTS`
-
-for BINARY in $TESTS; do
-    $KCOV $KCOV_ARGS . $BINARY
-done
-
-$KCOV --merge --report-only $KCOV_ARGS . $TESTS
-xdg-open kcov-merged/index.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kcoverage.sh	Fri Aug 23 16:13:02 2019 +0200
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+# Expects a list of test executables as arguments.
+# Run this from the build directory using `make coverage`.
+
+set -ex
+
+KCOV="kcov"
+KCOV_ARGS="--exclude-pattern=/usr/src,/usr/include,/usr/lib,_test.c"
+
+TESTS=$@
+TESTS_BASENAME=`basename -a $TESTS`
+
+for BINARY in $TESTS; do
+    $KCOV $KCOV_ARGS . $BINARY
+done
+
+$KCOV --merge --report-only $KCOV_ARGS . $TESTS
+xdg-open kcov-merged/index.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lcoverage.sh	Fri Aug 23 16:13:02 2019 +0200
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+# Expects a list of test executables as arguments.
+# Run this from the build directory using `make coverage`.
+
+set -ex
+
+GENHTML="genhtml"
+LCOV="lcov"
+LCOV_ARGS="--base-directory . --directory . --exclude *_test.c"
+
+TESTS=$@
+TESTS_BASENAME=`basename -a $TESTS`
+
+HTMLOUT="lcov-merged"
+MERGED_TRACES="merged.info"
+
+$LCOV $LCOV_ARGS --zerocounters
+make test
+
+$LCOV $LCOV_ARGS -c -o $MERGED_TRACES
+$GENHTML -o ${HTMLOUT}/ $MERGED_TRACES
+xdg-open ${HTMLOUT}/index.html
--- a/src/CMakeLists.txt	Fri Aug 23 15:35:01 2019 +0200
+++ b/src/CMakeLists.txt	Fri Aug 23 16:13:02 2019 +0200
@@ -2,17 +2,22 @@
 
 ADD_SUBDIRECTORY(base/)
 
+# Tests
+if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+    ADD_COMPILE_OPTIONS(--coverage)
+endif ()
+
 ADD_LIBRARY(core STATIC
     atom.c
     expr.c
     func.c
     value.c)
 
-TARGET_LINK_LIBRARIES(core base)
-
-# Tests
-# We don't need these options for kcov.
-#ADD_COMPILE_OPTIONS(--coverage -ftest-coverage)
+if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+    TARGET_LINK_LIBRARIES(core base gcov)
+else ()
+    TARGET_LINK_LIBRARIES(core base)
+endif ()
 
 # Atom test.
 ADD_EXECUTABLE(atom_test atom_test.c)
--- a/src/base/CMakeLists.txt	Fri Aug 23 15:35:01 2019 +0200
+++ b/src/base/CMakeLists.txt	Fri Aug 23 16:13:02 2019 +0200
@@ -1,19 +1,25 @@
 cmake_minimum_required(VERSION 3.14)
 
+# Tests
+if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+    ADD_COMPILE_OPTIONS(--coverage)
+endif ()
+
 ADD_LIBRARY(base STATIC
     str.c
     vec.c
 )
 
-# Tests
-ADD_COMPILE_OPTIONS(--coverage -ftest-coverage)
+if (CMAKE_BUILD_TYPE STREQUAL "Debug")
+    TARGET_LINK_LIBRARIES(base gcov)
+endif ()
 
 # str test.
 ADD_EXECUTABLE(str_test str_test.c)
-TARGET_LINK_LIBRARIES(str_test base gcov)
+TARGET_LINK_LIBRARIES(str_test base)
 YADD_TEST(str_test)
 
 # vec test.
 ADD_EXECUTABLE(vec_test vec_test.c)
-TARGET_LINK_LIBRARIES(vec_test base gcov)
+TARGET_LINK_LIBRARIES(vec_test base)
 YADD_TEST(vec_test)