mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
feat(tools): export information about all components in __COMPONENT_TARGETS
Add new "all_component_info" dictionary into the project_description.json file. It contains information about all registered components presented in the __COMPONENT_TARGETS list. Since components in this list are not fully evaluated, because only the first stage of cmakefiles processing is done, it does not contain the same information as the "build_component_info" dictionary. The "type", "file" and "sources" variables are missing. Most of the properties are already attached to the component target, so this only adds INCLUDE_DIRS property to the target during the first cmakefiles processing stage. The "all_component_info" dict is generated in a separate function, even though the original function for "build_component_info" could be adjusted. This introduces a little bit of boilerplate, but keeps it logically separated and probably easier if we want to extend it in the future. Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
This commit is contained in:
parent
17aa60886c
commit
87afd5e829
@ -119,7 +119,7 @@ function(paths_with_spaces_to_list variable_name)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(__component_info components output)
|
||||
function(__build_component_info components output)
|
||||
set(components_json "")
|
||||
foreach(name ${components})
|
||||
__component_get_target(target ${name})
|
||||
@ -187,6 +187,62 @@ function(__component_info components output)
|
||||
set(${output} "${components_json}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(__all_component_info output)
|
||||
set(components_json "")
|
||||
|
||||
idf_build_get_property(build_prefix __PREFIX)
|
||||
idf_build_get_property(component_targets __COMPONENT_TARGETS)
|
||||
|
||||
foreach(target ${component_targets})
|
||||
__component_get_property(name ${target} COMPONENT_NAME)
|
||||
__component_get_property(alias ${target} COMPONENT_ALIAS)
|
||||
__component_get_property(prefix ${target} __PREFIX)
|
||||
__component_get_property(dir ${target} COMPONENT_DIR)
|
||||
__component_get_property(type ${target} COMPONENT_TYPE)
|
||||
__component_get_property(lib ${target} COMPONENT_LIB)
|
||||
__component_get_property(reqs ${target} REQUIRES)
|
||||
__component_get_property(include_dirs ${target} INCLUDE_DIRS)
|
||||
__component_get_property(priv_reqs ${target} PRIV_REQUIRES)
|
||||
__component_get_property(managed_reqs ${target} MANAGED_REQUIRES)
|
||||
__component_get_property(managed_priv_reqs ${target} MANAGED_PRIV_REQUIRES)
|
||||
|
||||
if(prefix STREQUAL build_prefix)
|
||||
set(name ${name})
|
||||
else()
|
||||
set(name ${alias})
|
||||
endif()
|
||||
|
||||
make_json_list("${reqs}" reqs)
|
||||
make_json_list("${priv_reqs}" priv_reqs)
|
||||
make_json_list("${managed_reqs}" managed_reqs)
|
||||
make_json_list("${managed_priv_reqs}" managed_priv_reqs)
|
||||
make_json_list("${include_dirs}" include_dirs)
|
||||
|
||||
string(JOIN "\n" component_json
|
||||
" \"${name}\": {"
|
||||
" \"alias\": \"${alias}\","
|
||||
" \"target\": \"${target}\","
|
||||
" \"prefix\": \"${prefix}\","
|
||||
" \"dir\": \"${dir}\","
|
||||
" \"lib\": \"${lib}\","
|
||||
" \"reqs\": ${reqs},"
|
||||
" \"priv_reqs\": ${priv_reqs},"
|
||||
" \"managed_reqs\": ${managed_reqs},"
|
||||
" \"managed_priv_reqs\": ${managed_priv_reqs},"
|
||||
" \"include_dirs\": ${include_dirs}"
|
||||
" }"
|
||||
)
|
||||
string(CONFIGURE "${component_json}" component_json)
|
||||
if(NOT "${components_json}" STREQUAL "")
|
||||
string(APPEND components_json ",\n")
|
||||
endif()
|
||||
string(APPEND components_json "${component_json}")
|
||||
endforeach()
|
||||
string(PREPEND components_json "{\n")
|
||||
string(APPEND components_json "\n }")
|
||||
set(${output} "${components_json}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
#
|
||||
# Output the built components to the user. Generates files for invoking esp_idf_monitor
|
||||
# that doubles as an overview of some of the more important build properties.
|
||||
@ -251,7 +307,8 @@ function(__project_info test_components)
|
||||
make_json_list("${build_component_paths};${test_component_paths}" build_component_paths_json)
|
||||
make_json_list("${common_component_reqs}" common_component_reqs_json)
|
||||
|
||||
__component_info("${build_components};${test_components}" build_component_info_json)
|
||||
__build_component_info("${build_components};${test_components}" build_component_info_json)
|
||||
__all_component_info(all_component_info_json)
|
||||
|
||||
# The configure_file function doesn't process generator expressions, which are needed
|
||||
# e.g. to get component target library(TARGET_LINKER_FILE), so the project_description
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"version": "1",
|
||||
"version": "1.1",
|
||||
"project_name": "${PROJECT_NAME}",
|
||||
"project_version": "${PROJECT_VER}",
|
||||
"project_path": "${PROJECT_PATH}",
|
||||
@ -28,5 +28,6 @@
|
||||
"build_components" : ${build_components_json},
|
||||
"build_component_paths" : ${build_component_paths_json},
|
||||
"build_component_info" : ${build_component_info_json},
|
||||
"all_component_info" : ${all_component_info_json},
|
||||
"debug_prefix_map_gdbinit": "${debug_prefix_map_gdbinit}"
|
||||
}
|
||||
|
@ -76,6 +76,7 @@ macro(idf_component_register)
|
||||
set(__component_requires "${__REQUIRES}")
|
||||
set(__component_kconfig "${__KCONFIG}")
|
||||
set(__component_kconfig_projbuild "${__KCONFIG_PROJBUILD}")
|
||||
set(__component_include_dirs "${__INCLUDE_DIRS}")
|
||||
set(__component_registered 1)
|
||||
return()
|
||||
endmacro()
|
||||
@ -107,11 +108,13 @@ function(__component_get_requirements)
|
||||
|
||||
spaces2list(__component_requires)
|
||||
spaces2list(__component_priv_requires)
|
||||
spaces2list(__component_include_dirs)
|
||||
|
||||
set(__component_requires "${__component_requires}" PARENT_SCOPE)
|
||||
set(__component_priv_requires "${__component_priv_requires}" PARENT_SCOPE)
|
||||
set(__component_kconfig "${__component_kconfig}" PARENT_SCOPE)
|
||||
set(__component_kconfig_projbuild "${__component_kconfig_projbuild}" PARENT_SCOPE)
|
||||
set(__component_include_dirs "${__component_include_dirs}" PARENT_SCOPE)
|
||||
set(__component_registered ${__component_registered} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
@ -141,7 +144,8 @@ foreach(__component_target ${__component_targets})
|
||||
set(__contents
|
||||
"__component_set_property(${__component_target} REQUIRES \"${__component_requires}\")
|
||||
__component_set_property(${__component_target} PRIV_REQUIRES \"${__component_priv_requires}\")
|
||||
__component_set_property(${__component_target} __COMPONENT_REGISTERED ${__component_registered})"
|
||||
__component_set_property(${__component_target} __COMPONENT_REGISTERED ${__component_registered})
|
||||
__component_set_property(${__component_target} INCLUDE_DIRS \"${__component_include_dirs}\")"
|
||||
)
|
||||
|
||||
if(__component_kconfig)
|
||||
|
Loading…
Reference in New Issue
Block a user