From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v4 2/3] pkg-generic: fix rules for top-level parallel make
Date: Tue, 17 Sep 2013 20:23:43 +0200 [thread overview]
Message-ID: <20130917202343.3b714fad@skate> (raw)
In-Reply-To: <1379404753-3471-3-git-send-email-fabio.porcedda@gmail.com>
Dear Fabio Porcedda,
On Tue, 17 Sep 2013 09:59:12 +0200, Fabio Porcedda wrote:
> To be able to use top-level parallel make we must don't depend in a rule
must don't -> should not
> on the order of evaluation of the prerequisites, so instead of reling on
reling -> relying
> the left to right ordering of evaluation of the prerequisites add
> an explicit rule to describe the dependencies.
>
> So add explicit dependencies for the following stamp files:
> %/.stamp_extracted
> %/.stamp_patched
> %/.stamp_configured
> %/.stamp_built
> %/.stamp_host_installed
> %/.stamp_staging_installed
> %/.stamp_images_installed
> %/.stamp_target_installed
>
> Because the %-build target is not anymore part of the dependcy chain,
dependency
> add a new variable <pkgname>_BUILD_DEPENDENCIES to be used instead.
> This new variable is used only by the uclibc package for building
> the toolchain.
>
> Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
> ---
> package/pkg-generic.mk | 45 +++++++++++++++++++++------------------------
> package/uclibc/uclibc.mk | 3 ++-
> 2 files changed, 23 insertions(+), 25 deletions(-)
>
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> index d7efcd3..df6fa6f 100644
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -53,7 +53,7 @@ ifeq ($(DL_MODE),DOWNLOAD)
> endif
>
> # Unpack the archive
> -$(BUILD_DIR)/%/.stamp_extracted:
> +$(BUILD_DIR)/%/.stamp_extracted: $(BUILD_DIR)/%/.stamp_downloaded
> @$(call MESSAGE,"Extracting")
> $(Q)mkdir -p $(@D)
> $($(PKG)_EXTRACT_CMDS)
> @@ -88,7 +88,7 @@ endif
> # prefix of the patches
> $(BUILD_DIR)/%/.stamp_patched: NAMEVER = $(RAWNAME)-$($(PKG)_VERSION)
> $(BUILD_DIR)/%/.stamp_patched: PATCH_BASE_DIRS = $($(PKG)_DIR_PREFIX)/$(RAWNAME) $(call qstrip,$(BR2_GLOBAL_PATCH_DIR))/$(RAWNAME)
> -$(BUILD_DIR)/%/.stamp_patched:
> +$(BUILD_DIR)/%/.stamp_patched: $(BUILD_DIR)/%/.stamp_extracted
> @$(call MESSAGE,"Patching $($(PKG)_DIR_PREFIX)/$(RAWNAME)")
> $(foreach hook,$($(PKG)_PRE_PATCH_HOOKS),$(call $(hook))$(sep))
> $(foreach p,$($(PKG)_PATCH),support/scripts/apply-patches.sh $(@D) $(DL_DIR) $(notdir $(p))$(sep))
> @@ -115,21 +115,21 @@ $(BUILD_DIR)/%/.stamp_configured:
> $(Q)touch $@
>
> # Build
> -$(BUILD_DIR)/%/.stamp_built::
> +$(BUILD_DIR)/%/.stamp_built: $(BUILD_DIR)/%/.stamp_configured
> @$(call MESSAGE,"Building")
> $($(PKG)_BUILD_CMDS)
> $(foreach hook,$($(PKG)_POST_BUILD_HOOKS),$(call $(hook))$(sep))
> $(Q)touch $@
>
> # Install to host dir
> -$(BUILD_DIR)/%/.stamp_host_installed:
> +$(BUILD_DIR)/%/.stamp_host_installed: $(BUILD_DIR)/%/.stamp_built
> @$(call MESSAGE,"Installing to host directory")
> $($(PKG)_INSTALL_CMDS)
> $(foreach hook,$($(PKG)_POST_INSTALL_HOOKS),$(call $(hook))$(sep))
> $(Q)touch $@
>
> # Install to staging dir
> -$(BUILD_DIR)/%/.stamp_staging_installed:
> +$(BUILD_DIR)/%/.stamp_staging_installed: $(BUILD_DIR)/%/.stamp_built
> @$(call MESSAGE,"Installing to staging directory")
> $($(PKG)_INSTALL_STAGING_CMDS)
> $(foreach hook,$($(PKG)_POST_INSTALL_STAGING_HOOKS),$(call $(hook))$(sep))
> @@ -143,14 +143,14 @@ $(BUILD_DIR)/%/.stamp_staging_installed:
> $(Q)touch $@
>
> # Install to images dir
> -$(BUILD_DIR)/%/.stamp_images_installed:
> +$(BUILD_DIR)/%/.stamp_images_installed: $(BUILD_DIR)/%/.stamp_built
> @$(call MESSAGE,"Installing to images directory")
> $($(PKG)_INSTALL_IMAGES_CMDS)
> $(foreach hook,$($(PKG)_POST_INSTALL_IMAGES_HOOKS),$(call $(hook))$(sep))
> $(Q)touch $@
>
> # Install to target dir
> -$(BUILD_DIR)/%/.stamp_target_installed:
> +$(BUILD_DIR)/%/.stamp_target_installed: $(BUILD_DIR)/%/.stamp_built
> @$(call MESSAGE,"Installing to target")
> $(if $(BR2_INIT_SYSTEMD),\
> $($(PKG)_INSTALL_INIT_SYSTEMD))
> @@ -312,6 +312,7 @@ $(2)_DEPENDENCIES ?= $(filter-out host-toolchain $(1),\
> ifeq ($$($(2)_TYPE),target)
> $(2)_DEPENDENCIES += toolchain
> endif
> +$(2)_BUILD_DEPENDENCIES ?=
>
> $(2)_INSTALL_STAGING ?= NO
> $(2)_INSTALL_IMAGES ?= NO
> @@ -363,30 +364,29 @@ $(1)-install: $(1)-install-staging $(1)-install-target $(1)-install-images
> endif
>
> ifeq ($$($(2)_INSTALL_TARGET),YES)
> -$(1)-install-target: $(1)-build \
> - $$($(2)_TARGET_INSTALL_TARGET)
> +$(1)-install-target: $$($(2)_TARGET_INSTALL_TARGET)
> else
> $(1)-install-target:
> endif
>
> ifeq ($$($(2)_INSTALL_STAGING),YES)
> -$(1)-install-staging: $(1)-build \
> - $$($(2)_TARGET_INSTALL_STAGING)
> +$(1)-install-staging: $$($(2)_TARGET_INSTALL_STAGING)
> else
> $(1)-install-staging:
> endif
>
> ifeq ($$($(2)_INSTALL_IMAGES),YES)
> -$(1)-install-images: $(1)-build \
> - $$($(2)_TARGET_INSTALL_IMAGES)
> +$(1)-install-images: $$($(2)_TARGET_INSTALL_IMAGES)
> else
> $(1)-install-images:
> endif
>
> -$(1)-install-host: $(1)-build $$($(2)_TARGET_INSTALL_HOST)
> +$(1)-install-host: $$($(2)_TARGET_INSTALL_HOST)
>
> -$(1)-build: $(1)-configure \
> - $$($(2)_TARGET_BUILD)
> +$$($(2)_TARGET_BUILD): | $$($(2)_BUILD_DEPENDENCIES)
> +$(1)-build: $$($(2)_TARGET_BUILD)
> +
> +$(1)-configure: $$($(2)_TARGET_CONFIGURE)
>
> ifeq ($$($(2)_OVERRIDE_SRCDIR),)
> # In the normal case (no package override), the sequence of steps is
> @@ -395,13 +395,11 @@ ifeq ($$($(2)_OVERRIDE_SRCDIR),)
> # extract
> # patch
> # configure
> -$(1)-configure: $(1)-patch $(1)-depends \
> - $$($(2)_TARGET_CONFIGURE)
> +$$($(2)_TARGET_CONFIGURE): | $$($(2)_DEPENDENCIES) $$($(2)_TARGET_PATCH)
Why is $$($(2)_TARGET_PATCH) an order-only dependency? Why isn't the
configure -> patch dependency handled like all the others, using stamp
files dependencies?
Note that I do understand the order-only dependency of
$(2)_TARGET_CONFIGURE on $(2)_DEPENDENCIES, but not on
$(2)_TARGET_PATCH.
> -$(1)-patch: $(1)-extract $$($(2)_TARGET_PATCH)
> +$(1)-patch: $$($(2)_TARGET_PATCH)
>
> -$(1)-extract: $(1)-source \
> - $$($(2)_TARGET_EXTRACT)
> +$(1)-extract: $$($(2)_TARGET_EXTRACT)
>
> $(1)-depends: $$($(2)_DEPENDENCIES)
>
> @@ -411,10 +409,9 @@ else
> # source, by rsyncing
> # depends
> # configure
> -$(1)-configure: $(1)-depends \
> - $$($(2)_TARGET_CONFIGURE)
> +$$($(2)_TARGET_CONFIGURE): | $$($(2)_DEPENDENCIES) $$($(2)_TARGET_RSYNC)
>
> -$(1)-depends: $(1)-rsync $$($(2)_DEPENDENCIES)
> +$(1)-depends: $$($(2)_DEPENDENCIES)
>
> $(1)-patch: $(1)-rsync
> $(1)-extract: $(1)-rsync
> diff --git a/package/uclibc/uclibc.mk b/package/uclibc/uclibc.mk
> index 181a772..8ae0e26 100644
> --- a/package/uclibc/uclibc.mk
> +++ b/package/uclibc/uclibc.mk
> @@ -24,7 +24,8 @@ UCLIBC_DEPENDENCIES = host-gcc-initial linux-headers
>
> # Before uClibc is built, we must have the second stage
> # cross-compiler, for some gcc versions, and when NPTL is used.
> -uclibc-build: $(if $(BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD),host-gcc-intermediate)
> +UCLIBC_BUILD_DEPENDENCIES = \
> + $(if $(BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD),host-gcc-intermediate)
>
> # specifying UCLIBC_CONFIG_FILE on the command-line overrides the .config
> # setting.
There is the same problem in package/glibc/glibc.mk.
Thomas
--
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
next prev parent reply other threads:[~2013-09-17 18:23 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-17 7:59 [Buildroot] [PATCH v4 0/3] Fix for top-level parallel make part 1 Fabio Porcedda
2013-09-17 7:59 ` [Buildroot] [PATCH v4 1/3] package: add toolchain dependency to inner-generic-package Fabio Porcedda
2013-09-17 7:59 ` [Buildroot] [PATCH v4 2/3] pkg-generic: fix rules for top-level parallel make Fabio Porcedda
2013-09-17 18:23 ` Thomas Petazzoni [this message]
2013-09-19 6:53 ` Fabio Porcedda
2013-09-19 19:39 ` Thomas Petazzoni
2013-09-20 14:44 ` Fabio Porcedda
2013-09-20 16:39 ` Arnout Vandecappelle
2013-09-17 7:59 ` [Buildroot] [PATCH v4 3/3] package/Makefile.in: add a way to don't force jobs in sub-make Fabio Porcedda
2013-09-17 18:17 ` Thomas Petazzoni
2013-09-17 18:24 ` Ciarán Rehill
2013-09-19 6:35 ` Fabio Porcedda
2013-09-19 6:44 ` Thomas De Schampheleire
2013-09-19 6:59 ` Fabio Porcedda
2013-09-19 7:11 ` Thomas De Schampheleire
2013-09-20 14:57 ` Fabio Porcedda
2013-09-23 8:00 ` Fabio Porcedda
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=20130917202343.3b714fad@skate \
--to=thomas.petazzoni@free-electrons.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox