From 1941dfca879845d011c2b872d4b89b200ba3a90d Mon Sep 17 00:00:00 2001 From: Daniel Agar Date: Sun, 4 Dec 2016 19:10:24 -0500 Subject: [PATCH] add tests code coverage -closes #5862 --- .gitignore | 4 ++++ Makefile | 7 +++++++ cmake/common/px4_base.cmake | 15 +++++++++++++++ unittests/CMakeLists.txt | 8 +++++++- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 052dcddd65..b803f4ae70 100644 --- a/.gitignore +++ b/.gitignore @@ -77,3 +77,7 @@ vectorcontrol/ # CLion ignores .idea + +# gcov code coverage +coverage-html/ +coverage.info diff --git a/Makefile b/Makefile index 518c1725d8..c37610e65a 100644 --- a/Makefile +++ b/Makefile @@ -257,6 +257,13 @@ run_tests_posix: posix_sitl_default tests: check_unittest run_tests_posix +tests_coverage: + @(PX4_CODE_COVERAGE=1 CCACHE_DISABLE=1 ${MAKE} tests) + @(lcov --directory . --capture --quiet --output-file coverage.info) + @(lcov --remove coverage.info '/usr/*' --quiet --output-file coverage.info) + #@(lcov --list coverage.info) + @(genhtml coverage.info --quiet --output-directory coverage-html) + # QGroundControl flashable firmware (currently built by travis-ci) qgc_firmware: \ check_px4fmu-v1_default \ diff --git a/cmake/common/px4_base.cmake b/cmake/common/px4_base.cmake index 52922ad875..7ad8254d8a 100644 --- a/cmake/common/px4_base.cmake +++ b/cmake/common/px4_base.cmake @@ -827,6 +827,7 @@ function(px4_add_common_flags) ) set(added_link_dirs) # none used currently + set(added_exe_linker_flags) string(TOUPPER ${BOARD} board_upper) string(REPLACE "-" "_" board_config ${board_upper}) @@ -848,6 +849,20 @@ function(px4_add_common_flags) ) endif() + # code coverage + if ($ENV{PX4_CODE_COVERAGE} MATCHES "1") + message(STATUS "Code coverage build flags enabled") + list(APPEND added_cxx_flags + -fprofile-arcs -ftest-coverage --coverage -g3 -O0 -fno-elide-constructors -Wno-invalid-offsetof -fno-default-inline -fno-inline + ) + list(APPEND added_c_flags + -fprofile-arcs -ftest-coverage --coverage -g3 -O0 -fno-default-inline -fno-inline + ) + list(APPEND added_exe_linker_flags + -ftest-coverage --coverage -lgcov + ) + endif() + # output foreach(var ${inout_vars}) string(TOLOWER ${var} lower_var) diff --git a/unittests/CMakeLists.txt b/unittests/CMakeLists.txt index 795902bf18..0ed8ec9781 100644 --- a/unittests/CMakeLists.txt +++ b/unittests/CMakeLists.txt @@ -13,11 +13,17 @@ enable_testing() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -std=gnu99 -g") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -std=gnu++0x -g -fno-exceptions -fno-rtti -fno-threadsafe-statics -DCONFIG_WCHAR_BUILTIN -D__CUSTOM_FILE_IO__") +# code coverage +if ($ENV{PX4_CODE_COVERAGE} MATCHES "1") + message(STATUS "Code coverage build flags enabled") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage --coverage") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage --coverage") +endif() + if (NOT PX4_SOURCE_DIR) set(PX4_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..") endif() - set(GTEST_DIR ${PX4_SOURCE_DIR}/unittests/googletest) add_subdirectory(${GTEST_DIR}) include_directories(${GTEST_DIR}/include)