All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnout Vandecappelle <arnout@mind.be>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCHv3 19/20] package: package-based implementation of source, external-deps and legal-info
Date: Thu, 10 Oct 2013 19:24:12 +0200	[thread overview]
Message-ID: <5256E2BC.8020503@mind.be> (raw)
In-Reply-To: <1381256237-27948-20-git-send-email-thomas.petazzoni@free-electrons.com>

On 08/10/13 20:17, Thomas Petazzoni wrote:
> Until now, the make source, make external-deps and make legal-info
> where relying on enumerating the packages by looking at $(TARGETS)
> which contains only the target packages and not the host
> packages. Thanks to the TARGET_HOST_DEPS and HOST_DEPS variables, it
> was doing a two-level resolution of host package dependencies, but it
> was not entirely correct since the dependency chain might be deeper
> than that: some packages could be missed.
>
>>From an idea of Arnout, this patch introduces in each package
> additional targets <pkg>-all-source, <pkg>-all-legal-info and
> <pkg>-all-external-deps that executes the 'source', 'legal-info' and
> 'external-deps' targets for this package and all its dependencies, be
> they target or host dependencies.
>
> This provides a much cleaner implementation of this mechanism, which
> is also more robust.
>
> In order to achieve this, this patch also separates the "package"
> targets from other targets: instead of mixing them both in the global
> TARGETS variable, the new PACKAGES variable contains the name of all
> packages that are enabled in the configuration, while TARGETS is only
> used for additional things to be done (target-finalize, etc.). This
> separation is needed so that we don't try to use targets (such as
> <foo>-all-external-deps) on things that are not packages. Some further
> cleanups in this direction are possible, this commit takes a
> relatively minimal approach for now.
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
>   Makefile               | 53 +++++++++++++-------------------------------------
>   package/pkg-generic.mk | 16 ++++++++++++++-
>   2 files changed, 28 insertions(+), 41 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index f266e2d..702e7d4 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -238,8 +238,6 @@ GNU_HOST_NAME:=$(shell support/gnuconfig/config.guess)
>
>   BASE_TARGETS = toolchain
>
> -TARGETS:=
> -
>   # silent mode requested?
>   QUIET:=$(if $(findstring s,$(MAKEFLAGS)),-q)
>
> @@ -310,9 +308,6 @@ endif
>   include package/Makefile.in
>   include support/dependencies/dependencies.mk
>

  You could remove this empty line as well.

> -# We also need the various per-package makefiles, which also add
> -# each selected package to TARGETS if that package was selected
> -# in the .config file.
>   include toolchain/helpers.mk
>   include toolchain/*/*.mk
>
> @@ -349,34 +344,11 @@ include fs/common.mk
>
>   TARGETS+=target-post-image
>
> -TARGETS_CLEAN:=$(patsubst %,%-clean,$(TARGETS))
> -TARGETS_SOURCE:=$(patsubst %,%-source,$(TARGETS) $(BASE_TARGETS))
> -TARGETS_DIRCLEAN:=$(patsubst %,%-dirclean,$(TARGETS))
> -TARGETS_ALL:=$(patsubst %,__real_tgt_%,$(TARGETS))
> -
> -# host-* dependencies have to be handled specially, as those aren't
> -# visible in Kconfig and hence not added to a variable like TARGETS.
> -# instead, find all the host-* targets listed in each <PKG>_DEPENDENCIES
> -# variable for each enabled target.
> -# Notice: this only works for newstyle gentargets/autotargets packages
> -TARGETS_HOST_DEPS = $(sort $(filter host-%,$(foreach dep,\
> -		$(addsuffix _DEPENDENCIES,$(call UPPERCASE,$(TARGETS))),\
> -		$($(dep)))))
> -# Host packages can in turn have their own dependencies. Likewise find
> -# all the package names listed in the HOST_<PKG>_DEPENDENCIES for each
> -# host package found above. Ideally this should be done recursively until
> -# no more packages are found, but that's hard to do in make, so limit to
> -# 1 level for now.
> -HOST_DEPS = $(sort $(foreach dep,\
> -		$(addsuffix _DEPENDENCIES,$(call UPPERCASE,$(TARGETS_HOST_DEPS))),\
> -		$($(dep))))
> -HOST_SOURCE += $(addsuffix -source,$(sort $(TARGETS_HOST_DEPS) $(HOST_DEPS)))
> -
> -TARGETS_LEGAL_INFO:=$(patsubst %,%-legal-info,\
> -		$(TARGETS) $(BASE_TARGETS) $(TARGETS_HOST_DEPS) $(HOST_DEPS))))
> -
> -# all targets depend on the crosscompiler and it's prerequisites
> -$(TARGETS_ALL): __real_tgt_%: $(BASE_TARGETS) %
> +PACKAGES_CLEAN:=$(patsubst %,%-clean,$(PACKAGES))

  Can you make these match the coding style? PACKAGES_CLEAN = ...

> +PACKAGES_SOURCE:=$(patsubst %,%-all-source,$(PACKAGES) $(BASE_TARGETS))

  BASE_TARGETS is just "toolchain", right? And that is already part of 
the dependencies of PACKAGES, right? So why is that still needed here?

> +PACKAGES_EXTERNAL_DEPS:=$(patsubst %,%-all-external-deps,$(PACKAGES) $(BASE_TARGETS))
> +PACKAGES_DIRCLEAN:=$(patsubst %,%-dirclean,$(PACKAGES))

  The PACKAGES_DIRCLEAN is really redundant, it is only used to define 
them as .PHONY but that is not done for e.g. -build.

> +PACKAGES_LEGAL_INFO:=$(patsubst %,%-all-legal-info,$(PACKAGES) $(BASE_TARGETS))
>
>   dirs: $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
>   	$(HOST_DIR) $(BINARIES_DIR) $(STAMP_DIR)
> @@ -386,12 +358,13 @@ $(BUILD_DIR)/buildroot-config/auto.conf: $(BUILDROOT_CONFIG)
>
>   prepare: $(BUILD_DIR)/buildroot-config/auto.conf
>
> -world: $(BASE_TARGETS) $(TARGETS_ALL)
> +world: $(BASE_TARGETS) $(PACKAGES) $(TARGETS)
>
>   .PHONY: all world toolchain dirs clean distclean source outputmakefile \
>   	legal-info legal-info-prepare legal-info-clean printvars \
> -	$(BASE_TARGETS) $(TARGETS) $(TARGETS_ALL) \
> -	$(TARGETS_CLEAN) $(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) $(TARGETS_LEGAL_INFO) \
> +	$(BASE_TARGETS) $(PACKAGES) $(TARGETS) \
> +	$(PACKAGES_CLEAN) $(PACKAGES_DIRCLEAN) $(PACKAGES_SOURCE) $(PACKAGES_LEGAL_INFO) \
> +	$(PACKAGES_EXTERNAL_DEPS) \
>   	$(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
>   	$(HOST_DIR) $(BINARIES_DIR) $(STAMP_DIR)
>
> @@ -562,10 +535,10 @@ target-post-image:
>   toolchain-eclipse-register:
>   	./support/scripts/eclipse-register-toolchain `readlink -f $(O)` $(notdir $(TARGET_CROSS)) $(BR2_ARCH)
>
> -source: dirs $(TARGETS_SOURCE) $(HOST_SOURCE)
> +source: dirs $(PACKAGES_SOURCE)
>
>   external-deps:
> -	@$(MAKE) -Bs DL_MODE=SHOW_EXTERNAL_DEPS $(EXTRAMAKEARGS) source | sort -u
> +	@$(MAKE) -s $(EXTRAMAKEARGS) $(PACKAGES_EXTERNAL_DEPS) | sort -u
>
>   legal-info-clean:
>   	@rm -fr $(LEGAL_INFO_DIR)
> @@ -580,7 +553,7 @@ legal-info-prepare: $(LEGAL_INFO_DIR)
>   	@cp $(BUILDROOT_CONFIG) $(LEGAL_INFO_DIR)/buildroot.config
>
>   legal-info: dirs legal-info-clean legal-info-prepare $(REDIST_SOURCES_DIR) \
> -		$(TARGETS_LEGAL_INFO)
> +		$(PACKAGES_LEGAL_INFO)
>   	@cat support/legal-info/README.header >>$(LEGAL_REPORT)
>   	@if [ -r $(LEGAL_WARNINGS) ]; then \
>   		cat support/legal-info/README.warnings-header \
> @@ -590,7 +563,7 @@ legal-info: dirs legal-info-clean legal-info-prepare $(REDIST_SOURCES_DIR) \
>   	@rm -f $(LEGAL_WARNINGS)
>
>   show-targets:
> -	@echo $(TARGETS)
> +	@echo $(BASE_TARGETS) $(PACKAGES) $(TARGETS)
>
>   else # ifeq ($(BR2_HAVE_DOT_CONFIG),y)
>
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> index a46457c..bd6169c 100644
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -424,6 +424,20 @@ endif
>   $(1)-show-depends:
>   			@echo $$($(2)_DEPENDENCIES)
>
> +$(1)-all-source: 	$(foreach p,$($(2)_DEPENDENCIES),$(p)-all-source) $(1)-source
> +
> +$(1)-external-deps:
> +ifneq ($$($(2)_SOURCE),)
> +			@echo $$($(2)_SOURCE)
> +endif
> +ifneq ($$($(2)_EXTRA_DOWNLOADS),y)
> +			@echo $$($(2)_EXTRA_DOWNLOADS)
> +endif

  While you're at it, you could add $(2)_PATCH.

  Are the double dollars really needed? They're not used in -all-source 
so why would you use them here...

> +
> +$(1)-all-external-deps:	$(foreach p,$($(2)_DEPENDENCIES),$(p)-all-external-deps) $(1)-external-deps
> +
> +$(1)-all-legal-info:	$(foreach p,$($(2)_DEPENDENCIES),$(p)-all-legal-info) $(1)-legal-info
> +
>   $(1)-uninstall:		$(1)-configure $$($(2)_TARGET_UNINSTALL)
>
>   $(1)-clean:		$(1)-uninstall \
> @@ -528,7 +542,7 @@ endif # ifneq ($(call qstrip,$$($(2)_SOURCE)),)
>   # configuration
>   ifeq ($$($$($(2)_KCONFIG_VAR)),y)
>
> -TARGETS += $(1)
> +PACKAGES += $(1)
>   PACKAGES_PERMISSIONS_TABLE += $$($(2)_PERMISSIONS)$$(sep)
>   PACKAGES_DEVICES_TABLE += $$($(2)_DEVICES)$$(sep)
>   PACKAGES_USERS += $$($(2)_USERS)$$(sep)


  Shouldn't you do something similar in fs/ ? Otherwise 'make source' 
will not download e.g. mtd.

  Regards,
  Arnout
-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F

  reply	other threads:[~2013-10-10 17:24 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-08 18:16 [Buildroot] [PATCHv3 00/20] Toolchain updates: package infra, musl support, Linaro updates, glibc fixes Thomas Petazzoni
2013-10-08 18:16 ` [Buildroot] [PATCHv3 01/20] glibc: both eglibc and glibc need host-gawk Thomas Petazzoni
2013-10-08 21:18   ` Peter Korsgaard
2013-10-08 18:16 ` [Buildroot] [PATCHv3 02/20] glibc: fix glibc build by creating an empty gnu/stubs.h Thomas Petazzoni
2013-10-08 21:19   ` Peter Korsgaard
2013-10-08 18:17 ` [Buildroot] [PATCHv3 03/20] package: add a <pkg>_EXTRA_DOWNLOADS variable Thomas Petazzoni
2013-10-08 21:32   ` Peter Korsgaard
2013-10-08 21:55     ` Thomas Petazzoni
2013-10-09  9:29       ` Peter Korsgaard
2013-10-09 11:51         ` Thomas Petazzoni
2013-10-09 12:31           ` Peter Korsgaard
2013-10-09 13:23             ` Thomas Petazzoni
2013-10-08 18:17 ` [Buildroot] [PATCHv3 04/20] toolchain: introduce a virtual package Thomas Petazzoni
2013-10-09  8:26   ` Fabio Porcedda
2013-10-09  9:02     ` Thomas Petazzoni
2013-10-09 12:59       ` Fabio Porcedda
2013-10-09 13:31         ` Thomas Petazzoni
2013-10-09 13:41           ` Fabio Porcedda
2013-10-09 10:46   ` Peter Korsgaard
2013-10-09 11:49     ` Thomas Petazzoni
2013-10-09 12:33       ` Peter Korsgaard
2013-10-08 18:17 ` [Buildroot] [PATCHv3 05/20] toolchain-buildroot: convert to the package infrastructure Thomas Petazzoni
2013-10-09 13:20   ` Peter Korsgaard
2013-10-09 14:04   ` Thomas De Schampheleire
2013-10-09 14:35     ` Peter Korsgaard
2013-10-08 18:17 ` [Buildroot] [PATCHv3 06/20] toolchain-external: " Thomas Petazzoni
2013-10-09 13:20   ` Peter Korsgaard
2013-10-08 18:17 ` [Buildroot] [PATCHv3 07/20] dependencies: remove useless targets Thomas Petazzoni
2013-10-09 13:21   ` Peter Korsgaard
2013-10-08 18:17 ` [Buildroot] [PATCHv3 08/20] toolchain-external: conditionalize the installation of libraries Thomas Petazzoni
2013-10-09 13:21   ` Peter Korsgaard
2013-10-08 18:17 ` [Buildroot] [PATCHv3 09/20] toolchain: modify the wildcard logic for shared libraries copying Thomas Petazzoni
2013-10-09 13:21   ` Peter Korsgaard
2013-10-08 18:17 ` [Buildroot] [PATCHv3 10/20] toolchain: fix the helpers.mk comment Thomas Petazzoni
2013-10-09 13:24   ` Peter Korsgaard
2013-10-09 13:58   ` Thomas De Schampheleire
2013-10-08 18:17 ` [Buildroot] [PATCHv3 11/20] toolchain: do not check largefile, wchar, IPv6 and locale for glibc toolchains Thomas Petazzoni
2013-10-09 13:25   ` Peter Korsgaard
2013-10-08 18:17 ` [Buildroot] [PATCHv3 12/20] toolchain-external: add support for musl C library Thomas Petazzoni
2013-10-09 14:01   ` Peter Korsgaard
2013-10-08 18:17 ` [Buildroot] [PATCHv3 13/20] toolchain-external: improve help text of some options Thomas Petazzoni
2013-10-09 14:03   ` Peter Korsgaard
2013-10-09 14:11     ` Thomas Petazzoni
2013-10-08 18:17 ` [Buildroot] [PATCHv3 14/20] busybox: add patches to fix build with the musl C library Thomas Petazzoni
2013-10-09 14:33   ` Peter Korsgaard
2013-10-08 18:17 ` [Buildroot] [PATCHv3 15/20] toolchain-external: update Linaro ARM toolchain Thomas Petazzoni
2013-10-08 18:17 ` [Buildroot] [PATCHv3 16/20] toolchain-external: update Linaro AArch64 toolchain Thomas Petazzoni
2013-10-08 18:17 ` [Buildroot] [PATCHv3 17/20] toolchain-external: improve target library copy logic Thomas Petazzoni
2013-10-08 18:17 ` [Buildroot] [PATCHv3 18/20] toolchain-external: fix Linaro ARM toolchain support Thomas Petazzoni
2013-10-08 18:17 ` [Buildroot] [PATCHv3 19/20] package: package-based implementation of source, external-deps and legal-info Thomas Petazzoni
2013-10-10 17:24   ` Arnout Vandecappelle [this message]
2013-10-10 21:33     ` Thomas Petazzoni
2013-10-10 22:38       ` Arnout Vandecappelle
2013-10-11  7:20         ` Thomas Petazzoni
2013-10-11  8:10           ` Arnout Vandecappelle
2013-10-11  8:00       ` Fabio Porcedda
2013-10-08 18:17 ` [Buildroot] [PATCHv3 20/20] package: remove useless SHOW_EXTERNAL_DEPS support Thomas Petazzoni
2013-10-10 17:27   ` Arnout Vandecappelle

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5256E2BC.8020503@mind.be \
    --to=arnout@mind.be \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.