Message ID | 1313800642-32418-1-git-send-email-lacombar@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
? 2011?08?20? 08:37, Arnaud Lacombe ??: > Hi folks, > > The attached patch modify Kbuild to allow to directly re-use code in multiple > directory without having to go through a copy. Technically, it changes Kbuild to > use by default the VPATH feature of GNU make and provides accessors for Makefile > to change it indirectly. ... > > With the attached patch, we would do: > > arch/foo/boot/Makefile: > LDFLAGS_fancy.o := -DPANTS=30 > obj-y += fancy.o > vpath-y += $(srctree)/arch/foo/lib > > and let GNU make do the job. Just note that don't forget to update Documentation/kbuild/makefiles.txt. ;) Thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi, On Fri, Aug 19, 2011 at 8:37 PM, Arnaud Lacombe <lacombar@gmail.com> wrote: > Hi folks, > > The attached patch modify Kbuild to allow to directly re-use code in multiple > directory without having to go through a copy. Technically, it changes Kbuild to > use by default the VPATH feature of GNU make and provides accessors for Makefile > to change it indirectly. > > Considering: > > arch/foo/lib: > fancy.c > > We want to be able to build it with -DPANTS=32 in the kernel, but the > bootloader requires -DPANTS_SIZE=30. > > Currently we would do, either: > > arch/foo/lib/Makefile > LDFLAGS_fancy.o := -DPANTS=32 > obj-y += fancy.o > > and, either: > > arch/foo/boot/Makefile: > LDFLAGS_fancy.o := -DPANTS=30 > obj-y += fancy.o > $(obj)/fancy.c: $(srctree)/arch/foo/lib/fancy.c > $(call cmd,shipped) > > or > > arch/foo/boot/Makefile: > LDFLAGS_fancy.o := -DPANTS=30 > obj-y += fancy.o > $(obj)/fancy.o: $(srctree)/arch/foo/lib/fancy.c > $(call cmd,cc_c_o) > > The former implies an extra copy of the source file, the latter expose Kbuild > internal function. > > With the attached patch, we would do: > > arch/foo/boot/Makefile: > LDFLAGS_fancy.o := -DPANTS=30 > obj-y += fancy.o > vpath-y += $(srctree)/arch/foo/lib > > and let GNU make do the job. > Nicolas, I guess you were the one who was interested for a generic way to do such code re-use, did you had any chance to test the quoted patch ? Thanks, - Arnaud > Comments welcome, > - Arnaud > > Cc: linux-kernel@vger.kernel.org > Cc: linux-arm-kernel@lists.infradead.org > > --- > Makefile | 5 +++-- > scripts/Makefile.build | 24 +++++++++++++++--------- > scripts/Makefile.lib | 17 ++++++++++++----- > 3 files changed, 30 insertions(+), 16 deletions(-) > > diff --git a/Makefile b/Makefile > index b4ca4e1..db7f7f5 100644 > --- a/Makefile > +++ b/Makefile > @@ -154,9 +154,10 @@ objtree := $(CURDIR) > src := $(srctree) > obj := $(objtree) > > -VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD)) > +KBUILD_VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD)) > +VPATH := $(KBUILD_VPATH) > > -export srctree objtree VPATH > +export srctree objtree KBUILD_VPATH > > > # SUBARCH tells the usermode build what the underlying arch is. That is set > diff --git a/scripts/Makefile.build b/scripts/Makefile.build > index a0fd502..ac539d7 100644 > --- a/scripts/Makefile.build > +++ b/scripts/Makefile.build > @@ -18,6 +18,8 @@ always := > targets := > subdir-y := > subdir-m := > +vpath-y := > +vpath-m := > EXTRA_AFLAGS := > EXTRA_CFLAGS := > EXTRA_CPPFLAGS := > @@ -37,6 +39,7 @@ include scripts/Kbuild.include > > # For backward compatibility check that these variables do not change > save-cflags := $(CFLAGS) > +save-vpath := $(VPATH) > > # The filename Kbuild has precedence over Makefile > kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) > @@ -48,6 +51,9 @@ ifeq ($(KBUILD_NOPEDANTIC),) > ifneq ("$(save-cflags)","$(CFLAGS)") > $(error CFLAGS was changed in "$(kbuild-file)". Fix it to use EXTRA_CFLAGS) > endif > + ifneq ("$(save-vpath)","$(VPATH)") > + $(error VPATH was changed in "$(kbuild-file)". Please uses vpath-y) > + endif > endif > > # > @@ -198,13 +204,13 @@ $(multi-objs-y:.o=.lst) : modname = $(modname-multi) > quiet_cmd_cc_s_c = CC $(quiet_modtag) $@ > cmd_cc_s_c = $(CC) $(c_flags) -fverbose-asm -S -o $@ $< > > -$(obj)/%.s: $(src)/%.c FORCE > +$(obj)/%.s: %.c FORCE > $(call if_changed_dep,cc_s_c) > > quiet_cmd_cc_i_c = CPP $(quiet_modtag) $@ > cmd_cc_i_c = $(CPP) $(c_flags) -o $@ $< > > -$(obj)/%.i: $(src)/%.c FORCE > +$(obj)/%.i: %.c FORCE > $(call if_changed_dep,cc_i_c) > > cmd_gensymtypes = \ > @@ -219,7 +225,7 @@ cmd_cc_symtypes_c = \ > $(call cmd_gensymtypes,true,$@) >/dev/null; \ > test -s $@ || rm -f $@ > > -$(obj)/%.symtypes : $(src)/%.c FORCE > +$(obj)/%.symtypes : %.c FORCE > $(call cmd,cc_symtypes_c) > > # C (.c) files > @@ -301,13 +307,13 @@ define rule_cc_o_c > endef > > # Built-in and composite module parts > -$(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE > +$(obj)/%.o: %.c $(recordmcount_source) FORCE > $(call cmd,force_checksrc) > $(call if_changed_rule,cc_o_c) > > # Single-part modules are special since we need to mark them in $(MODVERDIR) > > -$(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE > +$(single-used-m): %.o: %.c $(recordmcount_source) FORCE > $(call cmd,force_checksrc) > $(call if_changed_rule,cc_o_c) > @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod) > @@ -317,7 +323,7 @@ quiet_cmd_cc_lst_c = MKLST $@ > $(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \ > System.map $(OBJDUMP) > $@ > > -$(obj)/%.lst: $(src)/%.c FORCE > +$(obj)/%.lst: %.c FORCE > $(call if_changed_dep,cc_lst_c) > > # Compile assembler sources (.S) > @@ -331,13 +337,13 @@ $(real-objs-m:.o=.s): modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE) > quiet_cmd_as_s_S = CPP $(quiet_modtag) $@ > cmd_as_s_S = $(CPP) $(a_flags) -o $@ $< > > -$(obj)/%.s: $(src)/%.S FORCE > +$(obj)/%.s: %.S FORCE > $(call if_changed_dep,as_s_S) > > quiet_cmd_as_o_S = AS $(quiet_modtag) $@ > cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< > > -$(obj)/%.o: $(src)/%.S FORCE > +$(obj)/%.o: %.S FORCE > $(call if_changed_dep,as_o_S) > > targets += $(real-objs-y) $(real-objs-m) $(lib-y) > @@ -349,7 +355,7 @@ quiet_cmd_cpp_lds_S = LDS $@ > cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -C -U$(ARCH) \ > -D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $< > > -$(obj)/%.lds: $(src)/%.lds.S FORCE > +$(obj)/%.lds: %.lds.S FORCE > $(call if_changed_dep,cpp_lds_S) > > # Build the compiled-in targets > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib > index aeea84a..b57b621 100644 > --- a/scripts/Makefile.lib > +++ b/scripts/Makefile.lib > @@ -46,6 +46,13 @@ obj-m := $(filter-out %/, $(obj-m)) > > subdir-ym := $(sort $(subdir-y) $(subdir-m)) > > +# > +vpath-ym := $(vpath-y) $(vpath-m) > +VPATH := $(KBUILD_VPATH) > +VPATH += $(srctree)/$(src) > +VPATH += $(obj) > +VPATH += $(vpath-ym) > + > # if $(foo-objs) exists, foo.o is a composite object > multi-used-y := $(sort $(foreach m,$(obj-y), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))), $(m)))) > multi-used-m := $(sort $(foreach m,$(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))), $(m)))) > @@ -167,7 +174,7 @@ ifdef REGENERATE_PARSERS > quiet_cmd_gperf = GPERF $@ > cmd_gperf = gperf -t --output-file $@ -a -C -E -g -k 1,3,$$ -p -t $< > > -$(src)/%.hash.c_shipped: $(src)/%.gperf > +$(src)/%.hash.c_shipped: %.gperf > $(call cmd,gperf) > > # LEX > @@ -177,7 +184,7 @@ LEX_PREFIX = $(if $(LEX_PREFIX_${baseprereq}),$(LEX_PREFIX_${baseprereq}),yy) > quiet_cmd_flex = LEX $@ > cmd_flex = flex -o$@ -L -P $(LEX_PREFIX) $< > > -$(src)/%.lex.c_shipped: $(src)/%.l > +$(src)/%.lex.c_shipped: %.l > $(call cmd,flex) > > # YACC > @@ -187,13 +194,13 @@ YACC_PREFIX = $(if $(YACC_PREFIX_${baseprereq}),$(YACC_PREFIX_${baseprereq}),yy) > quiet_cmd_bison = YACC $@ > cmd_bison = bison -o$@ -t -l -p $(YACC_PREFIX) $< > > -$(src)/%.tab.c_shipped: $(src)/%.y > +$(src)/%.tab.c_shipped: %.y > $(call cmd,bison) > > quiet_cmd_bison_h = YACC $@ > cmd_bison_h = bison -o/dev/null --defines=$@ -t -l -p $(YACC_PREFIX) $< > > -$(src)/%.tab.h_shipped: $(src)/%.y > +$(src)/%.tab.h_shipped: %.y > $(call cmd,bison_h) > > endif > @@ -204,7 +211,7 @@ endif > quiet_cmd_shipped = SHIPPED $@ > cmd_shipped = cat $< > $@ > > -$(obj)/%: $(src)/%_shipped > +$(obj)/%: %_shipped > $(call cmd,shipped) > > # Commands useful for building a boot image > -- > 1.7.6.153.g78432 > > -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, 29 Aug 2011, Arnaud Lacombe wrote: > On Fri, Aug 19, 2011 at 8:37 PM, Arnaud Lacombe <lacombar@gmail.com> wrote: > > With the attached patch, we would do: > > > > arch/foo/boot/Makefile: > > LDFLAGS_fancy.o := -DPANTS=30 > > obj-y += fancy.o > > vpath-y += $(srctree)/arch/foo/lib > > > > and let GNU make do the job. > > > Nicolas, I guess you were the one who was interested for a generic way > to do such code re-use, did you had any chance to test the quoted > patch ? I actually missed the original post (I wasn't in CC) so I didn't test it. Will try to do so ASAP. Nicolas -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi, On Tue, Aug 30, 2011 at 12:32 AM, Nicolas Pitre <nico@fluxnic.net> wrote: > On Mon, 29 Aug 2011, Arnaud Lacombe wrote: > >> On Fri, Aug 19, 2011 at 8:37 PM, Arnaud Lacombe <lacombar@gmail.com> wrote: >> > With the attached patch, we would do: >> > >> > arch/foo/boot/Makefile: >> > LDFLAGS_fancy.o := -DPANTS=30 >> > obj-y += fancy.o >> > vpath-y += $(srctree)/arch/foo/lib >> > >> > and let GNU make do the job. >> > >> Nicolas, I guess you were the one who was interested for a generic way >> to do such code re-use, did you had any chance to test the quoted >> patch ? > > I actually missed the original post (I wasn't in CC) so I didn't test it. > Will try to do so ASAP. > Sorry for the miss, I thought linux-arm-kernel@ would catch enough people :) - Arnaud -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, 19 Aug 2011, Arnaud Lacombe wrote: > Hi folks, > > The attached patch modify Kbuild to allow to directly re-use code in multiple > directory without having to go through a copy. Technically, it changes Kbuild to > use by default the VPATH feature of GNU make and provides accessors for Makefile > to change it indirectly. > > Considering: > > arch/foo/lib: > fancy.c > > We want to be able to build it with -DPANTS=32 in the kernel, but the > bootloader requires -DPANTS_SIZE=30. > > Currently we would do, either: > > arch/foo/lib/Makefile > LDFLAGS_fancy.o := -DPANTS=32 > obj-y += fancy.o > > and, either: > > arch/foo/boot/Makefile: > LDFLAGS_fancy.o := -DPANTS=30 > obj-y += fancy.o > $(obj)/fancy.c: $(srctree)/arch/foo/lib/fancy.c > $(call cmd,shipped) > > or > > arch/foo/boot/Makefile: > LDFLAGS_fancy.o := -DPANTS=30 > obj-y += fancy.o > $(obj)/fancy.o: $(srctree)/arch/foo/lib/fancy.c > $(call cmd,cc_c_o) > > The former implies an extra copy of the source file, the latter expose Kbuild > internal function. > > With the attached patch, we would do: > > arch/foo/boot/Makefile: > LDFLAGS_fancy.o := -DPANTS=30 > obj-y += fancy.o > vpath-y += $(srctree)/arch/foo/lib > > and let GNU make do the job. > > Comments welcome, It doesn't work. Whatever I do to arch/arm/boot/compressed/Makefile (which admittedly looks a bit hairy and could benefit from a shave) in order to remove the $(call cmd,shipped) used with lib1funcs.S, I always end up with: make[2]: *** No rule to make target `arch/arm/boot/compressed/lib1funcs.S', needed by `arch/arm/boot/compressed/lib1funcs.o'. Stop. Obviously, restoring the explicit dependency with a $(call cmd,as_o_S) does make it work, but this is rather against the point of your patch. Do you have an example of how arch/arm/boot/compressed/Makefile should be changed to benefit from your patch? Nicolas -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi, On Wed, Sep 7, 2011 at 3:07 PM, Nicolas Pitre <nico@fluxnic.net> wrote: > On Fri, 19 Aug 2011, Arnaud Lacombe wrote: > >> Hi folks, >> >> The attached patch modify Kbuild to allow to directly re-use code in multiple >> directory without having to go through a copy. Technically, it changes Kbuild to >> use by default the VPATH feature of GNU make and provides accessors for Makefile >> to change it indirectly. >> >> Considering: >> >> arch/foo/lib: >> fancy.c >> >> We want to be able to build it with -DPANTS=32 in the kernel, but the >> bootloader requires -DPANTS_SIZE=30. >> >> Currently we would do, either: >> >> arch/foo/lib/Makefile >> LDFLAGS_fancy.o := -DPANTS=32 >> obj-y += fancy.o >> >> and, either: >> >> arch/foo/boot/Makefile: >> LDFLAGS_fancy.o := -DPANTS=30 >> obj-y += fancy.o >> $(obj)/fancy.c: $(srctree)/arch/foo/lib/fancy.c >> $(call cmd,shipped) >> >> or >> >> arch/foo/boot/Makefile: >> LDFLAGS_fancy.o := -DPANTS=30 >> obj-y += fancy.o >> $(obj)/fancy.o: $(srctree)/arch/foo/lib/fancy.c >> $(call cmd,cc_c_o) >> >> The former implies an extra copy of the source file, the latter expose Kbuild >> internal function. >> >> With the attached patch, we would do: >> >> arch/foo/boot/Makefile: >> LDFLAGS_fancy.o := -DPANTS=30 >> obj-y += fancy.o >> vpath-y += $(srctree)/arch/foo/lib >> >> and let GNU make do the job. >> >> Comments welcome, > > It doesn't work. Whatever I do to arch/arm/boot/compressed/Makefile > (which admittedly looks a bit hairy and could benefit from a shave) in > order to remove the $(call cmd,shipped) used with lib1funcs.S, I always > end up with: > > make[2]: *** No rule to make target `arch/arm/boot/compressed/lib1funcs.S', needed by `arch/arm/boot/compressed/lib1funcs.o'. Stop. > What was the exact change you made which triggered this ? Thanks, - Arnaud > Obviously, restoring the explicit dependency with a $(call cmd,as_o_S) > does make it work, but this is rather against the point of your patch. > > Do you have an example of how arch/arm/boot/compressed/Makefile should > be changed to benefit from your patch? > > > Nicolas > -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/Makefile b/Makefile index b4ca4e1..db7f7f5 100644 --- a/Makefile +++ b/Makefile @@ -154,9 +154,10 @@ objtree := $(CURDIR) src := $(srctree) obj := $(objtree) -VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD)) +KBUILD_VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD)) +VPATH := $(KBUILD_VPATH) -export srctree objtree VPATH +export srctree objtree KBUILD_VPATH # SUBARCH tells the usermode build what the underlying arch is. That is set diff --git a/scripts/Makefile.build b/scripts/Makefile.build index a0fd502..ac539d7 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -18,6 +18,8 @@ always := targets := subdir-y := subdir-m := +vpath-y := +vpath-m := EXTRA_AFLAGS := EXTRA_CFLAGS := EXTRA_CPPFLAGS := @@ -37,6 +39,7 @@ include scripts/Kbuild.include # For backward compatibility check that these variables do not change save-cflags := $(CFLAGS) +save-vpath := $(VPATH) # The filename Kbuild has precedence over Makefile kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) @@ -48,6 +51,9 @@ ifeq ($(KBUILD_NOPEDANTIC),) ifneq ("$(save-cflags)","$(CFLAGS)") $(error CFLAGS was changed in "$(kbuild-file)". Fix it to use EXTRA_CFLAGS) endif + ifneq ("$(save-vpath)","$(VPATH)") + $(error VPATH was changed in "$(kbuild-file)". Please uses vpath-y) + endif endif # @@ -198,13 +204,13 @@ $(multi-objs-y:.o=.lst) : modname = $(modname-multi) quiet_cmd_cc_s_c = CC $(quiet_modtag) $@ cmd_cc_s_c = $(CC) $(c_flags) -fverbose-asm -S -o $@ $< -$(obj)/%.s: $(src)/%.c FORCE +$(obj)/%.s: %.c FORCE $(call if_changed_dep,cc_s_c) quiet_cmd_cc_i_c = CPP $(quiet_modtag) $@ cmd_cc_i_c = $(CPP) $(c_flags) -o $@ $< -$(obj)/%.i: $(src)/%.c FORCE +$(obj)/%.i: %.c FORCE $(call if_changed_dep,cc_i_c) cmd_gensymtypes = \ @@ -219,7 +225,7 @@ cmd_cc_symtypes_c = \ $(call cmd_gensymtypes,true,$@) >/dev/null; \ test -s $@ || rm -f $@ -$(obj)/%.symtypes : $(src)/%.c FORCE +$(obj)/%.symtypes : %.c FORCE $(call cmd,cc_symtypes_c) # C (.c) files @@ -301,13 +307,13 @@ define rule_cc_o_c endef # Built-in and composite module parts -$(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE +$(obj)/%.o: %.c $(recordmcount_source) FORCE $(call cmd,force_checksrc) $(call if_changed_rule,cc_o_c) # Single-part modules are special since we need to mark them in $(MODVERDIR) -$(single-used-m): $(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE +$(single-used-m): %.o: %.c $(recordmcount_source) FORCE $(call cmd,force_checksrc) $(call if_changed_rule,cc_o_c) @{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod) @@ -317,7 +323,7 @@ quiet_cmd_cc_lst_c = MKLST $@ $(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \ System.map $(OBJDUMP) > $@ -$(obj)/%.lst: $(src)/%.c FORCE +$(obj)/%.lst: %.c FORCE $(call if_changed_dep,cc_lst_c) # Compile assembler sources (.S) @@ -331,13 +337,13 @@ $(real-objs-m:.o=.s): modkern_aflags := $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE) quiet_cmd_as_s_S = CPP $(quiet_modtag) $@ cmd_as_s_S = $(CPP) $(a_flags) -o $@ $< -$(obj)/%.s: $(src)/%.S FORCE +$(obj)/%.s: %.S FORCE $(call if_changed_dep,as_s_S) quiet_cmd_as_o_S = AS $(quiet_modtag) $@ cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< -$(obj)/%.o: $(src)/%.S FORCE +$(obj)/%.o: %.S FORCE $(call if_changed_dep,as_o_S) targets += $(real-objs-y) $(real-objs-m) $(lib-y) @@ -349,7 +355,7 @@ quiet_cmd_cpp_lds_S = LDS $@ cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -C -U$(ARCH) \ -D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $< -$(obj)/%.lds: $(src)/%.lds.S FORCE +$(obj)/%.lds: %.lds.S FORCE $(call if_changed_dep,cpp_lds_S) # Build the compiled-in targets diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index aeea84a..b57b621 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -46,6 +46,13 @@ obj-m := $(filter-out %/, $(obj-m)) subdir-ym := $(sort $(subdir-y) $(subdir-m)) +# +vpath-ym := $(vpath-y) $(vpath-m) +VPATH := $(KBUILD_VPATH) +VPATH += $(srctree)/$(src) +VPATH += $(obj) +VPATH += $(vpath-ym) + # if $(foo-objs) exists, foo.o is a composite object multi-used-y := $(sort $(foreach m,$(obj-y), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))), $(m)))) multi-used-m := $(sort $(foreach m,$(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))), $(m)))) @@ -167,7 +174,7 @@ ifdef REGENERATE_PARSERS quiet_cmd_gperf = GPERF $@ cmd_gperf = gperf -t --output-file $@ -a -C -E -g -k 1,3,$$ -p -t $< -$(src)/%.hash.c_shipped: $(src)/%.gperf +$(src)/%.hash.c_shipped: %.gperf $(call cmd,gperf) # LEX @@ -177,7 +184,7 @@ LEX_PREFIX = $(if $(LEX_PREFIX_${baseprereq}),$(LEX_PREFIX_${baseprereq}),yy) quiet_cmd_flex = LEX $@ cmd_flex = flex -o$@ -L -P $(LEX_PREFIX) $< -$(src)/%.lex.c_shipped: $(src)/%.l +$(src)/%.lex.c_shipped: %.l $(call cmd,flex) # YACC @@ -187,13 +194,13 @@ YACC_PREFIX = $(if $(YACC_PREFIX_${baseprereq}),$(YACC_PREFIX_${baseprereq}),yy) quiet_cmd_bison = YACC $@ cmd_bison = bison -o$@ -t -l -p $(YACC_PREFIX) $< -$(src)/%.tab.c_shipped: $(src)/%.y +$(src)/%.tab.c_shipped: %.y $(call cmd,bison) quiet_cmd_bison_h = YACC $@ cmd_bison_h = bison -o/dev/null --defines=$@ -t -l -p $(YACC_PREFIX) $< -$(src)/%.tab.h_shipped: $(src)/%.y +$(src)/%.tab.h_shipped: %.y $(call cmd,bison_h) endif @@ -204,7 +211,7 @@ endif quiet_cmd_shipped = SHIPPED $@ cmd_shipped = cat $< > $@ -$(obj)/%: $(src)/%_shipped +$(obj)/%: %_shipped $(call cmd,shipped) # Commands useful for building a boot image