Rules.mk 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. TOOL_PREFIX = arm-none-eabi-
  2. CC = $(TOOL_PREFIX)gcc
  3. OBJCOPY = $(TOOL_PREFIX)objcopy
  4. LD = $(TOOL_PREFIX)ld
  5. ifeq ($(OS), Windows_NT)
  6. PYTHON = python
  7. ZIP = C:/Program Files/7-Zip/7z.exe a
  8. else
  9. PYTHON = python3
  10. ZIP = zip -r
  11. endif
  12. ifneq ($(VERBOSE),1)
  13. TOOL_PREFIX := @$(TOOL_PREFIX)
  14. endif
  15. FLAGS = -g -Os -nostdlib -std=gnu99 -iquote $(ROOT)/inc
  16. FLAGS += -Wall -Werror -Wno-format -Wdeclaration-after-statement
  17. FLAGS += -Wstrict-prototypes -Wredundant-decls -Wnested-externs
  18. FLAGS += -fno-common -fno-exceptions -fno-strict-aliasing
  19. FLAGS += -mlittle-endian -mthumb -mfloat-abi=soft
  20. FLAGS += -Wno-unused-value
  21. ifeq ($(stm32),f1)
  22. FLAGS += -mcpu=cortex-m3 -DSTM32F=1
  23. stm32f1=y
  24. else ifeq ($(stm32),f7)
  25. FLAGS += -mcpu=cortex-m7 -DSTM32F=7
  26. stm32f7=y
  27. endif
  28. ifneq ($(debug),y)
  29. FLAGS += -DNDEBUG
  30. endif
  31. ifeq ($(bootloader),y)
  32. FLAGS += -DBOOTLOADER=1
  33. endif
  34. FLAGS += -MMD -MF .$(@F).d
  35. DEPS = .*.d
  36. FLAGS += $(FLAGS-y)
  37. CFLAGS += $(CFLAGS-y) $(FLAGS) -include decls.h
  38. AFLAGS += $(AFLAGS-y) $(FLAGS) -D__ASSEMBLY__
  39. LDFLAGS += $(LDFLAGS-y) $(FLAGS) -Wl,--gc-sections
  40. RULES_MK := y
  41. include Makefile
  42. SUBDIRS += $(SUBDIRS-y)
  43. OBJS += $(OBJS-y) $(patsubst %,%/build.o,$(SUBDIRS))
  44. # Force execution of pattern rules (for which PHONY cannot be directly used).
  45. .PHONY: FORCE
  46. FORCE:
  47. .PHONY: clean
  48. .SECONDARY:
  49. build.o: $(OBJS)
  50. $(LD) -r -o $@ $^
  51. %/build.o: FORCE
  52. $(MAKE) -f $(ROOT)/Rules.mk -C $* build.o
  53. %.o: %.c Makefile
  54. @echo CC $@
  55. $(CC) $(CFLAGS) -c $< -o $@
  56. %.o: %.S Makefile
  57. @echo AS $@
  58. $(CC) $(AFLAGS) -c $< -o $@
  59. %.ld: %.ld.S Makefile
  60. @echo CPP $@
  61. $(CC) -P -E $(AFLAGS) $< -o $@
  62. %.elf: $(OBJS) %.ld Makefile
  63. @echo LD $@
  64. $(CC) $(LDFLAGS) -T$(*F).ld $(OBJS) -o $@
  65. chmod a-x $@
  66. %.hex: %.elf
  67. @echo OBJCOPY $@
  68. $(OBJCOPY) -O ihex $< $@
  69. chmod a-x $@
  70. %.bin: %.elf
  71. @echo OBJCOPY $@
  72. $(OBJCOPY) -O binary $< $@
  73. chmod a-x $@
  74. %.o: $(RPATH)/%.c Makefile
  75. @echo CC $@
  76. $(CC) $(CFLAGS) -c $< -o $@
  77. %.o: $(RPATH)/%.S Makefile
  78. @echo AS $@
  79. $(CC) $(AFLAGS) -c $< -o $@
  80. clean:: $(addprefix _clean_,$(SUBDIRS) $(SUBDIRS-n) $(SUBDIRS-))
  81. rm -f *.orig *.rej *~ *.o *.elf *.hex *.bin *.ld $(DEPS)
  82. _clean_%: FORCE
  83. $(MAKE) -f $(ROOT)/Rules.mk -C $* clean
  84. -include $(DEPS)