svn commit: trunk/uClibc

aldot at uclibc.org aldot at uclibc.org
Sun Jun 1 12:40:26 UTC 2008


Author: aldot
Date: 2008-06-01 05:40:25 -0700 (Sun, 01 Jun 2008)
New Revision: 22157

Log:
- 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.


Modified:
   trunk/uClibc/Makerules


Changeset:
Modified: trunk/uClibc/Makerules
===================================================================
--- trunk/uClibc/Makerules	2008-06-01 10:10:22 UTC (rev 22156)
+++ trunk/uClibc/Makerules	2008-06-01 12:40:25 UTC (rev 22157)
@@ -60,6 +60,8 @@
 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_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_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_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_ar        = $($(DISP)_disp_ar)
 disp_ld        = $($(DISP)_disp_ld)
 
-cmd_gen.dep = -MT $@ -MD -MF $(dir $@).$(notdir $@).dep
+CFLAGS_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)
+# 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 @@
 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 @@
 -include $(.depends.dep)
 endif
 
-.PHONY: dummy create
+.PHONY: dummy FORCE
+FORCE:
+
 clean: objclean-y headers_clean-y
 realclean: clean
 	$(Q)$(RM) $(.depends.dep)




More information about the uClibc-cvs mailing list