Skip to content

Commit

Permalink
Merge branch 'fix/component_manager_load_all_local_components_v5.2' i…
Browse files Browse the repository at this point in the history
…nto 'release/v5.2'

fix: component manager load all component dirs even set(COMPONENTS ...) (v5.2)

See merge request espressif/esp-idf!30433
  • Loading branch information
kumekay committed Jun 12, 2024
2 parents 3c40fb2 + c77c218 commit 3e45883
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 16 deletions.
14 changes: 11 additions & 3 deletions tools/cmake/build.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -516,9 +516,17 @@ macro(idf_build_process target)
set(local_components_list_file ${build_dir}/local_components_list.temp.yml)

set(__contents "components:\n")
foreach(__component_name ${components})
idf_component_get_property(__component_dir ${__component_name} COMPONENT_DIR)
set(__contents "${__contents} - name: \"${__component_name}\"\n path: \"${__component_dir}\"\n")
idf_build_get_property(build_component_targets BUILD_COMPONENT_TARGETS)
foreach(__build_component_target ${build_component_targets})
__component_get_property(__component_name ${__build_component_target} COMPONENT_NAME)
__component_get_property(__component_dir ${__build_component_target} COMPONENT_DIR)

# Exclude components could be passed with -DEXCLUDE_COMPONENTS
# after the call to __component_add finished in the last run.
# Need to check if the component is excluded again
if(NOT __component_name IN_LIST EXCLUDE_COMPONENTS)
set(__contents "${__contents} - name: \"${__component_name}\"\n path: \"${__component_dir}\"\n")
endif()
endforeach()

file(WRITE ${local_components_list_file} "${__contents}")
Expand Down
3 changes: 2 additions & 1 deletion tools/cmake/component.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -192,8 +192,9 @@ function(__component_add component_dir prefix)
# Set Kconfig related properties on the component
__kconfig_component_init(${component_target})

# set BUILD_COMPONENT_DIRS build property
# these two properties are used to keep track of the components known to the build system
idf_build_set_property(BUILD_COMPONENT_DIRS ${component_dir} APPEND)
idf_build_set_property(BUILD_COMPONENT_TARGETS ${component_target} APPEND)
endfunction()

#
Expand Down
45 changes: 33 additions & 12 deletions tools/test_build_system/test_component_manager.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,46 @@
# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import os.path
from pathlib import Path

import pytest
from test_build_system_helpers import IdfPyFunc
from test_build_system_helpers import replace_in_file


@pytest.mark.test_app_copy('examples/get-started/blink')
def test_dependency_lock(idf_py: IdfPyFunc, test_app_copy: Path) -> None:
with open(test_app_copy / 'CMakeLists.txt', 'r+') as fw:
data = fw.read()
fw.seek(0)
fw.write(
data.replace(
'project(blink)',
'idf_build_set_property(DEPENDENCIES_LOCK dependencies.lock.${IDF_TARGET})\nproject(blink)',
)
)
replace_in_file(
test_app_copy / 'CMakeLists.txt',
search='# placeholder_after_include_project_cmake',
replace='idf_build_set_property(DEPENDENCIES_LOCK dependencies.lock.${IDF_TARGET})',
)

idf_py('add-dependency', 'example/cmp')
idf_py('fullclean')
idf_py('reconfigure')
assert os.path.isfile(test_app_copy / 'dependencies.lock.esp32')
assert not os.path.isfile(test_app_copy / 'dependencies.lock')


def test_trimmed_components_still_passed_to_cmake(idf_py: IdfPyFunc, test_app_copy: Path) -> None:
replace_in_file(
test_app_copy / 'CMakeLists.txt',
search='# placeholder_after_include_project_cmake',
replace='set(COMPONENTS main)',
)

replace_in_file(
test_app_copy / 'main' / 'CMakeLists.txt',
search='# placeholder_inside_idf_component_register',
replace='REQUIRES foo',
)

os.makedirs(test_app_copy / 'components')
idf_py('create-component', '-C', 'components', 'foo')
idf_py('add-dependency', '--component', 'foo', 'example/cmp')

idf_py('reconfigure')

with open('dependencies.lock', 'r') as f:
fs = f.read()

assert ' example/cmp:' in fs

0 comments on commit 3e45883

Please # to comment.