Rules.mk 2.2 KB

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