--- /dev/null
+# idf_create_lcov_report
+#
+# Create coverage report.
+function(idf_create_coverage_report report_dir)
+ set(gcov_tool ${CONFIG_SDK_TOOLPREFIX}gcov)
+ idf_build_get_property(project_name PROJECT_NAME)
+
+ add_custom_target(lcov-report
+ COMMENT "Generating coverage report in: ${report_dir}"
+ COMMAND ${CMAKE_COMMAND} -E echo "Using gcov: ${gcov_tool}"
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${report_dir}/html
+ COMMAND lcov --gcov-tool ${gcov_tool} -c -d ${CMAKE_CURRENT_BINARY_DIR} -o ${report_dir}/${project_name}.info
+ COMMAND genhtml -o ${report_dir}/html ${report_dir}/${project_name}.info)
+endfunction()
+
+# idf_clean_coverage_report
+#
+# Clean coverage report.
+function(idf_clean_coverage_report report_dir)
+ add_custom_target(cov-data-clean
+ COMMENT "Clean coverage report in: ${report_dir}"
+ COMMAND ${CMAKE_COMMAND} -E remove_directory ${report_dir})
+endfunction()
\ No newline at end of file
.PHONY: lcov-report cov-data-clean
```
+For CMake-based build system, add the following lines to you project's `CMakeLists.txt` after the line including `project.cmake`:
+
+```
+include($ENV{IDF_PATH}/tools/cmake/gcov.cmake)
+idf_create_coverage_report(${CMAKE_CURRENT_BINARY_DIR}/coverage_report)
+idf_clean_coverage_report(${CMAKE_CURRENT_BINARY_DIR}/coverage_report)
+```
+
Those lines add two build targets:
* `lcov-report` - generates html coverage report in `$(BUILD_DIR_BASE)/coverage_report/html` directory.
* `cov-data-clean` - removes all coverage data files and reports.
To generate report type the following command:
`make lcov-report`
+ For CMake-based build system, type `cmake --build build/ --target lcov-report`
+
The sample output of the command is below:
```