ppc: fix build with O=$(output_dir)
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
@@ -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
Quoted 11 lines · Roland Dreier
Recent changes to
arch/ppc/boot/lib/MakefilecauseCC
arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o
Assembler messages:
FATAL: can't createarch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o: No such file or directorywhen 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/Makefilecreate 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/
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
@@ -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)
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/MakefilecauseCC
arch/ppc/boot/lib/../../../../lib/zlib_inflate/infblock.o
Assembler messages:
FATAL: can't createarch/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_inflatesources to build objects in thearch/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/
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
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
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)
Tom Rini
Acked-byQuoted 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/