2004-10-19 06:48:31

by Roland Dreier

[permalink] [raw]
Subject: [PATCH] ppc: fix build with O=$(output_dir)

Recent changes to arch/ppc/boot/lib/Makefile cause

CC arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o
Assembler messages:
FATAL: can't create arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o: No such file or directory

when building a ppc kernel using O=$(output_dir) with CONFIG_ZLIB_INFLATE=n,
because the $(output_dir)/lib/zlib_inflate directory doesn't get created.

This patch, which makes arch/ppc/boot/lib/Makefile create the
directory if needed, is one fix for the problem.

Signed-off-by: Roland Dreier <[email protected]>

Index: linux-2.6.9/arch/ppc/boot/lib/Makefile
===================================================================
--- linux-2.6.9.orig/arch/ppc/boot/lib/Makefile 2004-10-18 14:54:55.000000000 -0700
+++ linux-2.6.9/arch/ppc/boot/lib/Makefile 2004-10-18 23:41:28.000000000 -0700
@@ -4,7 +4,13 @@

CFLAGS_kbd.o += -Idrivers/char

-lib-y := $(addprefix ../../../../lib/zlib_inflate/, \
+ZLIB_DIR := ../../../../lib/zlib_inflate/
+
+lib-y := $(addprefix $(ZLIB_DIR), \
infblock.o infcodes.o inffast.o inflate.o inftrees.o infutil.o)
lib-y += div64.o
lib-$(CONFIG_VGA_CONSOLE) += vreset.o kbd.o
+
+ifneq ($(KBUILD_SRC),)
+_make_zlib_dir := $(shell [ -d $(obj)/$(ZLIB_DIR) ] || mkdir -p $(obj)/$(ZLIB_DIR) )
+endif


2004-10-19 17:05:44

by Tom Rini

[permalink] [raw]
Subject: Re: [PATCH] ppc: fix build with O=$(output_dir)

On Mon, Oct 18, 2004 at 11:48:22PM -0700, Roland Dreier wrote:

> Recent changes to arch/ppc/boot/lib/Makefile cause
>
> CC arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o
> Assembler messages:
> FATAL: can't create arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o: No such file or directory
>
> when building a ppc kernel using O=$(output_dir) with CONFIG_ZLIB_INFLATE=n,
> because the $(output_dir)/lib/zlib_inflate directory doesn't get created.
>
> This patch, which makes arch/ppc/boot/lib/Makefile create the
> directory if needed, is one fix for the problem.

IMHO, this is the uglier of the two fixes for the problem, as this means
you'll still be clobbering lib/zlib_inflate/*.o when ZLIB_INFLATE!=n.
The other is to go back to putting the object in $(O)/arch/ppc/boot/lib/
and copying the guts of the .c.o rule to arch/ppc/boot/lib/Makefile

Sam, any chance you've had time to think up a good fix to this? Thanks.

--
Tom Rini
http://gate.crashing.org/~trini/

2004-10-19 18:34:14

by Tom Rini

[permalink] [raw]
Subject: Re: [PATCH/take 2] ppc: fix build with O=$(output_dir)

On Tue, Oct 19, 2004 at 11:14:38AM -0700, Roland Dreier wrote:

> Subject: [PATCH/take 2] ppc: fix build with O=$(output_dir)
>
> OK, here's a patch that builds a separate copy for arch/ppc/boot/lib.
>
> Recent changes to arch/ppc/boot/lib/Makefile cause
>
> CC arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o
> Assembler messages:
> FATAL: can't create arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o: No such file or directory
>
> when building a ppc kernel using O=$(output_dir) with CONFIG_ZLIB_INFLATE=n,
> because the $(output_dir)/lib/zlib_inflate directory doesn't get created.
>
> This patch, which uses the lib/zlib_inflate sources to build objects
> in the arch/ppc/boot/lib/directory, is one fix for the problem.

This misses the bit to invoke the checker as well (when I first thought
this up I poked Al Viro about the general question of checker on boot
code, and he wanted it, so...). And having 2 'magic' rules not just 1
is why I don't like this too much and was hoping Sam would have some
idea of a good fix.

--
Tom Rini
http://gate.crashing.org/~trini/

2004-10-21 21:06:29

by Tom Rini

[permalink] [raw]
Subject: Re: [PATCH] ppc: fix build with O=$(output_dir)

On Thu, Oct 21, 2004 at 05:56:14PM +0000, [email protected] wrote:
> ChangeSet 1.2040, 2004/10/21 10:56:14-07:00, [email protected]
>
> [PATCH] ppc: fix build with O=$(output_dir)
>
> Recent changes to arch/ppc/boot/lib/Makefile cause
>
> CC arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o
> Assembler messages:
> FATAL: can't create arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o: No such file or directory
>
> when building a ppc kernel using O=$(output_dir) with CONFIG_ZLIB_INFLATE=n,
> because the $(output_dir)/lib/zlib_inflate directory doesn't get created.
>
> This patch, which makes arch/ppc/boot/lib/Makefile create the
> directory if needed, is one fix for the problem.
>
> Signed-off-by: Roland Dreier <[email protected]>
> Signed-off-by: Andrew Morton <[email protected]>
> Signed-off-by: Linus Torvalds <[email protected]>

Can we back this out please? As I noted on lkml once I saw this, it
still doesn't fix the problem of overwriting files in lib/zlib_inflate/
if ZLIB_INFLATE!=n, and adding explicit rules for lib/zlib_inflate/foo.c
-> ./foo.o looks quite bad (it's 2 calls if we want checker to get
invoked, one if we skip doing that). At the end of the thread, both
Roland and I were hoping Sam knew of a clever solution to this.

--
Tom Rini
http://gate.crashing.org/~trini/

2004-10-22 04:10:17

by Tom Rini

[permalink] [raw]
Subject: Re: [PATCH] ppc: fix build with O=$(output_dir)

On Thu, Oct 21, 2004 at 05:56:14PM +0000, [email protected] wrote:
> ChangeSet 1.2040, 2004/10/21 10:56:14-07:00, [email protected]
>
> [PATCH] ppc: fix build with O=$(output_dir)
>
> Recent changes to arch/ppc/boot/lib/Makefile cause
>
> CC arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o
> Assembler messages:
> FATAL: can't create arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o: No such file or directory
>
> when building a ppc kernel using O=$(output_dir) with CONFIG_ZLIB_INFLATE=n,
> because the $(output_dir)/lib/zlib_inflate directory doesn't get created.
>
> This patch, which makes arch/ppc/boot/lib/Makefile create the
> directory if needed, is one fix for the problem.
>
> Signed-off-by: Roland Dreier <[email protected]>
> Signed-off-by: Andrew Morton <[email protected]>
> Signed-off-by: Linus Torvalds <[email protected]>

Can we back this out please? As I noted on lkml once I saw this, it
still doesn't fix the problem of overwriting files in lib/zlib_inflate/
if ZLIB_INFLATE!=n, and adding explicit rules for lib/zlib_inflate/foo.c
-> ./foo.o looks quite bad (it's 2 calls if we want checker to get
invoked, one if we skip doing that). At the end of the thread, both
Roland and I were hoping Sam knew of a clever solution to this.

--
Tom Rini
http://gate.crashing.org/~trini/

2004-10-22 04:26:16

by Roland Dreier

[permalink] [raw]
Subject: Re: [PATCH] ppc: fix build with O=$(output_dir)

Tom> Can we back this out please? As I noted on lkml once I saw
Tom> this, it still doesn't fix the problem of overwriting files
Tom> in lib/zlib_inflate/ if ZLIB_INFLATE!=n, and adding explicit
Tom> rules for lib/zlib_inflate/foo.c
-> ./foo.o looks quite bad (it's 2 calls if we want checker to get
Tom> invoked, one if we skip doing that). At the end of the
Tom> thread, both Roland and I were hoping Sam knew of a clever
Tom> solution to this.

I can't really object to backing this out, but I'll just point out
that without this patch, in the situations where mainline builds at
all, it still overwrites files in lib/zlib_inflate/. (And builds with
O=xxx don't work at all)

It might make more sense to leave this patch in for now and beg Sam
for a better fix in the future.

Thanks,
Roland

2004-10-19 19:00:39

by Roland Dreier

[permalink] [raw]
Subject: Re: [PATCH/take 2] ppc: fix build with O=$(output_dir)

Tom> This misses the bit to invoke the checker as well (when I
Tom> first thought this up I poked Al Viro about the general
Tom> question of checker on boot code, and he wanted it, so...).
Tom> And having 2 'magic' rules not just 1 is why I don't like
Tom> this too much and was hoping Sam would have some idea of a
Tom> good fix.

Hmm, good point, forgot about the checker. I tried various magic ways
of fixing this with vpath etc. but I couldn't mke it work. Sam,
you're our last hope I guess.

Thanks,
Roland

2004-10-22 06:14:10

by Roland Dreier

[permalink] [raw]
Subject: [PATCH/take 2] ppc: fix build with O=$(output_dir)

Subject: [PATCH/take 2] ppc: fix build with O=$(output_dir)

OK, here's a patch that builds a separate copy for arch/ppc/boot/lib.

Recent changes to arch/ppc/boot/lib/Makefile cause

CC arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o
Assembler messages:
FATAL: can't create arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o: No such file or directory

when building a ppc kernel using O=$(output_dir) with CONFIG_ZLIB_INFLATE=n,
because the $(output_dir)/lib/zlib_inflate directory doesn't get created.

This patch, which uses the lib/zlib_inflate sources to build objects
in the arch/ppc/boot/lib/directory, is one fix for the problem.

Signed-off-by: Roland Dreier <[email protected]>

Index: linux-2.6.9/arch/ppc/boot/lib/Makefile
===================================================================
--- linux-2.6.9.orig/arch/ppc/boot/lib/Makefile 2004-10-18 14:54:55.000000000 -0700
+++ linux-2.6.9/arch/ppc/boot/lib/Makefile 2004-10-19 11:10:07.000000000 -0700
@@ -4,7 +4,10 @@

CFLAGS_kbd.o += -Idrivers/char

-lib-y := $(addprefix ../../../../lib/zlib_inflate/, \
- infblock.o infcodes.o inffast.o inflate.o inftrees.o infutil.o)
-lib-y += div64.o
+ZLIB_OBJS := infblock.o infcodes.o inffast.o inflate.o inftrees.o infutil.o
+
+lib-y := $(ZLIB_OBJS) div64.o
lib-$(CONFIG_VGA_CONSOLE) += vreset.o kbd.o
+
+$(addprefix $(obj)/, $(ZLIB_OBJS)): $(obj)/%.o: lib/zlib_inflate/%.c
+ $(call if_changed,cc_o_c)

2004-10-26 20:34:50

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [PATCH/take 2] ppc: fix build with O=$(output_dir)

On Tue, Oct 19, 2004 at 11:58:03AM -0700, Roland Dreier wrote:
> Tom> This misses the bit to invoke the checker as well (when I
> Tom> first thought this up I poked Al Viro about the general
> Tom> question of checker on boot code, and he wanted it, so...).
> Tom> And having 2 'magic' rules not just 1 is why I don't like
> Tom> this too much and was hoping Sam would have some idea of a
> Tom> good fix.
>
> Hmm, good point, forgot about the checker. I tried various magic ways
> of fixing this with vpath etc. but I couldn't mke it work. Sam,
> you're our last hope I guess.

ppc seems to come pretty low in my todo list these days - sorry.
Will take a deep look one day.

[um, m232r needs a great deal of attention also..]

Sam

2004-10-31 21:45:32

by Sam Ravnborg

[permalink] [raw]
Subject: Re: [PATCH/take 2] ppc: fix build with O=$(output_dir)

On Tue, Oct 19, 2004 at 11:29:28AM -0700, Tom Rini wrote:

> This misses the bit to invoke the checker as well (when I first thought
> this up I poked Al Viro about the general question of checker on boot
> code, and he wanted it, so...). And having 2 'magic' rules not just 1
> is why I don't like this too much and was hoping Sam would have some
> idea of a good fix.

Hi Tom.

Finally took a look.
The best approach is to grab a copy of the .c file and compile
that in this dir.
In this way we avoid unessesary recompile etc. but waste a bit disk space.
I do not like symlinks in general and made a copy. (note: uses cat to give
appropriate permission)

If you are OK with this let me know if you want me to push it to linus
or you go via the ppc tree.

PS: Had troubles with kbd so commented out.

Sam

===== Makefile 1.11 vs edited =====
--- 1.11/arch/ppc/boot/lib/Makefile 2004-10-25 21:47:48 +02:00
+++ edited/Makefile 2004-10-31 23:37:23 +01:00
@@ -2,9 +2,22 @@
# Makefile for some libs needed by zImage.
#

-CFLAGS_kbd.o += -Idrivers/char
+CFLAGS_kbd.o := -Idrivers/char
+CFLAGS_vreset.o := -I$(srctree)/arch/ppc/boot/include

-lib-y := $(addprefix ../../../../lib/zlib_inflate/, \
- infblock.o infcodes.o inffast.o inflate.o inftrees.o infutil.o)
-lib-y += div64.o
-lib-$(CONFIG_VGA_CONSOLE) += vreset.o kbd.o
+zlib := infblock.c infcodes.c inffast.c inflate.c inftrees.c infutil.c
+
+lib-y += $(zlib:.c=.o) div64.o
+lib-$(CONFIG_VGA_CONSOLE) += vreset.o #kbd.o
+
+
+# zlib files needs header from their original place
+EXTRA_CFLAGS += -Ilib/zlib_inflate
+
+quiet_cmd_copy_zlib = COPY $@
+ cmd_copy_zlib = cat $< > $@
+
+$(addprefix $(obj)/,$(zlib)): $(obj)/%: $(srctree)/lib/zlib_inflate/%
+ $(call cmd,copy_zlib)
+
+clean-files := $(zlib)

2004-10-31 21:58:07

by Tom Rini

[permalink] [raw]
Subject: Re: [PATCH/take 2] ppc: fix build with O=$(output_dir)

On Sun, Oct 31, 2004 at 11:39:50PM +0100, Sam Ravnborg wrote:
> On Tue, Oct 19, 2004 at 11:29:28AM -0700, Tom Rini wrote:
>
> > This misses the bit to invoke the checker as well (when I first thought
> > this up I poked Al Viro about the general question of checker on boot
> > code, and he wanted it, so...). And having 2 'magic' rules not just 1
> > is why I don't like this too much and was hoping Sam would have some
> > idea of a good fix.
>
> Hi Tom.
>
> Finally took a look.
> The best approach is to grab a copy of the .c file and compile
> that in this dir.
> In this way we avoid unessesary recompile etc. but waste a bit disk space.
> I do not like symlinks in general and made a copy. (note: uses cat to give
> appropriate permission)
>
> If you are OK with this let me know if you want me to push it to linus
> or you go via the ppc tree.

Works for me, and please push it via your tree. Thanks &
Acked-by: Tom Rini <[email protected]>

if wanted.

--
Tom Rini
http://gate.crashing.org/~trini/