From 0505ced81d85f1c5e1fbcf4bf080f4d90f17afe1 Mon Sep 17 00:00:00 2001 From: Frantisek Hrbata Date: Thu, 26 Mar 2026 16:09:27 +0100 Subject: [PATCH] fix(vfs): initialize local variables in Linux target block to prevent scope leakage In CMake v2's recursive component evaluation model, when a component triggers the inclusion of another component via idf_component_include(), the child component's directory scope inherits variables from the caller's scope chain through the idf_component_include() function scope and add_subdirectory(). The vfs component's Linux target block used list(APPEND ...) without first initializing the srcs, inc, and priv_inc variables. This was harmless when vfs was evaluated before esp_stdio, but after commit 5fac0b738645 ("feat(console): Move IO initialization outside of the console component"), esp_stdio became a real component for the Linux target and started calling idf_component_include(vfs). When esp_stdio is evaluated first, its srcs variable (containing stdio_port.c and linux/esp_stdio_linux.c) leaks into vfs's scope, causing the build to fail with "Cannot find source file: components/vfs/stdio_port.c". Fix by explicitly initializing all local variables at the top of the Linux target block before appending to them. Signed-off-by: Frantisek Hrbata --- components/vfs/CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/components/vfs/CMakeLists.txt b/components/vfs/CMakeLists.txt index 0611091dcb..788e4e5cb0 100644 --- a/components/vfs/CMakeLists.txt +++ b/components/vfs/CMakeLists.txt @@ -2,6 +2,9 @@ idf_build_get_property(target IDF_TARGET) # On Linux, we only support a few features, hence this simple component registration if(${target} STREQUAL "linux") + set(srcs) + set(inc) + set(priv_inc) list(APPEND inc include) if(CONFIG_VFS_SUPPORT_IO)