[U-Boot] [PATCH v3 20/21] Adjust dependency rules to permit per-file flags

Simon Glass sjg at chromium.org
Tue Oct 4 03:10:17 CEST 2011


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?

Regards,
Simon


More information about the U-Boot mailing list