| // -*- mode:doc; -*- |
| // vim: set syntax=asciidoc: |
| |
| === Infrastructure for packages using kconfig for configuration files |
| |
| A popular way for a software package to handle user-specified |
| configuration is +kconfig+. Among others, it is used by the Linux |
| kernel, Busybox, and Buildroot itself. The presence of a .config file |
| and a +menuconfig+ target are two well-known symptoms of kconfig being |
| used. |
| |
| Buildroot features an infrastructure for packages that use kconfig for |
| their configuration. This infrastructure provides the necessary logic to |
| expose the package's +menuconfig+ target as +foo-menuconfig+ in |
| Buildroot, and to handle the copying back and forth of the configuration |
| file in a correct way. |
| |
| The main macro of the kconfig package infrastructure is |
| +kconfig-package+. It is similar to the +generic-package+ macro. |
| |
| Just like the generic infrastructure, the kconfig infrastructure works |
| by defining a number of variables before calling the +kconfig-package+ |
| macro. |
| |
| All the package metadata information variables that exist in the |
| xref:generic-package-reference[generic package infrastructure] also |
| exist in the kconfig infrastructure. |
| |
| In order to use the +kconfig-package+ infrastructure for a Buildroot |
| package, the minimally required lines in the +.mk+ file, in addition to |
| the variables required by the +generic-package+ infrastructure, are: |
| |
| ---- |
| FOO_KCONFIG_FILE = reference-to-source-configuration-file |
| |
| $(eval $(kconfig-package)) |
| ---- |
| |
| This snippet creates the following make targets: |
| |
| * +foo-menuconfig+, which calls the package's +menuconfig+ target |
| |
| * +foo-update-config+, which copies the configuration back to the |
| source configuration file. It is not possible to use this target |
| when fragment files are set. |
| |
| * +foo-update-defconfig+, which copies the configuration back to the |
| source configuration file. The configuration file will only list the |
| options that differ from the default values. It is not possible to |
| use this target when fragment files are set. |
| |
| * +foo-diff-config+, which outputs the differences between the current |
| configuration and the one defined in the Buildroot configuration for |
| this kconfig package. The output is useful to identify the |
| configuration changes that may have to be propagated to |
| configuration fragments for example. |
| |
| and ensures that the source configuration file is copied to the build |
| directory at the right moment. |
| |
| There are two options to specify a configuration file to use, either |
| +FOO_KCONFIG_FILE+ (as in the example, above) or +FOO_KCONFIG_DEFCONFIG+. |
| It is mandatory to provide either, but not both: |
| |
| * +FOO_KCONFIG_FILE+ specifies the path to a defconfig or full-config file |
| to be used to configure the package. |
| |
| * +FOO_KCONFIG_DEFCONFIG+ specifies the defconfig 'make' rule to call to |
| configure the package. |
| |
| In addition to these minimally required lines, several optional variables can |
| be set to suit the needs of the package under consideration: |
| |
| * +FOO_KCONFIG_EDITORS+: a space-separated list of kconfig editors to |
| support, for example 'menuconfig xconfig'. By default, 'menuconfig'. |
| |
| * +FOO_KCONFIG_FRAGMENT_FILES+: a space-separated list of configuration |
| fragment files that are merged to the main configuration file. |
| Fragment files are typically used when there is a desire to stay in sync |
| with an upstream (def)config file, with some minor modifications. |
| |
| * +FOO_KCONFIG_OPTS+: extra options to pass when calling the kconfig |
| editors. This may need to include '$(FOO_MAKE_OPTS)', for example. By |
| default, empty. |
| |
| * +FOO_KCONFIG_FIXUP_CMDS+: a list of shell commands needed to fixup the |
| configuration file after copying it or running a kconfig editor. Such |
| commands may be needed to ensure a configuration consistent with other |
| configuration of Buildroot, for example. By default, empty. |
| |
| * +FOO_KCONFIG_DOTCONFIG+: path (with filename) of the +.config+ file, |
| relative to the package source tree. The default, +.config+, should |
| be well suited for all packages that use the standard kconfig |
| infrastructure as inherited from the Linux kernel; some packages use |
| a derivative of kconfig that use a different location. |
| |
| * +FOO_KCONFIG_DEPENDENCIES+: the list of packages (most probably, host |
| packages) that need to be built before this package's kconfig is |
| interpreted. Seldom used. By default, empty. |
| |
| * +FOO_KCONFIG_SUPPORTS_DEFCONFIG+: whether the package's kconfig system |
| supports using defconfig files; few packages do not. By default, 'YES'. |