diff options
| -rw-r--r-- | Makerules | 72 | 
1 files changed, 49 insertions, 23 deletions
@@ -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)  | 
