From 6f538799296c9145e906ba53ddec2226b90cc304 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Sun, 1 Jun 2008 12:40:25 +0000 Subject: - 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. --- Makerules | 72 +++++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 23 deletions(-) (limited to 'Makerules') 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) -- cgit v1.2.3