diff options
author | Simon Glass <sjg@chromium.org> | 2011-10-07 13:53:49 +0000 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2011-10-17 23:56:59 +0200 |
commit | 47508843061b8dd9455ec86df00d56b462f2a5c9 (patch) | |
tree | 58ce11c4c387062919137a2f8c7f2ba18ce3f14a /rules.mk | |
parent | 925493582cc6e0760df813a9897464c77d5c7b25 (diff) |
Adjust dependency rules to permit per-file flags
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@chromium.org>
Diffstat (limited to 'rules.mk')
-rw-r--r-- | rules.mk | 44 |
1 files changed, 33 insertions, 11 deletions
@@ -25,17 +25,39 @@ _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 +# Split the source files into two camps: those in the current directory, and +# those somewhere else. For the first camp we want to support CPPFLAGS_<fname> +# and for the second we don't / can't. +PWD_SRCS := $(filter $(notdir $(SRCS)),$(SRCS)) +OTHER_SRCS := $(filter-out $(notdir $(SRCS)),$(SRCS)) + +# This is a list of dependency files to generate +DEPS := $(basename $(patsubst %,$(obj).depend.%,$(PWD_SRCS))) + +# Join all the dependencies into a single file, in three parts +# 1 .Concatenate all the generated depend files together +# 2. Add in the deps from OTHER_SRCS which we couldn't process +# 3. Add in the HOSTSRCS +$(obj).depend: $(src)Makefile $(TOPDIR)/config.mk $(DEPS) $(HOSTSRCS) + cat /dev/null $(DEPS) >$@ + @for f in $(OTHER_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 + +MAKE_DEPEND = $(CC) -M $(CPPFLAGS) $(EXTRA_CPPFLAGS_DEP) \ + -MQ $(addsuffix .o,$(obj)$(basename $<)) $< >$@ + + +$(obj).depend.%: %.c + $(MAKE_DEPEND) + +$(obj).depend.%: %.S + $(MAKE_DEPEND) $(HOSTOBJS): $(obj)%.o: %.c $(HOSTCC) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) $(HOSTCFLAGS_$(BCURDIR)) -o $@ $< -c |