doc: kconfig: Explain why zephyr/.config assigns promptless symbols
I think a lot of the confusion with promptless symbols being assigned might come from opening zephyr/.config, seeing that it assigns a bunch of promptless symbols, and assuming that Kconfig must respect those assignments, even though it doesn't. Explain why zephyr/.config assigns promptless symbols (it's because it doubles as configuration output). That should clarify things a bit. Also mention what "invisible" means for symbols early on in the page. Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
This commit is contained in:
parent
05f0d85b6a
commit
31822c6d5b
1 changed files with 45 additions and 3 deletions
|
@ -25,9 +25,17 @@ When deciding whether something belongs in Kconfig, it helps to distinguish
|
||||||
between symbols that have prompts and symbols that don't.
|
between symbols that have prompts and symbols that don't.
|
||||||
|
|
||||||
If a symbol has a prompt (e.g. ``bool "Enable foo"``), then the user can change
|
If a symbol has a prompt (e.g. ``bool "Enable foo"``), then the user can change
|
||||||
the symbol's value in the ``menuconfig`` or ``guiconfig`` interface (or by
|
the symbol's value in the ``menuconfig`` or ``guiconfig`` interface (see
|
||||||
manually editing configuration files). Therefore, only put a prompt on a symbol
|
:ref:`menuconfig`), or by manually editing configuration files. Conversely, a
|
||||||
if it makes sense for the user to change its value.
|
symbol without a prompt can never be changed directly by the user, not even by
|
||||||
|
manually editing configuration files.
|
||||||
|
|
||||||
|
Only put a prompt on a symbol if it makes sense for the user to change its
|
||||||
|
value.
|
||||||
|
|
||||||
|
Symbols without prompts are called *hidden* or *invisible* symbols, because
|
||||||
|
they don't show up in ``menuconfig`` and ``guiconfig``. Symbols that have
|
||||||
|
prompts can also be invisible, when their dependencies are not satisfied.
|
||||||
|
|
||||||
In Zephyr, Kconfig configuration is done after selecting a machine, so in
|
In Zephyr, Kconfig configuration is done after selecting a machine, so in
|
||||||
general, it does not make sense to put a prompt on a symbol that corresponds to
|
general, it does not make sense to put a prompt on a symbol that corresponds to
|
||||||
|
@ -416,6 +424,40 @@ interface, to make sure that things behave the way you expect. This is
|
||||||
especially true when making moderately complex changes like these.
|
especially true when making moderately complex changes like these.
|
||||||
|
|
||||||
|
|
||||||
|
Assignments to promptless symbols in configuration files
|
||||||
|
********************************************************
|
||||||
|
|
||||||
|
Assignments to hidden (promptless, also called *invisible*) symbols in
|
||||||
|
configuration files are always ignored. Hidden symbols get their value
|
||||||
|
indirectly from other symbols, via e.g. ``default`` and ``select``.
|
||||||
|
|
||||||
|
A common source of confusion is opening the output configuration file
|
||||||
|
(:file:`zephyr/.config`), seeing a bunch of assignments to hidden symbols,
|
||||||
|
and assuming that those assignments must be respected when the configuration is
|
||||||
|
read back in by Kconfig. In reality, all assignments to hidden symbols in
|
||||||
|
:file:`zephyr/.config` are ignored by Kconfig, like for other configuration
|
||||||
|
files.
|
||||||
|
|
||||||
|
To understand why :file:`zephyr/.config` still includes assignments to hidden
|
||||||
|
symbols, it helps to realize that :file:`zephyr/.config` serves two separate
|
||||||
|
purposes:
|
||||||
|
|
||||||
|
1. It holds the saved configuration, and
|
||||||
|
|
||||||
|
2. it holds configuration output. :file:`zephyr/.config` is parsed by the CMake
|
||||||
|
files to let them query configuration settings, for example.
|
||||||
|
|
||||||
|
The assignments to hidden symbols in :file:`zephyr/.config` are just
|
||||||
|
configuration output. Kconfig itself ignores assignments to hidden symbols when
|
||||||
|
calculating symbol values.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
A *minimal configuration*, which can be generated from within the
|
||||||
|
:ref:`menuconfig and guiconfig interfaces <menuconfig>`, could be considered
|
||||||
|
closer to just a saved configuration, without the full configuration output.
|
||||||
|
|
||||||
|
|
||||||
``depends on`` and ``string``/``int``/``hex`` symbols
|
``depends on`` and ``string``/``int``/``hex`` symbols
|
||||||
*****************************************************
|
*****************************************************
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue