| ################################################################################ |
| # Kconfig package infrastructure |
| # |
| # This file implements an infrastructure that eases development of |
| # package .mk files for packages that use kconfig for configuration files. |
| # It is based on the generic-package infrastructure, and inherits all of its |
| # features. |
| # |
| # See the Buildroot documentation for details on the usage of this |
| # infrastructure. |
| # |
| ################################################################################ |
| |
| ################################################################################ |
| # inner-kconfig-package -- generates the make targets needed to support a |
| # kconfig package |
| # |
| # argument 1 is the lowercase package name |
| # argument 2 is the uppercase package name, including a HOST_ prefix |
| # for host packages |
| # argument 3 is the uppercase package name, without the HOST_ prefix |
| # for host packages |
| # argument 4 is the type (target or host) |
| ################################################################################ |
| |
| define inner-kconfig-package |
| |
| # Call the generic package infrastructure to generate the necessary |
| # make targets. |
| # Note: this must be done _before_ attempting to use $$($(2)_DIR) in a |
| # dependency expression |
| $(call inner-generic-package,$(1),$(2),$(3),$(4)) |
| |
| # Default values |
| $(2)_KCONFIG_EDITORS ?= menuconfig |
| $(2)_KCONFIG_OPTS ?= |
| $(2)_KCONFIG_FIXUP_CMDS ?= |
| |
| # FOO_KCONFIG_FILE is required |
| ifndef $(2)_KCONFIG_FILE |
| $$(error Internal error: no value specified for $(2)_KCONFIG_FILE) |
| endif |
| |
| # The .config file is obtained by copying it from the specified source |
| # configuration file, after the package has been patched. |
| $$($(2)_DIR)/.config: $$($(2)_KCONFIG_FILE) | $(1)-patch |
| $$(INSTALL) -m 0644 $$($(2)_KCONFIG_FILE) $$($(2)_DIR)/.config |
| |
| # In order to get a usable, consistent configuration, some fixup may be needed. |
| # The exact rules are specified by the package .mk file. |
| $$($(2)_DIR)/.stamp_kconfig_fixup_done: $$($(2)_DIR)/.config |
| $$($(2)_KCONFIG_FIXUP_CMDS) |
| @yes "" | $$($(2)_MAKE_ENV) $$(MAKE) -C $$($(2)_DIR) \ |
| $$($(2)_KCONFIG_OPTS) oldconfig |
| $$(Q)touch $$@ |
| |
| # Before running configure, the configuration file should be present and fixed |
| $$($(2)_TARGET_CONFIGURE): $$($(2)_DIR)/.stamp_kconfig_fixup_done |
| |
| # Configuration editors (menuconfig, ...) |
| $$(addprefix $(1)-,$$($(2)_KCONFIG_EDITORS)): $$($(2)_DIR)/.stamp_kconfig_fixup_done |
| $$($(2)_MAKE_ENV) $$(MAKE) -C $$($(2)_DIR) \ |
| $$($(2)_KCONFIG_OPTS) $$(subst $(1)-,,$$@) |
| rm -f $$($(2)_DIR)/.stamp_{kconfig_fixup_done,configured,built} |
| rm -f $$($(2)_DIR)/.stamp_{target,staging}_installed |
| |
| # Target to copy back the configuration to the source configuration file |
| $(1)-update-config: $$($(2)_DIR)/.stamp_kconfig_fixup_done |
| cp --preserve=timestamps -f $$($(2)_DIR)/.config $$($(2)_KCONFIG_FILE) |
| |
| endef # inner-kconfig-package |
| |
| ################################################################################ |
| # kconfig-package -- the target generator macro for kconfig packages |
| ################################################################################ |
| |
| kconfig-package = $(call inner-kconfig-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) |