Subject: Re: make -j12 all fails in uImage target

From: Olaf Hering <[email-masked]>
Date: Wed, 25 May 2005 23:34:33 +0200

On Sun, Feb 06, Sam Ravnborg wrote:

> On Sun, Feb 06, 2005 at 02:51:31PM -0700, Tom Rini wrote:
> > On Sun, Feb 06, 2005 at 01:40:14PM +0100, Olaf Hering wrote:

> > >   GZIP    arch/ppc/boot/images/vmlinux.gz
> > > /bin/sh: line 1: arch/ppc/boot/images/vmlinux.bin: No such file or directory
> > > make[2]: *** [arch/ppc/boot/images/vmlinux.gz] Error 1
> > > make[1]: *** [uImage] Error 2
> > > make[1]: *** Waiting for unfinished jobs....
> > > 
> > > also, one time that zImage.chrp was only 570K instead of the expected
> > > 1.4M, so netboot failed. But I got no build error.
> > > Any idea what dependency is missing?
> > 
> > That is kinda odd.  My thought is that arch/ppc/boot/ just isn't fully
> > safe for -j'ing.  Sam, any ideas on how to debug this kinda problem?
> 
> The problem is that the images/ sub directory is visited before the
> prerequisites are finished.
> I have no good way to debug this - I can see it based on the Makefile and
> the output Olaf included.
> 
> Also the problem Olaf describe is just a cp of a half finished file.
> 
> 
> So the fix is to let the images/ directory depends on the rest of the
> directories.
> 
> Something like this may do the trick:
> 
> $(obj)/images: $(addprefix $(obj)/,$(subdir-y) $(bootdir-y))
> 	$(Q)$(MAKE) $(build)=$@
> 
> And then delete the assignment of images to subdir-y
> 
> 
> Another solution would be to get rid on the images/ drectory and place
> outputfiles where they are being built.

I did it this way:

...
  AS      arch/ppc/boot/common/util.o
  CC      arch/ppc/boot/of1275/write.o
  AR      arch/ppc/boot/common/lib.a
  AR      arch/ppc/boot/of1275/lib.a
`arch/ppc/boot/images/vmlinux.gz.27631' -> `arch/ppc/boot/images/vmlinux.gz'
  AR      arch/ppc/boot/lib/lib.a
  UIMAGE  arch/ppc/boot/images/uImage
"mkimage" command not found - U-Boot images will not be built
  Image: arch/ppc/boot/images/uImage not made
`arch/ppc/boot/images/vmlinux.gz.27676' -> `arch/ppc/boot/images/vmlinux.gz'
  CC      arch/ppc/boot/openfirmware/dummy.o
  AS      arch/ppc/boot/simple/head.o
  AS      arch/ppc/boot/simple/relocate.o
...

Index: linux-2.6.12-rc5-olh/scripts/Makefile.lib
===================================================================
--- linux-2.6.12-rc5-olh.orig/scripts/Makefile.lib
+++ linux-2.6.12-rc5-olh/scripts/Makefile.lib
@@ -1,3 +1,4 @@
+# vim: syntax=sh
 # ===========================================================================
 # kbuild: Generic definitions
 # ===========================================================================
@@ -177,7 +178,7 @@ cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS)
 # ---------------------------------------------------------------------------

 quiet_cmd_gzip = GZIP    $@
-cmd_gzip = gzip -f -9 < $< > $@
+cmd_gzip = gzip -f -9 < $< > $@.$$$$ ; mv -v $@.$$$$ $@

 # ===========================================================================
 # Generic stuff