rules.mk 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. all: $(OBJ_DIR)/$(PROJECT).elf $(OBJ_DIR)/$(PROJECT).hex $(OBJ_DIR)/$(PROJECT).bin
  12. $(OBJ_DIR)/$(PROJECT).elf: $(OBJECTS)
  13. @echo "\tLD\t" $@
  14. @$(CC) $(LDFLAGS) $(OBJECTS) -o $@
  15. @$(SZ) $@
  16. $(OBJ_DIR)/$(PROJECT).hex: $(OBJ_DIR)/$(PROJECT).elf
  17. @echo "\tHEX\t" $@
  18. @$(HEX) $< $@
  19. $(OBJ_DIR)/$(PROJECT).bin: $(OBJ_DIR)/$(PROJECT).elf
  20. @echo "\tBIN\t" $@
  21. @$(BIN) $< $@
  22. $(OBJ_DIR)/%.o: %.c
  23. @echo "\tCC\t" $@
  24. @$(CC) $(CFLAGS) -c $< -o $@
  25. $(OBJ_DIR)/%.o: %.s
  26. @echo "\tASM\t" $@
  27. @$(AS) $(CFLAGS) -c $< -o $@
  28. $(OBJ_DIR)/%.o: %.cpp
  29. @echo "\tCPP\t" $@
  30. @$(CPP) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
  31. $(OBJ_DIR)/flash: $(OBJ_DIR)/$(PROJECT).bin
  32. st-flash --reset write $(OBJ_DIR)/$(PROJECT).bin $(FLASH_ADDRESS)
  33. touch $@
  34. $(OBJ_DIR)/upload: $(OBJ_DIR)/$(PROJECT).bin
  35. dfu-util -D $(OBJ_DIR)/$(PROJECT).bin -a 0 -s $(FLASH_ADDRESS)
  36. touch $@
  37. flash: $(OBJ_DIR)/flash
  38. upload: $(OBJ_DIR)/upload
  39. debug: flash
  40. set -m; st-util -n --semihosting & echo $$! > st-util.PID
  41. 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
  42. clean:
  43. @echo "\tCLEAN\t"
  44. @$(RM) $(OBJ_DIR)/*
  45. .PHONY: check-and-reinit-submodules
  46. check-and-reinit-submodules:
  47. @if git submodule status | egrep -q '^[-]|^[+]' ; then \
  48. echo "INFO: Need to reinitialize git submodules"; \
  49. git submodule update --init; \
  50. fi
  51. z: clean
  52. $(MAKE) all
  53. zz: clean
  54. $(MAKE) flash
  55. zzz: clean
  56. $(MAKE) debug
  57. -include $(DEPS)