kopia lustrzana https://github.com/espressif/esp-idf
62 wiersze
2.4 KiB
CMake
62 wiersze
2.4 KiB
CMake
# Component dependency graph generation helpers.
|
|
# To enable this functionality, add:
|
|
# idf_build_set_property(__BUILD_COMPONENT_DEPGRAPH_ENABLED 1)
|
|
# in the project CMakeLists.txt file between include(project.cmake) and project(name) calls.
|
|
#
|
|
# Graphviz file component_deps.dot will be produced in the build directory.
|
|
# To change the template, see component_deps.dot.in.
|
|
|
|
# depgraph_add_edge
|
|
#
|
|
# @brief Record an edge in the component dependency graph (dependent -> dependency)
|
|
#
|
|
# @param[in] dep_from dependent name
|
|
# @param[in] dep_to dependency name
|
|
# @param[in, optional] REQUIRES if given, record this as "REQUIRES" (public/interface) dependency
|
|
# @param[in, optional] PRIV_REQUIRES if given, record this as "PRIV_REQUIRES" (private) dependency
|
|
#
|
|
function(depgraph_add_edge dep_from dep_to)
|
|
cmake_parse_arguments(_ "REQUIRES;PRIV_REQUIRES" "" "" ${ARGN})
|
|
idf_build_get_property(depgraph_enabled __BUILD_COMPONENT_DEPGRAPH_ENABLED)
|
|
if(NOT depgraph_enabled)
|
|
return()
|
|
endif()
|
|
idf_build_get_property(common_reqs __COMPONENT_REQUIRES_COMMON)
|
|
|
|
set(attr)
|
|
if(__REQUIRES)
|
|
set(attr "[class=\"requires\"]")
|
|
elseif(__PRIV_REQUIRES)
|
|
set(attr "[class=\"priv_requires\" style=\"dotted\"]")
|
|
endif()
|
|
|
|
if(dep_to IN_LIST common_reqs)
|
|
# Don't record graph edges leading to "common" components, since every component has these dependencies.
|
|
# However, show which components are "common" by adding an edge from a node named "common".
|
|
# If necessary, add a new build property to customize this behavior.
|
|
if(NOT dep_from IN_LIST common_reqs)
|
|
idf_build_set_property(__BUILD_COMPONENT_DEPGRAPH "common -> ${dep_to}" APPEND)
|
|
endif()
|
|
else()
|
|
idf_build_set_property(__BUILD_COMPONENT_DEPGRAPH "${dep_from} -> ${dep_to} ${attr}" APPEND)
|
|
endif()
|
|
endfunction()
|
|
|
|
# depgraph_generate
|
|
#
|
|
# @brief Write the collected component dependency graph to a file. The file is in Graphviz (.dot) format.
|
|
#
|
|
# @param[in] out_path name of the output file
|
|
#
|
|
function(depgraph_generate out_path)
|
|
idf_build_get_property(depgraph_enabled __BUILD_COMPONENT_DEPGRAPH_ENABLED)
|
|
if(NOT depgraph_enabled)
|
|
return()
|
|
endif()
|
|
idf_build_get_property(depgraph __BUILD_COMPONENT_DEPGRAPH)
|
|
list(REMOVE_DUPLICATES depgraph)
|
|
string(REPLACE ";" ";\n" depgraph "${depgraph}")
|
|
configure_file("${IDF_PATH}/tools/cmake/component_deps.dot.in"
|
|
"${out_path}")
|
|
endfunction()
|