129 lines
3.8 KiB
ReStructuredText
129 lines
3.8 KiB
ReStructuredText
.. _kconfig_extensions:
|
|
|
|
Kconfig extensions
|
|
##################
|
|
|
|
Zephyr uses the `Kconfiglib <https://github.com/ulfalizer/Kconfiglib>`__
|
|
implementation of `Kconfig
|
|
<https://docs.kernel.org/kbuild/kconfig-language.html>`__,
|
|
which includes some Kconfig extensions:
|
|
|
|
- Default values can be applied to existing symbols without
|
|
:ref:`weakening <multiple_symbol_definitions>` the symbols dependencies
|
|
through the use of ``configdefault``.
|
|
|
|
.. code-block:: none
|
|
|
|
config FOO
|
|
bool "FOO"
|
|
depends on BAR
|
|
|
|
configdefault FOO
|
|
default y if FIZZ
|
|
|
|
The statement above is equivalent to:
|
|
|
|
.. code-block:: none
|
|
|
|
config FOO
|
|
bool "Foo"
|
|
default y if FIZZ
|
|
depends on BAR
|
|
|
|
``configdefault`` symbols cannot contain any fields other than ``default``,
|
|
however they can be wrapped in ``if`` statements. The two statements below
|
|
are equivalent:
|
|
|
|
.. code-block:: none
|
|
|
|
configdefault FOO
|
|
default y if BAR
|
|
|
|
if BAR
|
|
configdefault FOO
|
|
default y
|
|
endif # BAR
|
|
|
|
- Environment variables in ``source`` statements are expanded directly, meaning
|
|
no "bounce" symbols with ``option env="ENV_VAR"`` need to be defined.
|
|
|
|
.. note::
|
|
|
|
``option env`` has been removed from the C tools as of Linux 4.18 as well.
|
|
|
|
The recommended syntax for referencing environment variables is ``$(FOO)``
|
|
rather than ``$FOO``. This uses the new `Kconfig preprocessor
|
|
<https://docs.kernel.org/kbuild/kconfig-macro-language.html>`__.
|
|
The ``$FOO`` syntax for expanding environment variables is only supported for
|
|
backwards compatibility.
|
|
|
|
- The ``source`` statement supports glob patterns and includes each matching
|
|
file. A pattern is required to match at least one file.
|
|
|
|
Consider the following example:
|
|
|
|
.. code-block:: kconfig
|
|
|
|
source "foo/bar/*/Kconfig"
|
|
|
|
If the pattern ``foo/bar/*/Kconfig`` matches the files
|
|
:file:`foo/bar/baz/Kconfig` and :file:`foo/bar/qaz/Kconfig`, the statement
|
|
above is equivalent to the following two ``source`` statements:
|
|
|
|
.. code-block:: kconfig
|
|
|
|
source "foo/bar/baz/Kconfig"
|
|
source "foo/bar/qaz/Kconfig"
|
|
|
|
If no files match the pattern, an error is generated.
|
|
|
|
The wildcard patterns accepted are the same as for the Python `glob
|
|
<https://docs.python.org/3/library/glob.html>`__ module.
|
|
|
|
For cases where it's okay for a pattern to match no files (or for a plain
|
|
filename to not exist), a separate ``osource`` (*optional source*) statement
|
|
is available. ``osource`` is a no-op if no file matches.
|
|
|
|
.. note::
|
|
|
|
``source`` and ``osource`` are analogous to ``include`` and
|
|
``-include`` in Make.
|
|
|
|
- An ``rsource`` statement is available for including files specified with a
|
|
relative path. The path is relative to the directory of the :file:`Kconfig`
|
|
file that contains the ``rsource`` statement.
|
|
|
|
As an example, assume that :file:`foo/Kconfig` is the top-level
|
|
:file:`Kconfig` file, and that :file:`foo/bar/Kconfig` has the following
|
|
statements:
|
|
|
|
.. code-block:: kconfig
|
|
|
|
source "qaz/Kconfig1"
|
|
rsource "qaz/Kconfig2"
|
|
|
|
This will include the two files :file:`foo/qaz/Kconfig1` and
|
|
:file:`foo/bar/qaz/Kconfig2`.
|
|
|
|
``rsource`` can be used to create :file:`Kconfig` "subtrees" that can be
|
|
moved around freely.
|
|
|
|
``rsource`` also supports glob patterns.
|
|
|
|
A drawback of ``rsource`` is that it can make it harder to figure out where a
|
|
file gets included, so only use it if you need it.
|
|
|
|
- An ``orsource`` statement is available that combines ``osource`` and
|
|
``rsource``.
|
|
|
|
For example, the following statement will include :file:`Kconfig1` and
|
|
:file:`Kconfig2` from the current directory (if they exist):
|
|
|
|
.. code-block:: kconfig
|
|
|
|
orsource "Kconfig[12]"
|
|
|
|
- ``def_int``, ``def_hex``, and ``def_string`` keywords are available,
|
|
analogous to ``def_bool``. These set the type and add a ``default`` at the
|
|
same time.
|