OUTPUTDIR = $(BUILDDIR)/../../../output DEPDIR = $(BUILDDIR)/.dep PWD = $(shell pwd) COMMONFLAGS = -mcpu=cortex-m4 -mthumb -ggdb3 CFLAGS += $(COMMONFLAGS) -Os $(INCLUDES) -I. CFLAGS += -std=gnu99 -Wall -Wextra -static -fdata-sections -ffunction-sections -fno-hosted -fno-builtin CFLAGS += -nostdlib -nodefaultlibs -fstack-usage CFLAGS += -mapcs-frame -msoft-float CFLAGS += -Werror-implicit-function-declaration -Werror=char-subscripts #-Werror=incompatible-pointer-types CFLAGS += -MD -MP -MF $(DEPDIR)/$(@F).d LDFLAGS = $(COMMONFLAGS) -static LDFLAGS += -fno-exceptions -ffunction-sections -fdata-sections LDFLAGS += -static -Xlinker --gc-sections LDFLAGS += -Wl,-Map=$(BUILDDIR)/$(TARGET).map,--cref LDFLAGS += -Wl,--undefined=uxTopUsedPriority # openocd freertos support ASFLAGS = $(COMMONFLAGS) #CROSS = arm-none-eabi CROSS ?= arm-none-eabi ifeq ($(shell uname -n),x220) CROSS = /opt/gcc-arm-none-eabi-7-2017-q4-major/bin/arm-none-eabi endif GCC = $(CROSS)-gcc AS = $(CROSS)-as SIZE = $(CROSS)-size OBJCOPY = $(CROSS)-objcopy OBJDUMP = $(CROSS)-objdump NM = $(CROSS)-nm COBJ = $(addprefix $(BUILDDIR)/, $(CSRC:.c=.c.o)) ASMOBJ = $(addprefix $(BUILDDIR)/, $(ASMSRC:.s=.s.o)) OBJ = $(COBJ) $(ASMOBJ) V = $(if $(VERBOSE), , @) VCS = svn all: prebuild $(BUILDDIR)/$(TARGET).bin postbuild @$(SIZE) $(BUILDDIR)/$(TARGET).elf @$(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 )"}' @$(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)"}' @echo ======================================================================= $(BUILDDIR)/$(TARGET).bin: $(BUILDDIR)/$(TARGET).elf @$(OBJCOPY) -O binary $(BUILDDIR)/$(TARGET).elf $(BUILDDIR)/$(TARGET).bin @$(OBJCOPY) -O ihex $(BUILDDIR)/$(TARGET).elf $(BUILDDIR)/$(TARGET).hex @$(OBJDUMP) -h -S -z $(BUILDDIR)/$(TARGET).elf > $(BUILDDIR)/$(TARGET).lss @$(NM) -n $(BUILDDIR)/$(TARGET).elf > $(BUILDDIR)/$(TARGET).sym @mkdir -p $(OUTPUTDIR) @cp $(BUILDDIR)/$(TARGET).bin $(OUTPUTDIR) $(BUILDDIR)/$(TARGET).elf: $(OBJ) @echo Linking $@ $(V)$(GCC) $(LDFLAGS) -T $(PWD)/$(LDSCRIPT) -o $@ $(OBJ) $(COBJ): $(BUILDDIR)/%.c.o : %.c @echo Compiling $< @-mkdir -p $(@D) $(V)$(GCC) $(CFLAGS) -c $< -o $@ $(ASMOBJ): $(BUILDDIR)/%.s.o : %.s @echo Assembling $< @-mkdir -p $(@D) $(V)$(AS) $(ASFLAGS) -c ./$< -o $@ -include $(shell mkdir -p $(DEPDIR) 2>/dev/null) $(wildcard $(DEPDIR)/*) .PHONY: clean output clean: rm -rf $(BUILDDIR)