* [Buildroot] [PATCH 0/2] pkg-kconfig now loads kconfig variables @ 2015-08-04 12:27 Denis THULIN 2015-08-04 12:27 ` [Buildroot] [PATCH 1/2] kconfig: Can now use variables outside of package Denis THULIN 2015-08-04 12:27 ` [Buildroot] [PATCH 2/2] i2c-tools: Adds check of i2c kernel option Denis THULIN 0 siblings, 2 replies; 6+ messages in thread From: Denis THULIN @ 2015-08-04 12:27 UTC (permalink / raw) To: buildroot This series adds a way to use the configurations of kconfig packages in the buildroot make environnement. This can be useful when you want to be sure that an option of a kconfig package is selected or when you want to know some information about a kconfig package's configuration The first patch of the series is the modification of pkg-kconfig to make that change. The second patch is an exemple of how this can be used. Denis THULIN (2): kconfig: Can now use variables outside of package i2c-tools: Adds check of i2c kernel option Makefile | 4 +++- package/i2c-tools/i2c-tools.mk | 14 ++++++++++++++ package/pkg-kconfig.mk | 24 +++++++++++++++++++++++- 3 files changed, 40 insertions(+), 2 deletions(-) -- 2.5.0 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 1/2] kconfig: Can now use variables outside of package 2015-08-04 12:27 [Buildroot] [PATCH 0/2] pkg-kconfig now loads kconfig variables Denis THULIN @ 2015-08-04 12:27 ` Denis THULIN 2015-08-04 12:27 ` [Buildroot] [PATCH 2/2] i2c-tools: Adds check of i2c kernel option Denis THULIN 1 sibling, 0 replies; 6+ messages in thread From: Denis THULIN @ 2015-08-04 12:27 UTC (permalink / raw) To: buildroot This is a small modification of pkg-kconfig.mk that saves the .config file of a kconfig package and that loads it in order to use its variables inside other packages' makefiles. (e.g. it can be used to check if i2c is enabled in the kernel before building i2c-tools). Signed-off-by: Denis THULIN <denis.thulin@openwide.fr> --- It uses sed to prepends the .config variables with <PACKAGE_NAME>_KCONFIG_. sed output is in the $(BASE_DIR)/kconfigs directory. The .config file are then included in the make environnment Signed-off-by: Denis THULIN <denis.thulin@openwide.fr> --- Makefile | 4 +++- package/pkg-kconfig.mk | 24 +++++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 9059884..984fec1 100644 --- a/Makefile +++ b/Makefile @@ -196,6 +196,7 @@ TARGET_DIR := $(BASE_DIR)/target # .config. HOST_DIR will be overwritten later when .config is included. HOST_DIR := $(BASE_DIR)/host GRAPHS_DIR := $(BASE_DIR)/graphs +KCONFIG_OUTPUT_DIR := $(BASE_DIR)/kconfigs LEGAL_INFO_DIR = $(BASE_DIR)/legal-info REDIST_SOURCES_DIR_TARGET = $(LEGAL_INFO_DIR)/sources @@ -825,7 +826,8 @@ printvars: clean: rm -rf $(TARGET_DIR) $(BINARIES_DIR) $(HOST_DIR) \ $(BUILD_DIR) $(BASE_DIR)/staging \ - $(LEGAL_INFO_DIR) $(GRAPHS_DIR) + $(LEGAL_INFO_DIR) $(GRAPHS_DIR) \ + $(KCONFIG_OUTPUT_DIR) distclean: clean ifeq ($(DL_DIR),$(TOPDIR)/dl) diff --git a/package/pkg-kconfig.mk b/package/pkg-kconfig.mk index 375607f..55a1493 100644 --- a/package/pkg-kconfig.mk +++ b/package/pkg-kconfig.mk @@ -83,6 +83,7 @@ $$($(2)_DIR)/.stamp_kconfig_fixup_done: $$($(2)_DIR)/.config # Before running configure, the configuration file should be present and fixed $$($(2)_TARGET_CONFIGURE): $$($(2)_DIR)/.stamp_kconfig_fixup_done + # Only enable the foo-*config targets when the package is actually enabled. # Note: the variable $(2)_KCONFIG_VAR is not related to the kconfig # infrastructure, but defined by pkg-generic.mk. The generic infrastructure is @@ -96,6 +97,7 @@ $$(error Internal error: no value specified for $(2)_KCONFIG_FILE) endif endif + # Configuration editors (menuconfig, ...) # # We need to apply the configuration fixups right after a configuration @@ -118,6 +120,25 @@ $$($(2)_DIR)/.kconfig_editor_%: $$($(2)_DIR)/.stamp_kconfig_fixup_done rm -f $$($(2)_DIR)/.stamp_{target,staging,images}_installed $$(call $(2)_FIXUP_DOT_CONFIG) +# Before building the package, we want to load the .config file prepended with +# the packages' name in order to use it in other packages. +# For instance, we want to check if LINUX_CONFIG_I2C is selected before +# building i2c-tools. +$$($(2)_TARGET_CONFIGURE): | $(2)_LOAD_KCONFIG + +# In order to load the .config file +$(2)_LOAD_KCONFIG: $$(KCONFIG_OUTPUT_DIR)/$(1).config + @echo Loading $$(KCONFIG_OUTPUT_DIR)/$(1).config + $$(eval include $$(KCONFIG_OUTPUT_DIR)/$(1).config) + +# We also need to be sure the configuration is correct before prefixing it with +# <PKG_NAME>_KCONFIG and saving it to KCONFIG_OUTPUT_DIR. +# As the <package>.config file is not meant to be read by humans, this also +# removes blank lines and commented lines. +$$(KCONFIG_OUTPUT_DIR)/$(1).config: $$($(2)_DIR)/.stamp_kconfig_fixup_done + $(Q)mkdir -p $$(KCONFIG_OUTPUT_DIR) + $(Q)sed -n 's/^\(\w\)/$(2)_KCONFIG_\1/p' $$($(2)_DIR)/.config > $$(KCONFIG_OUTPUT_DIR)/$(1).config + # Saving back the configuration # # Ideally, that should directly depend on $$($(2)_DIR)/.stamp_kconfig_fixup_done, @@ -171,7 +192,8 @@ endif # package enabled $(1)-savedefconfig \ $(1)-check-configuration-done \ $$($(2)_DIR)/.kconfig_editor_% \ - $$(addprefix $(1)-,$$($(2)_KCONFIG_EDITORS)) + $$(addprefix $(1)-,$$($(2)_KCONFIG_EDITORS)) \ + $(2)_LOAD_KCONFIG endef # inner-kconfig-package -- 2.5.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 2/2] i2c-tools: Adds check of i2c kernel option 2015-08-04 12:27 [Buildroot] [PATCH 0/2] pkg-kconfig now loads kconfig variables Denis THULIN 2015-08-04 12:27 ` [Buildroot] [PATCH 1/2] kconfig: Can now use variables outside of package Denis THULIN @ 2015-08-04 12:27 ` Denis THULIN 2015-08-04 12:45 ` Thomas Petazzoni 1 sibling, 1 reply; 6+ messages in thread From: Denis THULIN @ 2015-08-04 12:27 UTC (permalink / raw) To: buildroot The package will now check if i2c is enabled whithin the kernel before the configure step. If not, build of the package will fail. Also adds linux as a dependancy of i2c-tools to make sure that the kernel config is created before checking one of its options. Signed-off-by: Denis THULIN <denis.thulin@openwide.fr> --- package/i2c-tools/i2c-tools.mk | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/package/i2c-tools/i2c-tools.mk b/package/i2c-tools/i2c-tools.mk index 187bd09..7eb4fbb 100644 --- a/package/i2c-tools/i2c-tools.mk +++ b/package/i2c-tools/i2c-tools.mk @@ -10,6 +10,20 @@ I2C_TOOLS_SITE = http://dl.lm-sensors.org/i2c-tools/releases I2C_TOOLS_LICENSE = GPLv2+, GPLv2 (py-smbus) I2C_TOOLS_LICENSE_FILES = COPYING +I2C_TOOLS_DEPENDENCIES += linux +define I2C_TOOLS_KERNEL_OPTION_MISSING + echo '$(LINUX_KCONFIG_CONFIG_DEFCONFIG_LIST)' + @if [ -z $(LINUX_KCONFIG_CONFIG_I2C) ]; then \ + echo ERROR: CONFIG_I2C is not selected in the kernel; \ + exit 1; \ + elif [ $(LINUX_KCONFIG_CONFIG_I2C) != y -a $(LINUX_KCONFIG_CONFIG_I2C) != m ]; then \ + echo ERROR: CONFIG_I2C is not selected in the kernel; \ + exit 1; \ + fi +endef +I2C_TOOLS_PRE_CONFIGURE_HOOKS += I2C_TOOLS_KERNEL_OPTION_MISSING + + ifeq ($(BR2_PACKAGE_PYTHON),y) I2C_TOOLS_DEPENDENCIES += python endif -- 2.5.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 2/2] i2c-tools: Adds check of i2c kernel option 2015-08-04 12:27 ` [Buildroot] [PATCH 2/2] i2c-tools: Adds check of i2c kernel option Denis THULIN @ 2015-08-04 12:45 ` Thomas Petazzoni 2015-08-04 13:38 ` Denis Thulin 0 siblings, 1 reply; 6+ messages in thread From: Thomas Petazzoni @ 2015-08-04 12:45 UTC (permalink / raw) To: buildroot Hello, On Tue, 4 Aug 2015 14:27:07 +0200, Denis THULIN wrote: > +I2C_TOOLS_DEPENDENCIES += linux This is not acceptable: we want to allow people to build just a rootfs, and not necessarily the Linux kernel with Buildroot. I personally use Buildroot a lot to build a small initramfs that I then bundle in my kernel image, which is built separately from Buildroot (because I'm doing kernel development, so I build the kernel myself). Also, this is going completely backwards compared to what we've been doing until now. Currently, in linux/linux.mk, we have some logic to make sure a number of kernel options are enabled when certain Buildroot packages are enabled: $(if $(BR2_PACKAGE_KTAP), $(call KCONFIG_ENABLE_OPT,CONFIG_DEBUG_FS,$(@D)/.config) $(call KCONFIG_ENABLE_OPT,CONFIG_ENABLE_DEFAULT_TRACERS,$(@D)/.config) $(call KCONFIG_ENABLE_OPT,CONFIG_PERF_EVENTS,$(@D)/.config) $(call KCONFIG_ENABLE_OPT,CONFIG_FUNCTION_TRACER,$(@D)/.config)) $(if $(BR2_PACKAGE_SYSTEMD), $(call KCONFIG_ENABLE_OPT,CONFIG_CGROUPS,$(@D)/.config) $(call KCONFIG_ENABLE_OPT,CONFIG_INOTIFY_USER,$(@D)/.config) $(call KCONFIG_ENABLE_OPT,CONFIG_FHANDLE,$(@D)/.config) $(call KCONFIG_ENABLE_OPT,CONFIG_AUTOFS4_FS,$(@D)/.config) $(call KCONFIG_ENABLE_OPT,CONFIG_TMPFS_POSIX_ACL,$(@D)/.config) $(call KCONFIG_ENABLE_OPT,CONFIG_TMPFS_POSIX_XATTR,$(@D)/.config)) $(if $(BR2_PACKAGE_SMACK), $(call KCONFIG_ENABLE_OPT,CONFIG_SECURITY,$(@D)/.config) $(call KCONFIG_ENABLE_OPT,CONFIG_SECURITY_SMACK,$(@D)/.config) $(call KCONFIG_ENABLE_OPT,CONFIG_SECURITY_NETWORK,$(@D)/.config)) $(if $(BR2_PACKAGE_IPTABLES), $(call KCONFIG_ENABLE_OPT,CONFIG_IP_NF_IPTABLES,$(@D)/.config) $(call KCONFIG_ENABLE_OPT,CONFIG_IP_NF_FILTER,$(@D)/.config) $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER,$(@D)/.config) $(call KCONFIG_ENABLE_OPT,CONFIG_NETFILTER_XTABLES,$(@D)/.config)) However, we generally do this only when enabling the kernel option in question is needed to get the package to *build*. When it is necessary to make the thing run properly, or when the dependency is really obvious, we simply don't handle this. So for example in your case, it is completely obvious that i2c-tools needs I2C support in the kernel, otherwise it's a tool that is quite useless. Best regards, Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 2/2] i2c-tools: Adds check of i2c kernel option 2015-08-04 12:45 ` Thomas Petazzoni @ 2015-08-04 13:38 ` Denis Thulin 2015-08-04 13:52 ` Thomas Petazzoni 0 siblings, 1 reply; 6+ messages in thread From: Denis Thulin @ 2015-08-04 13:38 UTC (permalink / raw) To: buildroot Hi Thomas, ----- Mail original ----- > Hello, > > On Tue, 4 Aug 2015 14:27:07 +0200, Denis THULIN wrote: > > > +I2C_TOOLS_DEPENDENCIES += linux > > This is not acceptable: we want to allow people to build just a > rootfs, > and not necessarily the Linux kernel with Buildroot. I personally use > Buildroot a lot to build a small initramfs that I then bundle in my > kernel image, which is built separately from Buildroot (because I'm > doing kernel development, so I build the kernel myself). Oops. I had not thought of that. I understand that this is a mistake for kernel options. But could patch [1/2] be useful for the other kconfig packages ? I think it would be useful to know options of busybox when building packages. > > Also, this is going completely backwards compared to what we've been > doing until now. Currently, in linux/linux.mk, we have some logic to > make sure a number of kernel options are enabled when certain > Buildroot > packages are enabled: > > $(if $(BR2_PACKAGE_KTAP), > $(call > KCONFIG_ENABLE_OPT,CONFIG_DEBUG_FS,$(@D)/.config) > $(call > KCONFIG_ENABLE_OPT,CONFIG_ENABLE_DEFAULT_TRACERS,$(@D)/.config) > $(call > KCONFIG_ENABLE_OPT,CONFIG_PERF_EVENTS,$(@D)/.config) > $(call > KCONFIG_ENABLE_OPT,CONFIG_FUNCTION_TRACER,$(@D)/.config)) > $(if $(BR2_PACKAGE_SYSTEMD), > $(call > KCONFIG_ENABLE_OPT,CONFIG_CGROUPS,$(@D)/.config) > $(call > KCONFIG_ENABLE_OPT,CONFIG_INOTIFY_USER,$(@D)/.config) > $(call > KCONFIG_ENABLE_OPT,CONFIG_FHANDLE,$(@D)/.config) > $(call > KCONFIG_ENABLE_OPT,CONFIG_AUTOFS4_FS,$(@D)/.config) > $(call > KCONFIG_ENABLE_OPT,CONFIG_TMPFS_POSIX_ACL,$(@D)/.config) > $(call > KCONFIG_ENABLE_OPT,CONFIG_TMPFS_POSIX_XATTR,$(@D)/.config)) > $(if $(BR2_PACKAGE_SMACK), > $(call > KCONFIG_ENABLE_OPT,CONFIG_SECURITY,$(@D)/.config) > $(call > KCONFIG_ENABLE_OPT,CONFIG_SECURITY_SMACK,$(@D)/.config) > $(call > KCONFIG_ENABLE_OPT,CONFIG_SECURITY_NETWORK,$(@D)/.config)) > $(if $(BR2_PACKAGE_IPTABLES), > $(call > KCONFIG_ENABLE_OPT,CONFIG_IP_NF_IPTABLES,$(@D)/.config) > $(call > KCONFIG_ENABLE_OPT,CONFIG_IP_NF_FILTER,$(@D)/.config) > $(call > KCONFIG_ENABLE_OPT,CONFIG_NETFILTER,$(@D)/.config) > $(call > KCONFIG_ENABLE_OPT,CONFIG_NETFILTER_XTABLES,$(@D)/.config)) > > However, we generally do this only when enabling the kernel option in > question is needed to get the package to *build*. When it is > necessary > to make the thing run properly, or when the dependency is really > obvious, we simply don't handle this. Would it not be a better thing for all packages to provide a list of kernel options they need and for LINUX_KCONFIG_FIXUP_CMDS to select those options rather than using lots of if blocks ? That list could also be exported so that people using a custom kernel would know which options Buildroot would have selected had they used the default kernel. If it is a better thing to do, I could try to implement that, if time allows. Best regards, Denis > > So for example in your case, it is completely obvious that i2c-tools > needs I2C support in the kernel, otherwise it's a tool that is quite > useless. > > Best regards, > > Thomas > -- > Thomas Petazzoni, CTO, Free Electrons > Embedded Linux, Kernel and Android engineering > http://free-electrons.com > ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 2/2] i2c-tools: Adds check of i2c kernel option 2015-08-04 13:38 ` Denis Thulin @ 2015-08-04 13:52 ` Thomas Petazzoni 0 siblings, 0 replies; 6+ messages in thread From: Thomas Petazzoni @ 2015-08-04 13:52 UTC (permalink / raw) To: buildroot Denis, On Tue, 4 Aug 2015 15:38:54 +0200 (CEST), Denis Thulin wrote: > I understand that this is a mistake for kernel options. > But could patch [1/2] be useful for the other kconfig packages ? > I think it would be useful to know options of busybox when building > packages. I am not sure for what reasons other packages would need to know the Busybox options that are enabled. > Would it not be a better thing for all packages to provide a list > of kernel options they need and for LINUX_KCONFIG_FIXUP_CMDS > to select those options rather than using lots of if blocks ? Could be, yes. Not sure how that would work, though. We want to keep this list of condition relatively short, and not encourage adding millions of interactions between user space dependencies and kernel options. > That list could also be exported so that people using a custom kernel > would know which options Buildroot would have selected had they used > the default kernel. People using a custom kernel "know what they are doing", so I'm not too interested in solving this particular use case. Best regards, Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-08-04 13:52 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-08-04 12:27 [Buildroot] [PATCH 0/2] pkg-kconfig now loads kconfig variables Denis THULIN 2015-08-04 12:27 ` [Buildroot] [PATCH 1/2] kconfig: Can now use variables outside of package Denis THULIN 2015-08-04 12:27 ` [Buildroot] [PATCH 2/2] i2c-tools: Adds check of i2c kernel option Denis THULIN 2015-08-04 12:45 ` Thomas Petazzoni 2015-08-04 13:38 ` Denis Thulin 2015-08-04 13:52 ` Thomas Petazzoni
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox