All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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 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.