.. _kconfig:

The Kconfig File Structure
**************************

Introduction
============

The Kconfig files describe: the configuration symbols supported in the build
system, the logical organization and structure to group the symbols in menus
and sub-menus, and the relationships between the different configuration
symbols that govern the valid configuration combinations.

The Kconfig files are distributed across the build directory tree. The files
are organized based on their common characteristics and on what new symbols
they add to the configuration menus. For example:

* The Kconfig file at the root directory contains the general configuration
  options like :option:`ARCH` and :option:`KERNEL VERSION`. These symbols are
  defined for and apply to the entire build system.

* The Kconfig file at the :file:`kernel` directory contains the general
  configuration related to the micro- and the nanokernel.

* The Kconfig file at the :file:`drivers` directory organizes the inclusion of
  the various Kconfig files needed for each supported driver in the system.

* The Kconfig file at the :file:`misc` directory contains the configuration
  symbols that affect different aspects of the build system. For example,
  the :option:`Custom Compiler Options` and the :option:`Minimal Libc` are
  general build options that apply to the build system.
  :option:`Debugging Options` and :option:`System
  Monitoring Options` are also examples of build options that apply to the
  entire system.

* The Kconfig file at the :file:`net` directory contains the different symbols
  that define the configuration options for the communications stack code.

* The Kconfig file at the :file:`crypto` directory contains the different
  symbols that define the configuration options for the cryptography algorithms
  supported.

Dependencies
============

Dependencies allow you to define the valid and invalid configuration
combinations in the system.  Each dependency is a rule that a particular symbol
must follow to be either selected or allowed to have a specific value. For
example, the configuration symbol *B* states a dependency on another one, *A*.

.. code-block:: kconfig

   config B bool

   config A depends on B

The symbol A does not exist as a configuration option in the system unless B is
set to true.

The complete set of dependency rules defines the valid configuration
combinations that the system can use.


Default Configurations
======================

The default configuration files define the default configuration for a specific
kernel on a specific platform. For example:

* :file:`arch/arm/configs`,
* :file:`arch/x86/configs` and
* :file:`arch/arc/configs`.

All the default configuration files must end with the suffix _defconfig. For
example, the :file:`galileo_defconfig` file contains the configuration
information for the galileo platform.

The :file:`Makefile.inc` file uses defconfig files to provide a clean interface
to developers using environment variables to define the kernel type and the
platform of new projects. Developers can provide the build system with a
target's defconfig. The build system takes the specified defconfig file and
sets it as the current :file:`.config` file for the current project. For
example:

.. code-block:: console

   $ make galileo_defconfig

The command takes the default configuration for the architecture
and the galileo board configuration to compile the kernel.

.. _configuration_snippets:

Merging Configuration Fragments
===============================

Configuration file fragment can be merged with the current project
configuration during the build.

Developers can provide a configuration file that defines a small subset of
configuration options.  The subset must contain the specific configuration
options that differ from the default configuration.

The **initconfig** target pulls the default configuration file and merges it
with the local configuration fragments. For example, the sample application **hello
world** overrides the base configuration with the configuration fragment in
:file:`prj.conf`.

.. caution::
   Invalid configurations, or configurations that do not comply with
   the dependencies stated in the Kconfig files, are ignored by the merge process.
   When adding configuration options through a configuration fragment, ensure that
   the complete sequence complies with the dependency rules defined in the
   Kconfig files.
