aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFred Sundvik <fsundvik@gmail.com>2016-07-30 22:07:01 +0300
committerFred Sundvik <fsundvik@gmail.com>2016-07-31 13:42:04 +0300
commit84bfb195545b0ba527f34c386d15d6f732a28de7 (patch)
tree25d15ed72e3fb4d5b820dcc5819dc05897751e2b
parente58e9af2ab2c0e66a8456b48d46f4d71a66af27a (diff)
downloadqmk_firmware-84bfb195545b0ba527f34c386d15d6f732a28de7.tar.gz
qmk_firmware-84bfb195545b0ba527f34c386d15d6f732a28de7.zip
Force compilation and linking when options changes
-rw-r--r--tmk_core/rules.mk37
1 files changed, 28 insertions, 9 deletions
diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk
index 8acb43932..ebcd372ca 100644
--- a/tmk_core/rules.mk
+++ b/tmk_core/rules.mk
@@ -284,8 +284,8 @@ GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@)
284# Combine all necessary flags and optional flags. 284# Combine all necessary flags and optional flags.
285# Add target processor to flags. 285# Add target processor to flags.
286# You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar 286# You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar
287ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) 287ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS)
288ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) 288ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(EXTRAFLAGS)
289ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS) 289ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS)
290 290
291MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@) 291MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@)
@@ -385,32 +385,51 @@ BEGIN = gccversion check_submodule sizebefore
385# Link: create ELF output file from object files. 385# Link: create ELF output file from object files.
386.SECONDARY : $(BUILD_DIR)/$(TARGET).elf 386.SECONDARY : $(BUILD_DIR)/$(TARGET).elf
387.PRECIOUS : $(OBJ) 387.PRECIOUS : $(OBJ)
388%.elf: $(OBJ) | $(BEGIN) 388# Note the obj.txt depeendency is there to force linking if a source file is deleted
389%.elf: $(OBJ) $(OBJDIR)/cflags.txt $(OBJDIR)/ldflags.txt $(OBJDIR)/obj.txt | $(BEGIN)
389 @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD) 390 @$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD)
390 $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)) 391 $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS))
391 @$(BUILD_CMD) 392 @$(BUILD_CMD)
392 393
393define GEN_OBJRULE 394define GEN_OBJRULE
394# Compile: create object files from C source files. 395# Compile: create object files from C source files.
395$1/%.o : %.c $1/%.d | $(BEGIN) 396$1/%.o : %.c $1/%.d $1/cflags.txt | $(BEGIN)
396 @mkdir -p $$(@D) 397 @mkdir -p $$(@D)
397 @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD) 398 @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD)
398 $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$< -o $$@ && $$(MOVE_DEP)) 399 $$(eval CMD=$$(CC) -c $$(ALL_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
399 @$$(BUILD_CMD) 400 @$$(BUILD_CMD)
400 401
401# Compile: create object files from C++ source files. 402# Compile: create object files from C++ source files.
402$1/%.o : %.cpp $1/%.d | $(BEGIN) 403$1/%.o : %.cpp $1/%.d $1/cppflags.txt | $(BEGIN)
403 @mkdir -p $$(@D) 404 @mkdir -p $$(@D)
404 @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD) 405 @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD)
405 $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$< -o $$@ && $$(MOVE_DEP)) 406 $$(eval CMD=$$(CC) -c $$(ALL_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
406 @$(BUILD_CMD) 407 @$(BUILD_CMD)
407 408
408# Assemble: create object files from assembler source files. 409# Assemble: create object files from assembler source files.
409$1/%.o : %.S | $(BEGIN) 410$1/%.o : %.S $1/asflags.txt | $(BEGIN)
410 @mkdir -p $$(@D) 411 @mkdir -p $$(@D)
411 @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD) 412 @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD)
412 $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@) 413 $$(eval CMD=$$(CC) -c $$(ALL_ASFLAGS) $$< -o $$@)
413 @$$(BUILD_CMD) 414 @$$(BUILD_CMD)
415
416$1/force:
417
418$1/cflags.txt: $1/force
419 echo '$$(ALL_CFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CFLAGS)' > $$@
420
421$1/cppflags.txt: $1/force
422 echo '$$(ALL_CPPFLAGS)' | cmp -s - $$@ || echo '$$(ALL_CPPFLAGS)' > $$@
423
424$1/asflags.txt: $1/force
425 echo '$$(ALL_ASFLAGS)' | cmp -s - $$@ || echo '$$(ALL_ASFLAGS)' > $$@
426
427$1/ldflags.txt: $1/force
428 echo '$$(LDFLAGS)' | cmp -s - $$@ || echo '$$(LDFLAGS)' > $$@
429
430$1/obj.txt: $1/force
431 echo '$$(OBJ)' | cmp -s - $$@ || echo '$$(OBJ)' > $$@
432
414endef 433endef
415 434
416# We have to use static rules for the .d files for some reason 435# We have to use static rules for the .d files for some reason