mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 11:10:54 +03:00
fix(cmakev2): include config-selected default components
This commit is contained in:
@@ -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()
|
||||||
@@ -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
|
component is already included, the idf_component_include function
|
||||||
simply returns, as there is nothing further to do except add a new
|
simply returns, as there is nothing further to do except add a new
|
||||||
alias target if requested.
|
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)
|
add_library(idf_build_properties INTERFACE)
|
||||||
|
|
||||||
|
|||||||
@@ -730,6 +730,28 @@ function(idf_build_generate_flasher_args)
|
|||||||
INPUT "${build_dir}/flasher_args.json.in")
|
INPUT "${build_dir}/flasher_args.json.in")
|
||||||
endfunction()
|
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
|
.. cmakev2:macro:: __project_default
|
||||||
|
|
||||||
@@ -751,6 +773,11 @@ function(__project_default)
|
|||||||
set(root_components ${shim_components})
|
set(root_components ${shim_components})
|
||||||
else()
|
else()
|
||||||
set(root_components main)
|
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()
|
endif()
|
||||||
|
|
||||||
idf_build_executable("${executable}"
|
idf_build_executable("${executable}"
|
||||||
|
|||||||
@@ -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