.. _Kconfig_system:

##################
The Kconfig System
##################
The Kconfig system is an alternative tool to the CMake config system for users to change config
options of TF-M.

.. figure:: kconfig_header_file_system.svg

It handles dependencies and validations automatically when you change configurations so that the
generated configuration options are always valid.

To use the Kconfig system, enable ``USE_KCONFIG_TOOL`` in command line.
And enable ``MENUCONFIG`` to launch configuration GUI.

The Kconfig system consists of `The Kconfig tool`_ and the `The Kconfig files`_.

****************
The Kconfig tool
****************
The Kconfig tool is a python script based on `Kconfiglib <https://github.com/ulfalizer/Kconfiglib>`__
to generate the following config files:

- CMake config file

  Contains CMake cache variables of building options.

- Header file

  Contains component options in the header file system.
  Component options are gathered together in a separate menu ``TF-M component configs`` in
  `The Kconfig files`_.

- The .config and .config.old files

  The ``.config`` file which contains all the above configurations in the Kconfig format.
  It will be created after the first execution of the script. It is only used to allow
  users to make adjustments basing on the previous settings.
  The Kconfig tool will load it if it exists and ``.config.old`` will be created to
  save the previous configurations.

The tool supports loading multiple pre-set configuration files merging into a single one.
The first loaded options are overridden by later ones if the config files contain duplicated
options.
And dependencies between config options are taken care of.
It then launches a configuration GUI for users to change any config options if the ``MENUCONFIG`` is
enabled in build command line.

Integration with TF-M build system
----------------------------------
TF-M build system includes ``kconfig.cmake`` to integrate this tool.
It prepares the parameters for the script and invokes it to load multiple configuration files basing
on your build setup, including but not limited to

  - Build type bound configurations, decided by ``CMAKE_BUILD_TYPE``
  - Profile configurations, decided by ``TFM_PROFILE``

**************************
Customizing config options
**************************
By default, the Kconfig system only merges configuration files and generated the final config files.
To customize the config options, there are several approaches.

Menuconfig
----------
Menuconfig is the recommended approach to adjust the values of the config options because it has
a graphic interface for you to easily change the options without worrying about dependencies.

To launch the menuconfig, you need to enable ``MENUCONFIG`` in addition to enabling
``USE_KCONFIG_TOOL``.

.. code-block:: bash

  cmake -S . -B cmake_build -DTFM_PLATFORM=arm/mps2/an521 \
                            -DUSE_KCONFIG_TOOL=ON \
                            -DMENUCONFIG=ON

.. note::

  Although the Kconfiglib provides three
  `menuconfig interfaces <https://github.com/ulfalizer/Kconfiglib#menuconfig-interfaces>`__,
  only GUI menuconfig can be launched by CMake for the time being.

Command line options
--------------------
The support of passing configurations via command line is kept for the Kconfig system.

.. code-block:: bash

  cmake -S . -B cmake_build -DTFM_PLATFORM=arm/mps2/an521 \
                            -DUSE_KCONFIG_TOOL=ON \
                            -DTFM_ISOLATION_LEVEL=2

Kconfig file
------------
You can also put the frequently used config options into a Kconfig file. When you need to apply the
config options in that file, pass it via command line option ``-DKCONFIG_CONFIG_FILE``

.. code-block:: bash

  cmake -S . -B cmake_build -DTFM_PLATFORM=arm/mps2/an521 \
                            -DTFM_ISOLATION_LEVEL=2 \
                            -DUSE_KCONFIG_TOOL=ON \
                            -DKCONFIG_CONFIG_FILE=my_config.conf

.. note::

  The command line set options override the ones in the config file.
  And you can always launch menuconfig to do the final adjustments.

*****************
The Kconfig files
*****************
The Kconfig files are the files written by the
`Kconfig language <https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html#kconfig-language>`__
to describe config options.
They also uses some Kconfiglib extensions such as optional source ``osource`` and relative source ``rsource``
so they can only work with the Kconfiglib.

--------------

*Copyright (c) 2022-2023, Arm Limited. All rights reserved.*
