diff --git a/tools/cmake/project.cmake b/tools/cmake/project.cmake index 97b15d2896..3a61d14c7a 100644 --- a/tools/cmake/project.cmake +++ b/tools/cmake/project.cmake @@ -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 diff --git a/tools/cmake/project_description.json.in b/tools/cmake/project_description.json.in index feee0dd845..1805db5339 100644 --- a/tools/cmake/project_description.json.in +++ b/tools/cmake/project_description.json.in @@ -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}" } diff --git a/tools/cmake/scripts/component_get_requirements.cmake b/tools/cmake/scripts/component_get_requirements.cmake index 21d2da8614..89531881a4 100644 --- a/tools/cmake/scripts/component_get_requirements.cmake +++ b/tools/cmake/scripts/component_get_requirements.cmake @@ -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)