rules.mk 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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 "$(CFLAGS)" > $(OBJ_DIR)/BUILD_FLAGS.tmp; \
  13. diff $(OBJ_DIR)/BUILD_FLAGS $(OBJ_DIR)/BUILD_FLAGS.tmp 2>/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. CHECK_AND_REINIT_SUBMODULES_SHELL=\
  18. if git submodule status | egrep -q '^[-]|^[+]' ; then \
  19. echo "INFO: Need to reinitialize git submodules"; \
  20. git submodule update --init; \
  21. fi
  22. $(info $(shell $(CHECK_AND_REINIT_SUBMODULES_SHELL)))
  23. all: $(OBJ_DIR)/$(PROJECT).elf $(OBJ_DIR)/$(PROJECT).hex $(OBJ_DIR)/$(PROJECT).bin
  24. $(OBJ_DIR)/$(PROJECT).elf: $(OBJECTS)
  25. @echo "\tLD\t" $@
  26. @$(CC) $(LDFLAGS) $(OBJECTS) -o $@
  27. @$(SZ) $@
  28. $(OBJ_DIR)/$(PROJECT).hex: $(OBJ_DIR)/$(PROJECT).elf
  29. @echo "\tHEX\t" $@
  30. @$(HEX) $< $@
  31. $(OBJ_DIR)/$(PROJECT).bin: $(OBJ_DIR)/$(PROJECT).elf
  32. @echo "\tBIN\t" $@
  33. @$(BIN) $< $@
  34. $(OBJ_DIR)/%.o: %.c $(OBJ_DIR)/BUILD_FLAGS $(ASSETS)
  35. @echo "\tCC\t" $@
  36. @$(CC) $(CFLAGS) -c $< -o $@
  37. $(OBJ_DIR)/%.o: %.s $(OBJ_DIR)/BUILD_FLAGS $(ASSETS)
  38. @echo "\tASM\t" $@
  39. @$(AS) $(CFLAGS) -c $< -o $@
  40. $(OBJ_DIR)/%.o: %.cpp $(OBJ_DIR)/BUILD_FLAGS $(ASSETS)
  41. @echo "\tCPP\t" $@
  42. @$(CPP) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
  43. $(OBJ_DIR)/flash: $(OBJ_DIR)/$(PROJECT).bin
  44. st-flash --reset write $(OBJ_DIR)/$(PROJECT).bin $(FLASH_ADDRESS)
  45. touch $@
  46. $(OBJ_DIR)/upload: $(OBJ_DIR)/$(PROJECT).bin
  47. dfu-util -D $(OBJ_DIR)/$(PROJECT).bin -a 0 -s $(FLASH_ADDRESS):leave
  48. touch $@
  49. $(ASSETS): $(ASSETS_SOURCES)
  50. @echo "\tASSETS\t" $@
  51. @$(ASSETS_COMPILLER) icons -s $(ASSETS_SOURCE_DIR) -o $(ASSETS_OUTPUT_DIR)
  52. flash: $(OBJ_DIR)/flash
  53. upload: $(OBJ_DIR)/upload
  54. debug: flash
  55. set -m; st-util -n --semihosting & echo $$! > $(OBJ_DIR)/st-util.PID
  56. arm-none-eabi-gdb \
  57. -ex "target extended-remote 127.0.0.1:4242" \
  58. -ex "set confirm off" \
  59. -ex "source ../debug/FreeRTOS/FreeRTOS.py" \
  60. $(OBJ_DIR)/$(PROJECT).elf; \
  61. kill `cat $(OBJ_DIR)/st-util.PID`; \
  62. rm $(OBJ_DIR)/st-util.PID
  63. clean:
  64. @echo "\tCLEAN\t"
  65. @$(RM) $(OBJ_DIR)/*
  66. @$(RM) $(ASSETS)
  67. z: clean
  68. $(MAKE) all
  69. zz: clean
  70. $(MAKE) flash
  71. zzz: clean
  72. $(MAKE) debug
  73. FORMAT_SOURCES := $(shell find ../applications -iname "*.h" -o -iname "*.c" -o -iname "*.cpp")
  74. FORMAT_SOURCES += $(shell find ../core -iname "*.h" -o -iname "*.c" -o -iname "*.cpp")
  75. format:
  76. @echo "Formatting sources with clang-format"
  77. @clang-format -style=file -i $(FORMAT_SOURCES)
  78. -include $(DEPS)