فهرست منبع

More reliable .d file generation

Also generated inside the obj dir instead of separate deps folder.
Fred Sundvik 10 سال پیش
والد
کامیت
e58e9af2ab
1فایلهای تغییر یافته به همراه16 افزوده شده و 8 حذف شده
  1. 16 8
      tmk_core/rules.mk

+ 16 - 8
tmk_core/rules.mk

@@ -278,7 +278,7 @@ LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst
 
 
 # Compiler flags to generate dependency files.
 # Compiler flags to generate dependency files.
 #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
 #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
-GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$(subst $(BUILD_DIR)/,,$@)).d
+GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@)
 
 
 
 
 # Combine all necessary flags and optional flags.
 # Combine all necessary flags and optional flags.
@@ -288,6 +288,8 @@ ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS)
 ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS)
 ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS)
 ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS)
 ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS)
 
 
+MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@)
+
 # Default target.
 # Default target.
 all: build sizeafter
 all: build sizeafter
 
 
@@ -390,17 +392,17 @@ BEGIN = gccversion check_submodule sizebefore
 
 
 define GEN_OBJRULE
 define GEN_OBJRULE
 # Compile: create object files from C source files.
 # Compile: create object files from C source files.
-$1/%.o : %.c | $(BEGIN)
+$1/%.o : %.c $1/%.d | $(BEGIN)
 	@mkdir -p $$(@D)
 	@mkdir -p $$(@D)
 	@$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD)
 	@$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD)
-	$$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$< -o $$@)
+	$$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$< -o $$@ && $$(MOVE_DEP))
 	@$$(BUILD_CMD)
 	@$$(BUILD_CMD)
 
 
 # Compile: create object files from C++ source files.
 # Compile: create object files from C++ source files.
-$1/%.o : %.cpp | $(BEGIN)
+$1/%.o : %.cpp $1/%.d | $(BEGIN)
 	@mkdir -p $$(@D)
 	@mkdir -p $$(@D)
 	@$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD)
 	@$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD)
-	$$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$< -o $$@)
+	$$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
 	@$(BUILD_CMD)
 	@$(BUILD_CMD)
 
 
 # Assemble: create object files from assembler source files.
 # Assemble: create object files from assembler source files.
@@ -409,9 +411,15 @@ $1/%.o : %.S | $(BEGIN)
 	@$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD)
 	@$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD)
 	$$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@)
 	$$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@)
 	@$$(BUILD_CMD)
 	@$$(BUILD_CMD)
-
 endef
 endef
 
 
+# We have to use static rules for the .d files for some reason
+DEPS = $(patsubst %.o,%.d,$(OBJ))
+# Keep the .d files
+.PRECIOUS: $(DEPS)
+# Empty rule to force recompilation if the .d file is missing
+$(DEPS):
+
 # Since the object files could be in two different folders, generate
 # Since the object files could be in two different folders, generate
 # separate rules for them, rather than having too generic rules
 # separate rules for them, rather than having too generic rules
 $(eval $(call GEN_OBJRULE,$(OBJDIR)))
 $(eval $(call GEN_OBJRULE,$(OBJDIR)))
@@ -434,7 +442,7 @@ $(eval $(call GEN_OBJRULE,$(KBOBJDIR)))
 	$(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@
 	$(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@
 
 
 # Target: clean project.
 # Target: clean project.
-clean: 
+clean:
 
 
 show_path:
 show_path:
 	@echo VPATH=$(VPATH)
 	@echo VPATH=$(VPATH)
@@ -515,7 +523,7 @@ $(shell mkdir $(OBJDIR) 2>/dev/null)
 $(shell mkdir $(KBOBJDIR) 2>/dev/null)
 $(shell mkdir $(KBOBJDIR) 2>/dev/null)
 
 
 # Include the dependency files.
 # Include the dependency files.
--include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*)
+-include $(patsubst %.o,%.d,$(OBJ))
 
 
 
 
 # Listing of phony targets.
 # Listing of phony targets.