diff options
| author | Fred Sundvik <fsundvik@gmail.com> | 2016-07-30 18:16:34 +0300 |
|---|---|---|
| committer | Fred Sundvik <fsundvik@gmail.com> | 2016-07-31 13:36:30 +0300 |
| commit | e58e9af2ab2c0e66a8456b48d46f4d71a66af27a (patch) | |
| tree | 5d6dd4a50b1ee5b344a9380a095edb2c2628b201 /tmk_core/rules.mk | |
| parent | abdf42573ac6e01432fdf69847f4259540c1a38d (diff) | |
| download | qmk_firmware-e58e9af2ab2c0e66a8456b48d46f4d71a66af27a.tar.gz qmk_firmware-e58e9af2ab2c0e66a8456b48d46f4d71a66af27a.zip | |
More reliable .d file generation
Also generated inside the obj dir instead of separate deps folder.
Diffstat (limited to 'tmk_core/rules.mk')
| -rw-r--r-- | tmk_core/rules.mk | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk index f6819d7c3..8acb43932 100644 --- a/tmk_core/rules.mk +++ b/tmk_core/rules.mk | |||
| @@ -278,7 +278,7 @@ LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst | |||
| 278 | 278 | ||
| 279 | # Compiler flags to generate dependency files. | 279 | # Compiler flags to generate dependency files. |
| 280 | #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d | 280 | #GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d |
| 281 | GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$(subst $(BUILD_DIR)/,,$@)).d | 281 | GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@) |
| 282 | 282 | ||
| 283 | 283 | ||
| 284 | # Combine all necessary flags and optional flags. | 284 | # Combine all necessary flags and optional flags. |
| @@ -288,6 +288,8 @@ ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) | |||
| 288 | ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) | 288 | ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) |
| 289 | ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) | 289 | ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) |
| 290 | 290 | ||
| 291 | MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) | ||
| 292 | |||
| 291 | # Default target. | 293 | # Default target. |
| 292 | all: build sizeafter | 294 | all: build sizeafter |
| 293 | 295 | ||
| @@ -390,17 +392,17 @@ BEGIN = gccversion check_submodule sizebefore | |||
| 390 | 392 | ||
| 391 | define GEN_OBJRULE | 393 | define GEN_OBJRULE |
| 392 | # Compile: create object files from C source files. | 394 | # Compile: create object files from C source files. |
| 393 | $1/%.o : %.c | $(BEGIN) | 395 | $1/%.o : %.c $1/%.d | $(BEGIN) |
| 394 | @mkdir -p $$(@D) | 396 | @mkdir -p $$(@D) |
| 395 | @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) | 397 | @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) |
| 396 | $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$< -o $$@) | 398 | $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$< -o $$@ && $$(MOVE_DEP)) |
| 397 | @$$(BUILD_CMD) | 399 | @$$(BUILD_CMD) |
| 398 | 400 | ||
| 399 | # Compile: create object files from C++ source files. | 401 | # Compile: create object files from C++ source files. |
| 400 | $1/%.o : %.cpp | $(BEGIN) | 402 | $1/%.o : %.cpp $1/%.d | $(BEGIN) |
| 401 | @mkdir -p $$(@D) | 403 | @mkdir -p $$(@D) |
| 402 | @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) | 404 | @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) |
| 403 | $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$< -o $$@) | 405 | $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) |
| 404 | @$(BUILD_CMD) | 406 | @$(BUILD_CMD) |
| 405 | 407 | ||
| 406 | # Assemble: create object files from assembler source files. | 408 | # Assemble: create object files from assembler source files. |
| @@ -409,9 +411,15 @@ $1/%.o : %.S | $(BEGIN) | |||
| 409 | @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) | 411 | @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) |
| 410 | $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) | 412 | $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) |
| 411 | @$$(BUILD_CMD) | 413 | @$$(BUILD_CMD) |
| 412 | |||
| 413 | endef | 414 | endef |
| 414 | 415 | ||
| 416 | # We have to use static rules for the .d files for some reason | ||
| 417 | DEPS = $(patsubst %.o,%.d,$(OBJ)) | ||
| 418 | # Keep the .d files | ||
| 419 | .PRECIOUS: $(DEPS) | ||
| 420 | # Empty rule to force recompilation if the .d file is missing | ||
| 421 | $(DEPS): | ||
| 422 | |||
| 415 | # Since the object files could be in two different folders, generate | 423 | # Since the object files could be in two different folders, generate |
| 416 | # separate rules for them, rather than having too generic rules | 424 | # separate rules for them, rather than having too generic rules |
| 417 | $(eval $(call GEN_OBJRULE,$(OBJDIR))) | 425 | $(eval $(call GEN_OBJRULE,$(OBJDIR))) |
| @@ -434,7 +442,7 @@ $(eval $(call GEN_OBJRULE,$(KBOBJDIR))) | |||
| 434 | $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ | 442 | $(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@ |
| 435 | 443 | ||
| 436 | # Target: clean project. | 444 | # Target: clean project. |
| 437 | clean: | 445 | clean: |
| 438 | 446 | ||
| 439 | show_path: | 447 | show_path: |
| 440 | @echo VPATH=$(VPATH) | 448 | @echo VPATH=$(VPATH) |
| @@ -515,7 +523,7 @@ $(shell mkdir $(OBJDIR) 2>/dev/null) | |||
| 515 | $(shell mkdir $(KBOBJDIR) 2>/dev/null) | 523 | $(shell mkdir $(KBOBJDIR) 2>/dev/null) |
| 516 | 524 | ||
| 517 | # Include the dependency files. | 525 | # Include the dependency files. |
| 518 | -include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*) | 526 | -include $(patsubst %.o,%.d,$(OBJ)) |
| 519 | 527 | ||
| 520 | 528 | ||
| 521 | # Listing of phony targets. | 529 | # Listing of phony targets. |
