diff --git a/tools/cmake/kconfig.cmake b/tools/cmake/kconfig.cmake index 277568959..cc2156305 100644 --- a/tools/cmake/kconfig.cmake +++ b/tools/cmake/kconfig.cmake @@ -52,6 +52,11 @@ function(kconfig_process_config) set(defaults_arg --defaults "${SDKCONFIG_DEFAULTS}") endif() + # Set these in the parent scope, so that they can be written to project_description.json + set(kconfigs "${kconfigs}") + set(COMPONENT_KCONFIGS "${kconfigs}" PARENT_SCOPE) + set(COMPONENT_KCONFIGS_PROJBUILD "${kconfigs_projbuild}" PARENT_SCOPE) + set(confgen_basecommand ${PYTHON} ${IDF_PATH}/tools/kconfig_new/confgen.py --kconfig ${ROOT_KCONFIG} diff --git a/tools/cmake/project.cmake b/tools/cmake/project.cmake index 115963c56..26be56eda 100644 --- a/tools/cmake/project.cmake +++ b/tools/cmake/project.cmake @@ -108,8 +108,12 @@ macro(project name) idf_add_executable() # Write project description JSON file + make_json_list("${BUILD_COMPONENTS}" build_components_json) + make_json_list("${BUILD_COMPONENT_PATHS}" build_component_paths_json) configure_file("${IDF_PATH}/tools/cmake/project_description.json.in" "${CMAKE_BINARY_DIR}/project_description.json") + unset(build_components_json) + unset(build_component_paths_json) # # Finish component registration (add cross-dependencies, make diff --git a/tools/cmake/project_description.json.in b/tools/cmake/project_description.json.in index 1acffbd62..878dce3b3 100644 --- a/tools/cmake/project_description.json.in +++ b/tools/cmake/project_description.json.in @@ -3,9 +3,16 @@ "project_path": "${PROJECT_PATH}", "build_dir": "${CMAKE_BINARY_DIR}", "config_file": "${SDKCONFIG}", + "config_defaults": "${SDKCONFIG_DEFAULTS}", "app_elf": "${PROJECT_NAME}.elf", "app_bin": "${PROJECT_NAME}.bin", "git_revision": "${IDF_VER}", "phy_data_partition": "${CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION}", - "monitor_baud" : "${CONFIG_MONITOR_BAUD}" + "monitor_baud" : "${CONFIG_MONITOR_BAUD}", + "config_environment" : { + "COMPONENT_KCONFIGS" : "${COMPONENT_KCONFIGS}", + "COMPONENT_KCONFIGS_PROJBUILD" : "${COMPONENT_KCONFIGS_PROJBUILD}" + }, + "build_components" : ${build_components_json}, + "build_component_paths" : ${build_component_paths_json} } diff --git a/tools/cmake/utilities.cmake b/tools/cmake/utilities.cmake index f3c0c1981..e91385180 100644 --- a/tools/cmake/utilities.cmake +++ b/tools/cmake/utilities.cmake @@ -170,3 +170,9 @@ function(target_linker_script target scriptfile) # executable(s) the library is linked to. This is done manually in components.cmake. set_property(TARGET "${target}" APPEND PROPERTY LINK_DEPENDS "${abs_script}") endfunction() + +# Convert a CMake list to a JSON list and store it in a variable +function(make_json_list list variable) + string(REPLACE ";" "\", \"" result "[ \"${list}\" ]") + set("${variable}" "${result}" PARENT_SCOPE) +endfunction()