rules.mk 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. OBJ_DIR := $(OBJ_DIR)/$(TARGET)
  2. # Include source folder paths to virtual paths
  3. VPATH = $(sort $(dir $(C_SOURCES)) $(dir $(ASM_SOURCES)) $(dir $(CPP_SOURCES)))
  4. # Gather object
  5. OBJECTS = $(addprefix $(OBJ_DIR)/, $(notdir $(C_SOURCES:.c=.o)))
  6. OBJECTS += $(addprefix $(OBJ_DIR)/, $(notdir $(ASM_SOURCES:.s=.o)))
  7. OBJECTS += $(addprefix $(OBJ_DIR)/, $(notdir $(CPP_SOURCES:.cpp=.o)))
  8. # Generate dependencies
  9. DEPS = $(OBJECTS:.o=.d)
  10. $(shell mkdir -p $(OBJ_DIR))
  11. BUILD_FLAGS_SHELL=\
  12. echo -n "$(CFLAGS)" > $(OBJ_DIR)/BUILD_FLAGS.tmp; \
  13. diff $(OBJ_DIR)/BUILD_FLAGS $(OBJ_DIR)/BUILD_FLAGS.tmp > /dev/null \
  14. && ( echo "CFLAGS ok"; rm $(OBJ_DIR)/BUILD_FLAGS.tmp) \
  15. || ( echo "CFLAGS has been changed"; mv $(OBJ_DIR)/BUILD_FLAGS.tmp $(OBJ_DIR)/BUILD_FLAGS )
  16. $(info $(shell $(BUILD_FLAGS_SHELL)))
  17. all: $(OBJ_DIR)/$(PROJECT).elf $(OBJ_DIR)/$(PROJECT).hex $(OBJ_DIR)/$(PROJECT).bin
  18. $(OBJ_DIR)/$(PROJECT).elf: $(OBJECTS)
  19. @echo "\tLD\t" $@
  20. @$(CC) $(LDFLAGS) $(OBJECTS) -o $@
  21. @$(SZ) $@
  22. $(OBJ_DIR)/$(PROJECT).hex: $(OBJ_DIR)/$(PROJECT).elf
  23. @echo "\tHEX\t" $@
  24. @$(HEX) $< $@
  25. $(OBJ_DIR)/$(PROJECT).bin: $(OBJ_DIR)/$(PROJECT).elf
  26. @echo "\tBIN\t" $@
  27. @$(BIN) $< $@
  28. $(OBJ_DIR)/%.o: %.c $(OBJ_DIR)/BUILD_FLAGS
  29. @echo "\tCC\t" $@
  30. @$(CC) $(CFLAGS) -c $< -o $@
  31. $(OBJ_DIR)/%.o: %.s $(OBJ_DIR)/BUILD_FLAGS
  32. @echo "\tASM\t" $@
  33. @$(AS) $(CFLAGS) -c $< -o $@
  34. $(OBJ_DIR)/%.o: %.cpp $(OBJ_DIR)/BUILD_FLAGS
  35. @echo "\tCPP\t" $@
  36. @$(CPP) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
  37. $(OBJ_DIR)/flash: $(OBJ_DIR)/$(PROJECT).bin
  38. st-flash --reset write $(OBJ_DIR)/$(PROJECT).bin $(FLASH_ADDRESS)
  39. touch $@
  40. $(OBJ_DIR)/upload: $(OBJ_DIR)/$(PROJECT).bin
  41. dfu-util -D $(OBJ_DIR)/$(PROJECT).bin -a 0 -s $(FLASH_ADDRESS)
  42. touch $@
  43. flash: $(OBJ_DIR)/flash
  44. upload: $(OBJ_DIR)/upload
  45. debug: flash
  46. set -m; st-util -n --semihosting & echo $$! > st-util.PID
  47. arm-none-eabi-gdb \
  48. -ex "target extended-remote 127.0.0.1:4242" \
  49. -ex "set confirm off" \
  50. $(OBJ_DIR)/$(PROJECT).elf; \
  51. kill `cat st-util.PID`; \
  52. rm st-util.PID
  53. clean:
  54. @echo "\tCLEAN\t"
  55. @$(RM) $(OBJ_DIR)/*
  56. .PHONY: check-and-reinit-submodules
  57. check-and-reinit-submodules:
  58. @if git submodule status | egrep -q '^[-]|^[+]' ; then \
  59. echo "INFO: Need to reinitialize git submodules"; \
  60. git submodule update --init; \
  61. fi
  62. z: clean
  63. $(MAKE) all
  64. zz: clean
  65. $(MAKE) flash
  66. zzz: clean
  67. $(MAKE) debug
  68. -include $(DEPS)