Merge branch 'bugfix/cmakev2-coredump-default-component_v6.1' into 'release/v6.1'

fix(cmakev2): include config-selected default components (v6.1)

See merge request espressif/esp-idf!51930
This commit is contained in:
Roland Dobai
2026-08-27 08:21:54 +02:00
5 changed files with 86 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
idf_build_get_property(target IDF_TARGET)
idf_build_get_property(non_os_build NON_OS_BUILD)
if(IDF_BUILD_V2 AND NOT non_os_build AND NOT "${target}" STREQUAL "linux")
if(CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME OR CONFIG_ESP_SYSTEM_PANIC_GDBSTUB)
idf_project_add_default_build_component(esp_gdbstub)
endif()
endif()

View File

@@ -0,0 +1,11 @@
idf_build_get_property(target IDF_TARGET)
idf_build_get_property(non_os_build NON_OS_BUILD)
if(IDF_BUILD_V2 AND CONFIG_ESP_COREDUMP_ENABLE
AND NOT non_os_build
AND NOT "${target}" STREQUAL "linux")
# This ensures that the component is added to the build when coredump is enabled,
# even if no other component depends on it.
# This allows users to simply enable it in menuconfig without needing to modify their component dependencies.
idf_project_add_default_build_component(espcoredump)
endif()

View File

@@ -582,6 +582,12 @@ endfunction()
component is already included, the idf_component_include function
simply returns, as there is nothing further to do except add a new
alias target if requested.
PROJECT_DEFAULT_EXTRA_COMPONENTS
Internal list of additional components to include in the executable
created by idf_project_default. Components should use
idf_project_add_default_build_component rather than modifying this
property directly.
#]]
add_library(idf_build_properties INTERFACE)

View File

@@ -730,6 +730,28 @@ function(idf_build_generate_flasher_args)
INPUT "${build_dir}/flasher_args.json.in")
endfunction()
#[[api
.. cmakev2:function:: idf_project_add_default_build_component
.. code-block:: cmake
idf_project_add_default_build_component(<component>...)
*component[in]*
Component name to include in the executable created by
:cmakev2:ref:`idf_project_default`.
Add components to the default project executable. This is intended for
components that need to be built based on sdkconfig alone, for example to
provide linker-section registrations, without making another component
depend on them. This is e.g. the case with coredump which is simply enabled
based on CONFIG_ESP_COREDUMP_ENABLE option, but no other components depend it.
#]]
function(idf_project_add_default_build_component)
idf_build_set_property(PROJECT_DEFAULT_EXTRA_COMPONENTS "${ARGN}" APPEND)
endfunction()
#[[
.. cmakev2:macro:: __project_default
@@ -751,6 +773,11 @@ function(__project_default)
set(root_components ${shim_components})
else()
set(root_components main)
idf_build_get_property(extra_default_components PROJECT_DEFAULT_EXTRA_COMPONENTS)
if(extra_default_components)
list(APPEND root_components ${extra_default_components})
list(REMOVE_DUPLICATES root_components)
endif()
endif()
idf_build_executable("${executable}"

View File

@@ -0,0 +1,34 @@
# SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import json
import logging
from pathlib import Path
import pytest
from test_build_system_helpers import IdfPyFunc
@pytest.mark.usefixtures('test_app_copy')
def test_config_selected_default_components(idf_py: IdfPyFunc) -> None:
"""Components with a project_include.cmake that calls idf_project_add_default_build_component()
must be pulled into the default build when their Kconfig feature is enabled, even though nothing
in the project explicitly depends on them.
Enable coredump and gdbstub via sdkconfig.defaults, build, and assert both components end up in
build_components.
"""
logging.info('Testing config-selected default components (coredump, gdbstub)')
# Coredump to UART (no dedicated coredump partition needed) and runtime gdbstub.
Path('sdkconfig.defaults').write_text('CONFIG_ESP_COREDUMP_ENABLE_TO_UART=y\nCONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME=y\n')
idf_py('build')
proj_desc = json.loads(Path('build/project_description.json').read_text())
build_components = proj_desc.get('build_components', [])
for comp in ('espcoredump', 'esp_gdbstub'):
assert comp in build_components, (
f'{comp} should be added as a default build component when its feature is enabled, '
f'got build_components: {build_components}'
)