Sfoglia il codice sorgente

cmake: Write configuration & component metadata to project_description.json

Angus Gratton 7 anni fa
parent
commit
56902f0054

+ 5 - 0
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}

+ 4 - 0
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

+ 8 - 1
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}
 }

+ 6 - 0
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()