Skip to contentSkip to conversation

ppc: fix build with O=$(output_dir)

PATCH In review Roland Dreier 3 participants 8 messages Oct 19, 2004 – Oct 31, 2004 Kbuild

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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.

arch/ppc/boot/lib/Makefile +7 -1
Index: linux-2.6.9/arch/ppc/boot/lib/Makefile
===================================================================
@@ -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
#1 lore raw
Quoted 11 lines · Roland Dreier

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.

Signature · 2 lines
Tom Rini
http://gate.crashing.org/~trini/
#3 lore raw
In reply to Roland Dreier
Quoted 10 lines · Roland Dreier

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

Quoted 5 lines

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.

Signature · 2 lines
Tom Rini
http://gate.crashing.org/~trini/
#4 lore raw

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

#2 lore raw
In reply to Tom Rini

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.

arch/ppc/boot/lib/Makefile +6 -3
Index: linux-2.6.9/arch/ppc/boot/lib/Makefile
===================================================================
@@ -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)
#5 lore raw
In reply to Roland Dreier
Quoted 10 lines · Roland Dreier

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

#6 lore raw
In reply to Tom Rini
Quoted 5 lines · Tom Rini

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

Makefile renamed from arch/ppc/boot/lib/Makefile +18 -5
@@ -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)
Acked-by
#7 lore raw
Quoted 17 lines · Sam Ravnborg
Quoted 5 lines · Tom Rini

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)

Quoted 2 lines

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 &

if wanted.

Signature · 2 lines
Tom Rini
http://gate.crashing.org/~trini/