diff --git a/package/Makefile.in b/package/Makefile.in index 106a04cc8d..60816b4634 100644 --- a/package/Makefile.in +++ b/package/Makefile.in @@ -394,3 +394,4 @@ include package/pkg-perl.mk include package/pkg-python.mk include package/pkg-virtual.mk include package/pkg-generic.mk +include package/pkg-kconfig.mk diff --git a/package/pkg-kconfig.mk b/package/pkg-kconfig.mk new file mode 100644 index 0000000000..5220fdf3a9 --- /dev/null +++ b/package/pkg-kconfig.mk @@ -0,0 +1,82 @@ +################################################################################ +# 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_OPT ?= +$(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) + $$(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_OPT) $$(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 -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)