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

2011-10-09 Thread Mike Frysinger
On Monday 03 October 2011 21:10:17 Simon Glass wrote:
 Hi,
 
 On Mon, Sep 26, 2011 at 5:10 PM, Simon Glass s...@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 s...@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


signature.asc
Description: This is a digitally signed message part.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


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

2011-10-09 Thread Simon Glass
Hi Mike,

On Sun, Oct 9, 2011 at 7:50 PM, Mike Frysinger vap...@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 s...@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 s...@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
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


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

2011-10-03 Thread Simon Glass
Hi,

On Mon, Sep 26, 2011 at 5:10 PM, Simon Glass s...@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 s...@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
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot