Rules.mk 1.8 KB

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