mirror of
https://github.com/espressif/esp-idf.git
synced 2026-09-22 13:01:16 +03:00
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:
8
components/esp_gdbstub/project_include.cmake
Normal file
8
components/esp_gdbstub/project_include.cmake
Normal 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()
|
||||
11
components/espcoredump/project_include.cmake
Normal file
11
components/espcoredump/project_include.cmake
Normal 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()
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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}"
|
||||
|
||||
34
tools/test_build_system/buildv2/test_default_components.py
Normal file
34
tools/test_build_system/buildv2/test_default_components.py
Normal 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}'
|
||||
)
|
||||
Reference in New Issue
Block a user