Skip to content

Commit

Permalink
Merge pull request #149 from EthicalML/145_codecov
Browse files Browse the repository at this point in the history
Adding test code coverage using gcov and lcov
  • Loading branch information
axsaucedo authored Feb 13, 2021
2 parents ec04dc6 + f3ed6ec commit 9cb4c2f
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 5 deletions.
16 changes: 16 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ set(CMAKE_VERBOSE_MAKEFILE on)

# Enable or disable targets
option(KOMPUTE_OPT_BUILD_TESTS "Enable if you want to build tests" 0)
option(KOMPUTE_OPT_CODE_COVERAGE "Enable if you want code coverage" 0)
option(KOMPUTE_OPT_BUILD_DOCS "Enable if you want to build documentation" 0)
option(KOMPUTE_OPT_BUILD_SHADERS "Enable if you want to re-build all shader files" 0)
option(KOMPUTE_OPT_BUILD_SINGLE_HEADER "Enable if you want to build the single header file" 0)
Expand Down Expand Up @@ -41,6 +42,21 @@ endif()
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG=1 ${KOMPUTE_EXTRA_CXX_FLAGS} -DUSE_DEBUG_EXTENTIONS")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DRELEASE=1 ${KOMPUTE_EXTRA_CXX_FLAGS}")

if(KOMPUTE_OPT_CODE_COVERAGE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage --coverage")

set(CODECOV_DIR
${CMAKE_CURRENT_BINARY_DIR}/codecov/)
set(CODECOV_DIR_LCOV
${CODECOV_DIR}lcov/)
set(CODECOV_FILENAME_LCOV_INFO
lcov.info)
set(CODECOV_FILENAME_LCOV_INFO_FULL
lcov_full.info)
set(CODECOV_DIR_HTML
${CODECOV_DIR}html/)
endif()

# Allow scripts to call main kompute Makefile
function(kompute_make KOMPUTE_MAKE_TARGET)
add_custom_target(${KOMPUTE_MAKE_TARGET}
Expand Down
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ mk_cmake:
-DKOMPUTE_OPT_BUILD_SINGLE_HEADER=1 \
-DKOMPUTE_OPT_ENABLE_SPDLOG=1 \
-DSPDLOG_INSTALL=1 \
-DKOMPUTE_OPT_CODE_COVERAGE=1 \
-G "Unix Makefiles"

mk_build_all:
Expand Down Expand Up @@ -179,6 +180,9 @@ generate_python_docstrings:
install_python_reqs:
python3 -m pip install -r scripts/requirements.txt

install_lcov:
sudo apt install lcov -y

build_shaders:
python3 scripts/convert_shaders.py \
--shader-path shaders/glsl \
Expand Down
31 changes: 26 additions & 5 deletions docs/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,14 @@ set(DOXYFILE_IN
${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
set(DOXYFILE_OUT
${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
set(SPHINX_SOURCE
${CMAKE_CURRENT_SOURCE_DIR})
set(SPHINX_BUILD
${CMAKE_CURRENT_BINARY_DIR}/sphinx)
set(CODECOV_DOCS_DIR
${SPHINX_BUILD}/codecov/)
set(CODECOV_DOCS_INDEX_FILE
${CODECOV_DOCS_DIR}/index.html})

# Perform replacement with cmake vars inside Doxifine.in
configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT} @ONLY)
Expand All @@ -33,19 +41,32 @@ add_custom_command(
COMMENT "Generating docs"
)

add_custom_target(gendoxygen ALL
DEPENDS ${DOXYGEN_INDEX_FILE})
if(KOMPUTE_OPT_CODE_COVERAGE)
add_custom_target(gendoxygen ALL
DEPENDS ${DOXYGEN_INDEX_FILE} ${CODECOV_DOCS_INDEX_FILE})
else()
add_custom_target(gendoxygen ALL
DEPENDS ${DOXYGEN_INDEX_FILE})
endif()

#####################################################
########### CODECOV DOCS ###############
#####################################################

add_custom_command(
OUTPUT ${CODECOV_DOCS_INDEX_FILE}
COMMAND ${CMAKE_COMMAND}
-E copy_directory
${CODECOV_DIR_HTML}
${CODECOV_DOCS_DIR}
DEPENDS codecov_genhtml)

#####################################################
########### Sphinx ###############
#####################################################

find_package(Sphinx REQUIRED)

set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR})
set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/sphinx)

add_custom_target(gensphinx ALL
COMMAND
${SPHINX_EXECUTABLE} -b html
Expand Down
1 change: 1 addition & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ Documentation Index (as per sidebar)
C++ Converting GLSL/HLSL Shaders to Cpp Headers <overview/shaders-to-headers>
C++ Extending Kompute with Custom Operations <overview/custom-operations>
C++ Class Documentation & Reference <overview/reference>
C++ Code Coverage <https://kompute.cc/codecov/>

.. toctree::
:titlesonly:
Expand Down
53 changes: 53 additions & 0 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,57 @@ target_link_libraries(test_kompute PRIVATE kompute)

add_test(NAME test_kompute COMMAND test_kompute)

#####################################################
#################### CODECOV #######################
#####################################################

if (KOMPUTE_OPT_CODE_COVERAGE)
if(NOT UNIX)
message(
FATAL_ERROR
"KOMPUTE_OPT_CODE_COVERAGE can only be enabled in unix based systems due to limitation on gcov")
endif()

add_custom_target(codecov_run_tests
COMMAND make -C ${PROJECT_SOURCE_DIR} mk_run_tests
DEPENDS test_kompute)

add_custom_target(codecov_copy_files
COMMAND ${CMAKE_COMMAND}
-E copy_directory
${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/test_kompute.dir/
${CODECOV_DIR}
COMMAND ${CMAKE_COMMAND}
-E copy_directory
${CMAKE_CURRENT_BINARY_DIR}/../src/CMakeFiles/kompute.dir/
${CODECOV_DIR}
DEPENDS test_kompute codecov_run_tests)

add_custom_target(codecov_gcov
COMMAND gcov
-b -c "*.gcno"
WORKING_DIRECTORY ${CODECOV_DIR}
DEPENDS codecov_copy_files)

add_custom_target(codecov_lcov
COMMAND lcov
--capture
-o ${CODECOV_FILENAME_LCOV_INFO_FULL}
-d .
COMMAND lcov
--extract
${CODECOV_FILENAME_LCOV_INFO_FULL}
-o ${CODECOV_FILENAME_LCOV_INFO}
-d .
"*/src/*" "*/test/*"
WORKING_DIRECTORY ${CODECOV_DIR}
DEPENDS codecov_gcov)

add_custom_target(codecov_genhtml
COMMAND genhtml
${CODECOV_FILENAME_LCOV_INFO}
--output-directory ${CODECOV_DIR_HTML}
WORKING_DIRECTORY ${CODECOV_DIR}
DEPENDS codecov_lcov)
endif()

0 comments on commit 9cb4c2f

Please sign in to comment.