1.. _kconfig: 2 3Configuration System (Kconfig) 4******************************* 5 6The Zephyr kernel and subsystems can be configured at build time to adapt them 7for specific application and platform needs. Configuration is handled through 8Kconfig, which is the same configuration system used by the Linux kernel. The 9goal is to support configuration without having to change any source code. 10 11Configuration options (often called *symbols*) are defined in :file:`Kconfig` 12files, which also specify dependencies between symbols that determine what 13configurations are valid. Symbols can be grouped into menus and sub-menus to 14keep the interactive configuration interfaces organized. 15 16The output from Kconfig is a header file :file:`autoconf.h` with macros that 17can be tested at build time. Code for unused features can be compiled out to 18save space. 19 20The following sections explain how to set Kconfig configuration options, go 21into detail on how Kconfig is used within the Zephyr project, and have some 22tips and best practices for writing :file:`Kconfig` files. 23 24.. toctree:: 25 :maxdepth: 1 26 27 menuconfig.rst 28 setting.rst 29 tips.rst 30 preprocessor-functions.rst 31 extensions.rst 32 33Users interested in optimizing their configuration for security should refer 34to the Zephyr Security Guide's section on the :ref:`hardening`. 35