cmakev2 does not use configdep yet, so the manually specified variable
CONFIGDEP_ENABLE is unused. CMake warns about it, which causes CI to
fail. Until configdep is adopted by cmakev2, suppress the warning.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add build-level tests verifying configdep selective rebuild behavior:
- test_configdep.py: selective rebuild (only affected .obj rebuilt) and
ELF string verification after Kconfig toggle
- test_rebuild_configdep.py: full rebuild graph tests with configdep enabled,
including the two-build "settle" pattern for .cdep stub timestamps
Place the configdep test app in tools/test_build_system/configdep_test_app/
alongside the build system test infrastructure. Split configdep-specific
rebuild coverage from pure CMake/Ninja rebuild tests (test_rebuild.py runs
with configdep disabled via a module-local idf_py fixture).
The esp-idf-configdep utility works as a compiler wrapper. It lets the
compiler compile the app and checks whether -MF option was used to
generate dependency files. If yes, it checks for sdkconfig.h dependency
in those files.
Target file depending on sdkconfig.h is then scanned for all CONFIG_*
occurrences and the dependency file is altered so that the given target
file is marked as "dirty" only if the config options it actually uses
are changed.
This ensures that after a configuration update, only affected files are
rebuilt, reducing incremental build times.
The compiler launcher mechanism is changed from RULE_LAUNCH_COMPILE
(Makefile-only) to CMAKE_*_COMPILER_LAUNCHER (generator-agnostic),
enabling launcher chaining (configdep -> ccache -> compiler).
Made-with: Cursor
When esp-idf-kconfig >= 3.9.0 is installed, we can use the optimized
menuconfig target without the need to preprocess the sdkconfig file by
kconfgen (removing deprecated options - menuconfig - readding deprecated
options).
Also removed unused {menuconfig_depends} from the new target.
Co-authored-by: Cursor <cursoragent@cursor.com>
Some config options, like IDF_TARGET, are present in
sdkconfig.defaults even though they are promptless. The build system
handles them manually and passes them to esp-idf-kconfig via
config.env. However, esp-idf-kconfig reports them like a normal
promptless symbol, which causes confusion.
This commit adds KCONFIG_PROMPTLESS_NO_WARN — a semicolon-separated
list of config option names that, even though promptless, should be
excluded from the report.
Closes https://github.com/espressif/esp-idf/issues/18441
Separate the misspelled KConfig.projbuild test case into its own test app
so it doesn't interfere with the general-purpose build_test_app. The test
now uses a pytest marker to select kconfig_test_app as the source.
This command will allow users to resolve mismatches in default values
between sdkconfig and Kconfig according to a policy specified:
* sdkconfig: Using default values from sdkconfig (backward compatible)
* interactive: User can choose the source for every affected config
option separatedly
* kconfig: Using default values from Kconfig
* Project Configuration Guide: how to configure the project, purpose of
sdkconfig.defaults, where is the configuration stored...
* Component configuration: how to write Kconfig files, how to ensure
backward compatibility...
Also, general information about Kconfig and its files was added. Other parts of the
documentation (e.g. build-system) now point to these new guides in order
to provide more info.