Explorar o código

Makefile: build flags as a target. (#163)

* Makefile: build flags as a target.

* Makefile: proper BUILD_FLAGS generation routine

Co-authored-by: Aleksandr Kutuzov <aku@plooks.com>
あく %!s(int64=5) %!d(string=hai) anos
pai
achega
2ab6f82ddf
Modificáronse 2 ficheiros con 16 adicións e 7 borrados
  1. 0 3
      firmware/Makefile
  2. 16 4
      make/rules.mk

+ 0 - 3
firmware/Makefile

@@ -12,6 +12,3 @@ include			$(TARGET_DIR)/target.mk
 
 include			$(PROJECT_ROOT)/make/toolchain.mk
 include			$(PROJECT_ROOT)/make/rules.mk
-
-$(OBJ_DIR)/app.o:   .FORCE
-.PHONY: .FORCE

+ 16 - 4
make/rules.mk

@@ -13,6 +13,13 @@ DEPS = $(OBJECTS:.o=.d)
 
 $(shell mkdir -p $(OBJ_DIR))
 
+BUILD_FLAGS_SHELL=\
+	echo -n "$(CFLAGS)" > $(OBJ_DIR)/BUILD_FLAGS.tmp; \
+	diff $(OBJ_DIR)/BUILD_FLAGS $(OBJ_DIR)/BUILD_FLAGS.tmp > /dev/null \
+		&& ( echo "CFLAGS ok"; rm $(OBJ_DIR)/BUILD_FLAGS.tmp) \
+		|| ( echo "CFLAGS has been changed"; mv $(OBJ_DIR)/BUILD_FLAGS.tmp $(OBJ_DIR)/BUILD_FLAGS )
+$(info $(shell $(BUILD_FLAGS_SHELL)))
+
 all: $(OBJ_DIR)/$(PROJECT).elf $(OBJ_DIR)/$(PROJECT).hex $(OBJ_DIR)/$(PROJECT).bin
 
 $(OBJ_DIR)/$(PROJECT).elf: $(OBJECTS)
@@ -28,15 +35,15 @@ $(OBJ_DIR)/$(PROJECT).bin: $(OBJ_DIR)/$(PROJECT).elf
 	@echo "\tBIN\t" $@
 	@$(BIN) $< $@
 
-$(OBJ_DIR)/%.o: %.c
+$(OBJ_DIR)/%.o: %.c $(OBJ_DIR)/BUILD_FLAGS
 	@echo "\tCC\t" $@
 	@$(CC) $(CFLAGS) -c $< -o $@
 
-$(OBJ_DIR)/%.o: %.s
+$(OBJ_DIR)/%.o: %.s $(OBJ_DIR)/BUILD_FLAGS
 	@echo "\tASM\t" $@
 	@$(AS) $(CFLAGS) -c $< -o $@
 
-$(OBJ_DIR)/%.o: %.cpp
+$(OBJ_DIR)/%.o: %.cpp $(OBJ_DIR)/BUILD_FLAGS
 	@echo "\tCPP\t" $@
 	@$(CPP) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
 
@@ -54,7 +61,12 @@ upload: $(OBJ_DIR)/upload
 
 debug: flash
 	set -m; st-util -n --semihosting & echo $$! > st-util.PID
-	arm-none-eabi-gdb -ex "target extended-remote 127.0.0.1:4242" $(OBJ_DIR)/$(PROJECT).elf; kill `cat st-util.PID`; rm st-util.PID
+	arm-none-eabi-gdb \
+		-ex "target extended-remote 127.0.0.1:4242" \
+		-ex "set confirm off" \
+		$(OBJ_DIR)/$(PROJECT).elf; \
+	kill `cat st-util.PID`; \
+	rm st-util.PID
 
 clean:
 	@echo "\tCLEAN\t"