summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2008-06-01 12:40:25 +0000
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2008-06-01 12:40:25 +0000
commit6f538799296c9145e906ba53ddec2226b90cc304 (patch)
tree8c1c3245b8b9faa60620531d616d8d360f3db10c
parent778c71e5a9914faca6d6b3f95da288b086d932d2 (diff)
- store the used compiler plus flags in the .%.dep files too and
use this info to decide whether or not to rebuild something (if e.g. the filestamp of the prereq did not change but the cc or CFLAGS did). For files that we did not yet build we have no flags on record, so those did change inherently and we rebuild. Shouldn't be much slower than before.
-rw-r--r--Makerules72
1 files changed, 49 insertions, 23 deletions
diff --git a/Makerules b/Makerules
index b045144f3..16a5fdaf5 100644
--- a/Makerules
+++ b/Makerules
@@ -60,6 +60,8 @@ endif
show_objs = $(subst ../,,$@)
pur_disp_compile.c = echo " "CC $(show_objs)
+pur_disp_compile.i = echo " "CPP $(show_objs)
+pur_disp_compile.s = echo " "CC-S $(show_objs)
pur_disp_compile.u = echo " "CC $(show_objs)
pur_disp_compile.S = echo " "AS $(show_objs)
pur_disp_compile.m = $(pur_disp_compile.c)
@@ -70,6 +72,8 @@ pur_disp_ar = echo " "AR $(ARFLAGS) $@
pur_disp_ld = echo " "LD $(1)
sil_disp_compile.c = true
+sil_disp_compile.i = true
+sil_disp_compile.s = true
sil_disp_compile.u = true
sil_disp_compile.S = true
sil_disp_compile.m = true
@@ -80,6 +84,8 @@ sil_disp_ar = true
sil_disp_ld = true
ver_disp_compile.c = echo $(cmd_compile.c)
+ver_disp_compile.i = echo $(cmd_compile.i)
+ver_disp_compile.s = echo $(cmd_compile.s)
ver_disp_compile.u = echo $(cmd_compile.u)
ver_disp_compile.S = echo $(cmd_compile.S)
ver_disp_compile.m = echo $(cmd_compile.m)
@@ -90,6 +96,8 @@ ver_disp_ar = echo $(cmd_ar)
ver_disp_ld =
disp_compile.c = $($(DISP)_disp_compile.c)
+disp_compile.i = $($(DISP)_disp_compile.i)
+disp_compile.s = $($(DISP)_disp_compile.s)
disp_compile.u = $($(DISP)_disp_compile.u)
disp_compile.S = $($(DISP)_disp_compile.S)
disp_compile.m = $($(DISP)_disp_compile.m)
@@ -99,22 +107,38 @@ disp_t_strip = $($(DISP)_disp_t_strip)
disp_ar = $($(DISP)_disp_ar)
disp_ld = $($(DISP)_disp_ld)
-cmd_gen.dep = -MT $@ -MD -MF $(dir $@).$(notdir $@).dep
-
-cmd_compile.c = $(CC) -c $< -o $@ $(CFLAGS) $(ARCH_CFLAGS) $(CFLAGS-$(suffix $@)) $(filter-out $(CFLAGS-OMIT-$(notdir $<)),$(CFLAGS-$(notdir $(^D)))) $(CFLAGS-$(subst $(top_srcdir),,$(dir $<))) $(CFLAGS-$(notdir $<)) $(CFLAGS-$(notdir $@)) $(cmd_gen.dep)
-cmd_compile.u = $(CC) $^ $(DEPS-$(notdir $@)) -o $@ $(CFLAGS) $(CFLAGS-$(notdir $(^D))) $(CFLAGS-$(notdir $@)) $(cmd_gen.dep)
+CFLAGS_gen.dep = -MT $@ -MD -MF $(dir $@).$(notdir $@).dep
+
+# True if not identical. Neither order nor whitespace nor identical flags
+# matter.
+compare_flags = $(strip $(filter-out $(cmd_$(1)), $(cmd_$(@))) \
+ $(filter-out $(cmd_$(@)), $(cmd_$(1))))
+
+# Rebuild if the used CC or flags changed.
+# Previously used flags are stored in the corresponding .%.dep files
+maybe_exec = $(if $(strip $(compare_flags)), \
+ @set -e; \
+ $(disp_$(1)); \
+ $(cmd_$(1)); \
+ echo 'cmd_$@ := $(cmd_$1)' >> $(dir $@).$(notdir $@).dep)
+
+cmd_compile.c = $(CC) -c $< -o $@ $(CFLAGS) $(ARCH_CFLAGS) $(CFLAGS-$(suffix $@)) $(filter-out $(CFLAGS-OMIT-$(notdir $<)),$(CFLAGS-$(notdir $(^D)))) $(CFLAGS-$(subst $(top_srcdir),,$(dir $<))) $(CFLAGS-$(notdir $<)) $(CFLAGS-$(notdir $@)) $(CFLAGS_gen.dep)
+cmd_compile.i = $(cmd_compile.c:-c=-E -dD)
+cmd_compile.s = $(cmd_compile.c:-c=-S)
+cmd_compile.u = $(CC) $^ $(DEPS-$(notdir $@)) -o $@ $(CFLAGS) $(CFLAGS-$(notdir $(^D))) $(CFLAGS-$(notdir $@)) $(CFLAGS_gen.dep)
cmd_compile.S = $(filter-out -std=gnu99, $(cmd_compile.c)) -D__ASSEMBLER__ $(ASFLAGS) $(ARCH_ASFLAGS) $(ASFLAGS-$(suffix $@)) $(ASFLAGS-$(notdir $<)) $(ASFLAGS-$(notdir $@))
cmd_compile.m = $(cmd_compile.c) -DL_$(patsubst %$(suffix $(notdir $@)),%,$(notdir $@))
+
cmd_compile-m = $(CC) $^ -c -o $@ $(CFLAGS) $(ARCH_CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(notdir $(@D))) $(CFLAGS-$(notdir $@))
cmd_strip = $(STRIPTOOL) $(STRIP_FLAGS) $^
cmd_t_strip = $(STRIPTOOL) $(STRIP_FLAGS) $@
cmd_ar = $(AR) $(ARFLAGS) $@ $^
-compile.c = @$(disp_compile.c) ; $(cmd_compile.c)
-compile.i = $(cmd_compile.c:-c=-E -dD)
-compile.s = $(cmd_compile.c:-c=-S)
-compile.S = @$(disp_compile.S) ; $(cmd_compile.S)
-compile.m = @$(disp_compile.m) ; $(cmd_compile.m)
+compile.c = @$(call maybe_exec,compile.c)
+compile.i = $(call maybe_exec,compile.i)
+compile.s = $(call maybe_exec,compile.s)
+compile.S = @$(call maybe_exec,compile.S)
+compile.m = @$(call maybe_exec,compile.m)
compile-m = @$(disp_compile-m) ; $(cmd_compile-m)
do_strip = @$(disp_strip) ; $(cmd_strip)
do_t_strip= @$(disp_t_strip) ; $(cmd_t_strip)
@@ -180,19 +204,19 @@ endef
CFLAGS-.os+=$(PICFLAG)
CFLAGS-.oS+=$(PICFLAG) -DSHARED
-%.o: %.c ; $(compile.c)
-%.os: %.c ; $(compile.c)
-%.oS: %.c ; $(compile.c)
-%.o: %.S ; $(compile.S)
-%.os: %.S ; $(compile.S)
-%.oS: %.S ; $(compile.S)
-%.o: %.s ; $(compile.S)
-%.os: %.s ; $(compile.S)
-%.oS: %.s ; $(compile.S)
-%.i: %.c ; $(compile.i)
-%.i: %.S ; $(compile.i)
-%.s: %.c ; $(compile.s)
-%.s: %.S ; $(compile.s)
+%.o: %.c FORCE ; $(compile.c)
+%.os: %.c FORCE ; $(compile.c)
+%.oS: %.c FORCE ; $(compile.c)
+%.o: %.S FORCE ; $(compile.S)
+%.os: %.S FORCE ; $(compile.S)
+%.oS: %.S FORCE ; $(compile.S)
+%.o: %.s FORCE ; $(compile.S)
+%.os: %.s FORCE ; $(compile.S)
+%.oS: %.s FORCE ; $(compile.S)
+%.i: %.c FORCE ; $(compile.i)
+%.i: %.S FORCE ; $(compile.i)
+%.s: %.c FORCE ; $(compile.s)
+%.s: %.S FORCE ; $(compile.s)
$(top_builddir)lib/interp.c: | $(sub_headers)
$(Q)$(INSTALL) -d $(dir $@)
@@ -306,7 +330,9 @@ ifdef .depends.dep
-include $(.depends.dep)
endif
-.PHONY: dummy create
+.PHONY: dummy FORCE
+FORCE:
+
clean: objclean-y headers_clean-y
realclean: clean
$(Q)$(RM) $(.depends.dep)