diff options
author | Fred Sundvik <fsundvik@gmail.com> | 2016-07-30 22:07:01 +0300 |
---|---|---|
committer | Fred Sundvik <fsundvik@gmail.com> | 2016-07-31 13:42:04 +0300 |
commit | 84bfb195545b0ba527f34c386d15d6f732a28de7 (patch) | |
tree | 25d15ed72e3fb4d5b820dcc5819dc05897751e2b | |
parent | e58e9af2ab2c0e66a8456b48d46f4d71a66af27a (diff) | |
download | qmk_firmware-84bfb195545b0ba527f34c386d15d6f732a28de7.tar.gz qmk_firmware-84bfb195545b0ba527f34c386d15d6f732a28de7.zip |
Force compilation and linking when options changes
-rw-r--r-- | tmk_core/rules.mk | 37 |
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 |
287 | ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) | 287 | ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS) |
288 | ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS) | 288 | ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(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,$@) | 291 | MOVE_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 | ||
393 | define GEN_OBJRULE | 394 | define 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 | |||
414 | endef | 433 | endef |
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 |