Makefile.inc.stm32 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. OUTPUTDIR = $(BUILDDIR)/../../../output
  2. DEPDIR = $(BUILDDIR)/.dep
  3. PWD = $(shell pwd)
  4. COMMONFLAGS = -mcpu=cortex-m4 -mthumb -ggdb3
  5. CFLAGS += $(COMMONFLAGS) -Os $(INCLUDES) -I.
  6. CFLAGS += -std=gnu99 -Wall -Wextra -static -fdata-sections -ffunction-sections -fno-hosted -fno-builtin
  7. CFLAGS += -nostdlib -nodefaultlibs -fstack-usage
  8. CFLAGS += -mapcs-frame -msoft-float
  9. CFLAGS += -Werror-implicit-function-declaration -Werror=char-subscripts #-Werror=incompatible-pointer-types
  10. CFLAGS += -MD -MP -MF $(DEPDIR)/$(@F).d
  11. LDFLAGS = $(COMMONFLAGS) -static
  12. LDFLAGS += -fno-exceptions -ffunction-sections -fdata-sections
  13. LDFLAGS += -static -Xlinker --gc-sections
  14. LDFLAGS += -Wl,-Map=$(BUILDDIR)/$(TARGET).map,--cref
  15. LDFLAGS += -Wl,--undefined=uxTopUsedPriority # openocd freertos support
  16. ASFLAGS = $(COMMONFLAGS)
  17. CROSS = arm-none-eabi
  18. GCC = $(CROSS)-gcc
  19. AS = $(CROSS)-as
  20. SIZE = $(CROSS)-size
  21. OBJCOPY = $(CROSS)-objcopy
  22. OBJDUMP = $(CROSS)-objdump
  23. NM = $(CROSS)-nm
  24. COBJ = $(addprefix $(BUILDDIR)/, $(CSRC:.c=.c.o))
  25. ASMOBJ = $(addprefix $(BUILDDIR)/, $(ASMSRC:.s=.s.o))
  26. OBJ = $(COBJ) $(ASMOBJ)
  27. V = $(if $(VERBOSE), , @)
  28. VCS = svn
  29. all: prebuild $(BUILDDIR)/$(TARGET).bin postbuild
  30. @$(SIZE) $(BUILDDIR)/$(TARGET).elf
  31. @$(SIZE) $(BUILDDIR)/$(TARGET).elf -A | awk '/.data/ || /.bss/ || /.memory_b1_text/ {sum+=$$2} END{per=sum/192/1024*100 ; print "RAM: " per"% ", sum " bytes (" 192*1024-sum " bytes free )"}'
  32. @$(SIZE) $(BUILDDIR)/$(TARGET).elf -A | awk '/.fill/ {fill=$$2} END{per=(384*1024-fill)/384/1024*100 ; print "FLASH: " per"% ", 384*1024-fill " bytes (" fill " bytes free)"}'
  33. @echo =======================================================================
  34. $(BUILDDIR)/$(TARGET).bin: $(BUILDDIR)/$(TARGET).elf
  35. @$(OBJCOPY) -O binary $(BUILDDIR)/$(TARGET).elf $(BUILDDIR)/$(TARGET).bin
  36. @$(OBJCOPY) -O ihex $(BUILDDIR)/$(TARGET).elf $(BUILDDIR)/$(TARGET).hex
  37. @$(OBJDUMP) -h -S -z $(BUILDDIR)/$(TARGET).elf > $(BUILDDIR)/$(TARGET).lss
  38. @$(NM) -n $(BUILDDIR)/$(TARGET).elf > $(BUILDDIR)/$(TARGET).sym
  39. @mkdir -p $(OUTPUTDIR)
  40. @cp $(BUILDDIR)/$(TARGET).bin $(OUTPUTDIR)
  41. $(BUILDDIR)/$(TARGET).elf: $(OBJ)
  42. @echo Linking $@
  43. $(V)$(GCC) $(LDFLAGS) -T $(PWD)/$(LDSCRIPT) -o $@ $(OBJ)
  44. $(COBJ): $(BUILDDIR)/%.c.o : %.c
  45. @echo Compiling $<
  46. @-mkdir -p $(@D)
  47. $(V)$(GCC) $(CFLAGS) -c $< -o $@
  48. $(ASMOBJ): $(BUILDDIR)/%.s.o : %.s
  49. @echo Assembling $<
  50. @-mkdir -p $(@D)
  51. $(V)$(AS) $(ASFLAGS) -c ./$< -o $@
  52. -include $(shell mkdir -p $(DEPDIR) 2>/dev/null) $(wildcard $(DEPDIR)/*)
  53. .PHONY: clean output
  54. clean:
  55. rm -rf $(BUILDDIR)