Patchwork Fix a parallel build failure.

login
register
mail settings
Submitter Daniel Jacobowitz
Date Nov. 4, 2009, 8:20 p.m.
Message ID <1257366009-7057-1-git-send-email-drow@false.org>
Download mbox | patch
Permalink /patch/37621/
State New
Headers show

Comments

Daniel Jacobowitz - Nov. 4, 2009, 8:20 p.m.
From: Daniel Jacobowitz <dan@codesourcery.com>

With enough parallelism, make will run all the dependencies of
build-all at the same time:

build-all: config-host.h config-all-devices.h $(DOCS) $(TOOLS)

So some of the $(TOOLS) will build before config-host.h is finished.
The object files need to depend on it explicitly.  Subdirectories are
OK since they are started from the body of build-all, not its
dependencies.

Signed-off-by: Daniel Jacobowitz <dan@codesourcery.com>
---
 Makefile  |    2 ++
 rules.mak |    2 +-
 2 files changed, 3 insertions(+), 1 deletions(-)
Stefan Weil - Nov. 4, 2009, 8:48 p.m.
Daniel Jacobowitz schrieb:
> From: Daniel Jacobowitz <dan@codesourcery.com>
>
> With enough parallelism, make will run all the dependencies of
> build-all at the same time:
>
> build-all: config-host.h config-all-devices.h $(DOCS) $(TOOLS)
>
> So some of the $(TOOLS) will build before config-host.h is finished.
> The object files need to depend on it explicitly.  Subdirectories are
> OK since they are started from the body of build-all, not its
> dependencies.
>
> Signed-off-by: Daniel Jacobowitz <dan@codesourcery.com>
> ---
>  Makefile  |    2 ++
>  rules.mak |    2 +-
>  2 files changed, 3 insertions(+), 1 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index c783aa4..ed9a420 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1,5 +1,7 @@
>  # Makefile for QEMU.
>  
> +GENERATED_HEADERS = config-host.h config-all-devices.h
> +
>  ifneq ($(wildcard config-host.mak),)
>  # Put the all: rule here so that config-host.mak can contain dependencies.
>  all: build-all
> diff --git a/rules.mak b/rules.mak
> index 5d7e8bb..4eb1f90 100644
> --- a/rules.mak
> +++ b/rules.mak
> @@ -13,7 +13,7 @@ MAKEFLAGS += -rR
>  
>  QEMU_CFLAGS += -MMD -MP -MT $@
>  
> -%.o: %.c
> +%.o: %.c $(GENERATED_HEADERS)
>  	$(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) -c -o $@ $<,"  CC    $(TARGET_DIR)$@")
>  
>  %.o: %.S
>   

Maybe a mix of your patch and my patch
(http://patchwork.ozlabs.org/patch/37446/)
would be the best fix for this problem.

It should also be possible to apply both patches.

Regards
Stefan
Daniel Jacobowitz - Nov. 4, 2009, 8:58 p.m.
On Wed, Nov 04, 2009 at 09:48:22PM +0100, Stefan Weil wrote:
> Maybe a mix of your patch and my patch
> (http://patchwork.ozlabs.org/patch/37446/)
> would be the best fix for this problem.
> 
> It should also be possible to apply both patches.

Thanks, I didn't find your patch.  I don't have any preference which
is applied, although I'm always in favor of eliminating unnecessary
recursive invocations.

Patch

diff --git a/Makefile b/Makefile
index c783aa4..ed9a420 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,7 @@ 
 # Makefile for QEMU.
 
+GENERATED_HEADERS = config-host.h config-all-devices.h
+
 ifneq ($(wildcard config-host.mak),)
 # Put the all: rule here so that config-host.mak can contain dependencies.
 all: build-all
diff --git a/rules.mak b/rules.mak
index 5d7e8bb..4eb1f90 100644
--- a/rules.mak
+++ b/rules.mak
@@ -13,7 +13,7 @@  MAKEFLAGS += -rR
 
 QEMU_CFLAGS += -MMD -MP -MT $@
 
-%.o: %.c
+%.o: %.c $(GENERATED_HEADERS)
 	$(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) -c -o $@ $<,"  CC    $(TARGET_DIR)$@")
 
 %.o: %.S