[U-Boot] [PATCH v3 20/21] Adjust dependency rules to permit per-file flags
Simon Glass
sjg at chromium.org
Mon Oct 10 05:45:55 CEST 2011
Hi Mike,
On Sun, Oct 9, 2011 at 7:50 PM, Mike Frysinger <vapier at gentoo.org> wrote:
> On Monday 03 October 2011 21:10:17 Simon Glass wrote:
>> Hi,
>>
>> On Mon, Sep 26, 2011 at 5:10 PM, Simon Glass <sjg at chromium.org> wrote:
>> > The dependency rules are currently done in a shell 'for' loop. This does
>> > not permit Makefile variables to adjust preprocessor flags as is done
>> > with normal compile flags, using the CFLAGS_path/file.o syntax.
>> >
>> > This change moves the dependency generation into the Makefile itself, and
>> > permits a CPPFLAGS_path/file.o to adjust preprocessor flags on a file or
>> > directory basis.
>> >
>> > The CPPFLAGS_... variable is also folded into CFLAGS during the build.
>> >
>> > Signed-off-by: Simon Glass <sjg at chromium.org>
>> > ---
>> > Changes in v3:
>> > - Change U-Boot's dependency generation to permit per-file flags
>> >
>> > .gitignore | 2 +-
>> > config.mk | 7 +++++++
>> > rules.mk | 23 ++++++++++++-----------
>> > 3 files changed, 20 insertions(+), 12 deletions(-)
>> >
>> > diff --git a/.gitignore b/.gitignore
>> > index dbf545f..7ba0dd9 100644
>> > --- a/.gitignore
>> > +++ b/.gitignore
>> > @@ -39,7 +39,7 @@
>> > # Generated files
>> > #
>> >
>> > -*.depend
>> > +*.depend*
>> > /LOG
>> > /errlog
>> > /reloc_off
>> > diff --git a/config.mk b/config.mk
>> > index e2b440d..3fa9eef 100644
>> > --- a/config.mk
>> > +++ b/config.mk
>> > @@ -277,6 +277,13 @@ export CONFIG_SYS_TEXT_BASE PLATFORM_CPPFLAGS
>> > PLATFORM_RELFLAGS CPPFLAGS CFLAGS BCURDIR = $(subst
>> > $(SRCTREE)/,,$(CURDIR:$(obj)%=%))
>> > ALL_AFLAGS = $(AFLAGS) $(AFLAGS_$(BCURDIR)/$(@F)) $(AFLAGS_$(BCURDIR))
>> > ALL_CFLAGS = $(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR))
>> > +EXTRA_CPPFLAGS = $(CPPFLAGS_$(BCURDIR)/$(@F)) $(CPPFLAGS_$(BCURDIR))
>> > +ALL_CFLAGS += $(EXTRA_CPPFLAGS)
>> > +
>> > +# The _DEP version uses the $< file target (for dependency generation)
>> > +# See rules.mk
>> > +EXTRA_CPPFLAGS_DEP = $(CPPFLAGS_$(BCURDIR)/$(addsuffix .o,$(basename
>> > $<))) \ + $(CPPFLAGS_$(BCURDIR))
>> > $(obj)%.s: %.S
>> > $(CPP) $(ALL_AFLAGS) -o $@ $<
>> > $(obj)%.o: %.S
>> > diff --git a/rules.mk b/rules.mk
>> > index d79fcd3..56b9044 100644
>> > --- a/rules.mk
>> > +++ b/rules.mk
>> > @@ -25,17 +25,18 @@
>> >
>> > _depend: $(obj).depend
>> >
>> > -$(obj).depend: $(src)Makefile $(TOPDIR)/config.mk $(SRCS) $(HOSTSRCS)
>> > - @rm -f $@
>> > - @touch $@
>> > - @for f in $(SRCS); do \
>> > - g=`basename $$f | sed -e
>> > 's/\(.*\)\.[[:alnum:]_]/\1.o/'`; \ - $(CC) -M
>> > $(CPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; \ - done
>> > - @for f in $(HOSTSRCS); do \
>> > - g=`basename $$f | sed -e
>> > 's/\(.*\)\.[[:alnum:]_]/\1.o/'`; \ - $(HOSTCC) -M
>> > $(HOSTCPPFLAGS) -MQ $(obj)$$g $$f >> $@ ; \ - done
>> > +DEPS := $(basename $(patsubst %,$(obj).depend.%,$(SRCS)))
>> > +
>> > +$(obj).depend: $(src)Makefile $(TOPDIR)/config.mk $(DEPS) $(HOSTSRCS)
>> > + cat /dev/null $(DEPS) >$@
>> > + @for f in $(HOSTSRCS); do \
>> > + g=`basename $$f | sed -e 's/\(.*\)\.[[:alnum:]_]/\1.o/'`;
>> > \ + $(HOSTCC) -M $(HOSTCPPFLAGS) -MQ $(obj)$$g $$f >> $@ ;
>> > \ + done
>> > +
>> > +$(obj).depend.%: %.c
>> > + $(CC) -M $(CPPFLAGS) $(EXTRA_CPPFLAGS_DEP) \
>> > + -MQ $(addsuffix .o,$(basename $<)) $< >$@
>> >
>> > $(HOSTOBJS): $(obj)%.o: %.c
>> > $(HOSTCC) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F))
>> > $(HOSTCFLAGS_$(BCURDIR)) -o $@ $< -c --
>> > 1.7.3.1
>>
>> Sadly this doesn't work for two reasons:
>>
>> 1. It ignores .S files (which is easy to fix)
>>
>> 2. It doesn't like paths like ../common/fred.c. I can fix that with a
>> patsubst I suspect.
>>
>> Does anyone have better ideas on how to deal with this?
>
> what if we move away from a single .depend file ? most every project i see out
> there utilizes one .depend file per source.
> -mike
>
That is essentially what my patch does for the most part - the
non-host files are generated with a separate rule and then combined
later into a single file. Combining them is just a convenience for the
Makefile - easier to include one file than 50, that's all.
Regards,
Simon
More information about the U-Boot
mailing list