mirror of
https://github.com/espressif/esp-idf.git
synced 2026-09-22 13:01:16 +03:00
Merge branch 'task/remove_build_components_var_in_buildv2' into 'master'
change(build): drop BUILD_COMPONENTS support and migrate test_apps to not use it for buildv2 Closes IDF-15859 See merge request espressif/esp-idf!51695
This commit is contained in:
@@ -90,12 +90,7 @@ function(idf_build_get_property variable property)
|
||||
cmake_parse_arguments(ARG "${options}" "${one_value}" "${multi_value}" ${ARGN})
|
||||
|
||||
if("${property}" STREQUAL BUILD_COMPONENTS)
|
||||
# BUILD_COMPONENTS is populated by the Build system v1 compatibility
|
||||
# shim; reject only when running as a native Build system v2 project.
|
||||
idf_build_get_property(_v1_compat __V1_COMPAT_SHIM)
|
||||
if(NOT _v1_compat)
|
||||
idf_die("Build property 'BUILD_COMPONENTS' is not supported")
|
||||
endif()
|
||||
idf_die("Build property 'BUILD_COMPONENTS' is not supported")
|
||||
endif()
|
||||
|
||||
set(genexpr)
|
||||
|
||||
@@ -931,29 +931,12 @@ function(__project_default)
|
||||
set(project_elf "${executable}" PARENT_SCOPE)
|
||||
|
||||
# Provide Build system v1-compatible build properties so that existing
|
||||
# test apps and project CMakeLists.txt files that query EXECUTABLE or
|
||||
# BUILD_COMPONENTS continue to work when built through the shim.
|
||||
# test apps and project CMakeLists.txt files that query EXECUTABLE
|
||||
# continue to work when built through the shim.
|
||||
idf_build_get_property(v1_compat __V1_COMPAT_SHIM)
|
||||
if(v1_compat)
|
||||
idf_build_set_property(EXECUTABLE "${executable}")
|
||||
idf_build_set_property(EXECUTABLE_NAME "${executable}")
|
||||
|
||||
# BUILD_COMPONENTS: in Build system v1 this is the set of components
|
||||
# actually processed during the build (COMPONENTS + their transitive
|
||||
# REQUIRES within the restricted scope). Use LIBRARY_COMPONENTS_LINKED
|
||||
# from the Build system v2 library target which reflects the actual
|
||||
# list of components linked, plus the architecture component which
|
||||
# Build system v1 always includes but Build system v2 does not track
|
||||
# as a linked library.
|
||||
get_target_property(library ${executable} LIBRARY_INTERFACE)
|
||||
if(library)
|
||||
idf_library_get_property(linked_components "${library}" LIBRARY_COMPONENTS_LINKED)
|
||||
idf_build_get_property(target_arch IDF_TARGET_ARCH)
|
||||
if(target_arch AND NOT target_arch IN_LIST linked_components)
|
||||
list(APPEND linked_components ${target_arch})
|
||||
endif()
|
||||
idf_build_set_property(BUILD_COMPONENTS "${linked_components}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CONFIG_APP_BUILD_GENERATE_BINARIES AND TARGET idf::esptool_py)
|
||||
|
||||
@@ -601,3 +601,7 @@
|
||||
-
|
||||
re: "undefined reference to `esp_secure_boot_check_signature_on_update'"
|
||||
hint: "CONFIG_SECURE_SIGNED_ON_UPDATE_NO_SECURE_BOOT requires the startup signature check from the esp_image_verify component, which is not in the build. Add esp_image_verify (or app_update, which includes it) to the calling component's PRIV_REQUIRES or to the project's COMPONENTS list."
|
||||
|
||||
-
|
||||
re: "Build property 'BUILD_COMPONENTS' is not supported"
|
||||
hint: "The 'BUILD_COMPONENTS' build property does not exist in Build System v2, since components are not collected before they are evaluated. To check whether a component takes part in the build, use the '$<TARGET_EXISTS:idf::component_name>' generator expression instead. For details and a migration example, run 'idf.py docs -sp api-guides/build-system-v2/breaking-changes.html#cmakev2-build-components'"
|
||||
|
||||
@@ -56,7 +56,12 @@ idf_build_set_property(__BUILD_COMPONENT_DEPGRAPH_ENABLED 1)
|
||||
project(network_components)
|
||||
|
||||
# Get the actual build components included in the build
|
||||
idf_build_get_property(build_components BUILD_COMPONENTS)
|
||||
if(IDF_BUILD_V2)
|
||||
get_target_property(library ${project_elf} LIBRARY_INTERFACE)
|
||||
idf_library_get_property(build_components "${library}" LIBRARY_COMPONENTS_LINKED)
|
||||
else()
|
||||
idf_build_get_property(build_components BUILD_COMPONENTS)
|
||||
endif()
|
||||
|
||||
message(STATUS "Build components needed my main and ${component_under_test}:")
|
||||
foreach(comp ${build_components})
|
||||
|
||||
@@ -70,7 +70,12 @@ set(expected_components
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -nostdlib")
|
||||
|
||||
# Get all the components that were required to initialize this project
|
||||
idf_build_get_property(build_components BUILD_COMPONENTS)
|
||||
if(IDF_BUILD_V2)
|
||||
get_target_property(library ${project_elf} LIBRARY_INTERFACE)
|
||||
idf_library_get_property(build_components "${library}" LIBRARY_COMPONENTS_LINKED)
|
||||
else()
|
||||
idf_build_get_property(build_components BUILD_COMPONENTS)
|
||||
endif()
|
||||
|
||||
# Sort lists to be able to compare them literally
|
||||
list(SORT expected_components)
|
||||
|
||||
@@ -126,7 +126,12 @@ set(expected_components
|
||||
list(SORT expected_components)
|
||||
|
||||
|
||||
idf_build_get_property(build_components BUILD_COMPONENTS)
|
||||
if(IDF_BUILD_V2)
|
||||
get_target_property(library ${project_elf} LIBRARY_INTERFACE)
|
||||
idf_library_get_property(build_components "${library}" LIBRARY_COMPONENTS_LINKED)
|
||||
else()
|
||||
idf_build_get_property(build_components BUILD_COMPONENTS)
|
||||
endif()
|
||||
list(SORT build_components)
|
||||
|
||||
if(NOT "${expected_components}" STREQUAL "${build_components}")
|
||||
|
||||
@@ -64,7 +64,6 @@ expected_dep_violations = {
|
||||
# dependency graph captures edges that target_link_libraries creates at link
|
||||
# time but were never recorded as requires.
|
||||
if os.environ.get('IDF_BUILD_V2'):
|
||||
expected_dep_violations.setdefault('esp_common', []).extend(['efuse', 'bootloader_support', 'app_update'])
|
||||
expected_dep_violations['esp_system'].append('esp_app_format')
|
||||
|
||||
# Target-specific expected dependency violations
|
||||
|
||||
@@ -118,3 +118,24 @@ def test_build_components_not_available(idf_py: IdfPyFunc) -> None:
|
||||
check_file = Path('build/build_components_check.txt')
|
||||
assert check_file.exists(), 'Variable check file should be written before the fatal error'
|
||||
assert check_file.read_text().strip() == 'NOT_FOUND', 'BUILD_COMPONENTS variable should not be available in v2'
|
||||
|
||||
|
||||
@pytest.mark.usefixtures('test_app_copy')
|
||||
def test_build_components_rejected_through_shim(idf_py: IdfPyFunc) -> None:
|
||||
"""BUILD_COMPONENTS must be rejected even when building through the compatibility shim."""
|
||||
logging.info('Testing BUILD_COMPONENTS rejection through the compatibility shim')
|
||||
|
||||
# Arm the shim via the v1 project.cmake, then query BUILD_COMPONENTS before the graph is configured.
|
||||
Path('CMakeLists.txt').write_text(
|
||||
'cmake_minimum_required(VERSION 3.22)\n'
|
||||
'include($ENV{IDF_PATH}/tools/cmake/project.cmake)\n'
|
||||
'idf_build_get_property(_bc BUILD_COMPONENTS)\n'
|
||||
'project(build_test_app)\n'
|
||||
)
|
||||
|
||||
result = idf_py('reconfigure', check=False)
|
||||
|
||||
assert result.returncode != 0, 'reconfigure must fail when BUILD_COMPONENTS is queried through the shim'
|
||||
combined = (result.stdout or '') + (result.stderr or '')
|
||||
assert 'BUILD_COMPONENTS' in combined, 'Error output must mention BUILD_COMPONENTS'
|
||||
assert 'not supported' in combined.lower(), 'Error output must state that BUILD_COMPONENTS is not supported'
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
"CMake Error at /esp-idf/tools/cmakev2/build.cmake:93 (message): IDF: Build property 'BUILD_COMPONENTS' is not supported\n":
|
||||
"HINT: The 'BUILD_COMPONENTS' build property does not exist in Build System v2, since components are not collected before they are evaluated. To check whether a component takes part in the build, use the '$<TARGET_EXISTS:idf::component_name>' generator expression instead. For details and a migration example, run 'idf.py docs -sp api-guides/build-system-v2/breaking-changes.html#cmakev2-build-components'"
|
||||
|
||||
'ccache error: Failed to create temporary file\n':
|
||||
"HINT: On Windows, you should enable long path support in the installer, or disable ccache temporarily. See 'idf.py --help' or the documentation how to achieve this."
|
||||
|
||||
|
||||
Reference in New Issue
Block a user