IonizationChamber/DevOps/Cmake/DocsCoverage.cmake

64 wiersze
2.6 KiB
CMake
Executable File

cmake_minimum_required(VERSION 3.31)
# Find the required executables
find_program(DOXYGEN_EXECUTABLE doxygen)
find_program(PYTHON_EXECUTABLE python3)
# Python3 for invoking Coverxygen,
# use handmade venv to not polute docker with python packages
set(PYTHON_EXECUTABLE "/workspace/venv/bin/python3")
find_program(GENHTML_EXECUTABLE genhtml)
if(DOXYGEN_EXECUTABLE)
set(DOXYGEN_DIRS
"${CMAKE_SOURCE_DIR}/Software/Firmware/Application/"
"${CMAKE_SOURCE_DIR}/Software/Firmware/Device/"
"${CMAKE_SOURCE_DIR}/Software/Firmware/Driver/"
"${CMAKE_SOURCE_DIR}/Software/Firmware/UnitTest/"
)
string(REPLACE ";" " " DOXYGEN_DIRS_STR "${DOXYGEN_DIRS}")
set(DOXYGEN_INPUT_DIR ${DOXYGEN_DIRS_STR})
set(DOXYGEN_OUTPUT_DIR "${CMAKE_SOURCE_DIR}/DevOps/BuildArtifacts/DocsCoverage/")
# Ensure the output directory exists
file(MAKE_DIRECTORY "${DOXYGEN_OUTPUT_DIR}")
# Set the paths for the Doxyfile template and the final generated Doxyfile
set(DOXYFILE_IN "${CMAKE_SOURCE_DIR}/DevOps/Scripts/Doxyfile.in")
set(DOXYFILE_OUT "${CMAKE_SOURCE_DIR}/DevOps/Scripts/Doxyfile")
# Create a template Doxyfile with CMake variables
configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT} @ONLY)
# Create a custom target to run Doxygen for generating XML output (needed for Coverxygen)
add_custom_target(docs
COMMAND ${DOXYGEN_EXECUTABLE} "${DOXYFILE_OUT}"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
COMMENT "Running Doxygen to detect missing comments and generate XML..."
VERBATIM
)
# Run Coverxygen via Python3 (if Python is available)
if(PYTHON_EXECUTABLE)
add_custom_command(TARGET docs
POST_BUILD
COMMAND ${PYTHON_EXECUTABLE} -m coverxygen --format lcov
--kind enum,enumvalue,friend,typedef,variable,function,class,struct,union,define
--xml-dir "${DOXYGEN_OUTPUT_DIR}/xml"
--src-dir "${DOXYGEN_INPUT_DIR}"
--output "${DOXYGEN_OUTPUT_DIR}/doc-coverage.info"
COMMAND ${GENHTML_EXECUTABLE} --no-function-coverage
--no-branch-coverage "${DOXYGEN_OUTPUT_DIR}/doc-coverage.info"
-o "${DOXYGEN_OUTPUT_DIR}"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
COMMENT "Generating Coverxygen documentation coverage report..."
VERBATIM
)
else()
message(WARNING "Python3 not found. Skipping Coverxygen coverage report generation.")
endif()
else()
message(WARNING "Doxygen not found. Skipping missing documentation check.")
endif()