#------------------------------------------------------------------------------- 
#  \file Makefile
#
#  \brief Declares build options for the bootloader.
#
#  \author
#    Atmel Corporation: http://www.atmel.com \n
#    Support email: avr@atmel.com
#
#  Copyright (c) 2008-2015, Atmel Corporation. All rights reserved.
#  Licensed under Atmel's Limited License Agreement (BitCloudTM).
#
#------------------------------------------------------------------------------- 
#-------------------------------------------------------------------------------
# Project name:
#-------------------------------------------------------------------------------
PROJNAME = spiFlasher

#-------------------------------------------------------------------------------
# Compiler type:
#-------------------------------------------------------------------------------
COMPILER_TYPE = GCC

#-------------------------------------------------------------------------------
# Microcontroller selection:
#-------------------------------------------------------------------------------
CHIP = AT91SAM7X256

#-------------------------------------------------------------------------------
# CPU selection:
#-------------------------------------------------------------------------------
CPU = arm7tdmi

#-------------------------------------------------------------------------------
# Cross-platform compiler type declaration:
#-------------------------------------------------------------------------------
CROSS_COMPILER = arm-none-eabi-

#-------------------------------------------------------------------------------
# Tools definitions:
#-------------------------------------------------------------------------------
AS      = $(CROSS_COMPILER)as
LD      = $(CROSS_COMPILER)ld
CC      = $(CROSS_COMPILER)gcc
CPP     = $(CROSS_COMPILER)g++
AR      = $(CROSS_COMPILER)ar
NM      = $(CROSS_COMPILER)nm
STRIP   = $(CROSS_COMPILER)strip
OBJCOPY = $(CROSS_COMPILER)objcopy
OBJDUMP = $(CROSS_COMPILER)objdump
SIZE    = $(CROSS_COMPILER)size
AR_KEYS = cr
COMPILER_AND_MICRO_TYPE = GCC_ARM

#-------------------------------------------------------------------------------
# Compiler flags:
#-------------------------------------------------------------------------------
# GCC flags -------------------------------
# Core independent compiler flags ----------------------------
CFLAGS  = -Os
CFLAGS += -c
CFLAGS += -g
CFLAGS += -Wall -W
CFLAGS += -ffunction-sections
# ARM core specific compiler flags ---------------------------
CFLAGS += -mcpu=$(CPU)
CFLAGS += -fomit-frame-pointer

CFLAGS += -D$(CHIP)

ASMFLAGS = CFLAGS

#==============================================================================
# Include paths flags
#==============================================================================
INCLUDEDIRS = -I./include
CPATHDIRS   =  .

#==============================================================================
# Linking
#==============================================================================
# It's easier to use indirect ld call via gcc instead of direct ld call.
EXECUTABLE_FORMAT = elf
LDSCRIPT = atmel-rom
LD = $(CC)
LINKER_FLAGS = -Xlinker -Map=./list/$(PROJNAME).map -Wl,--gc-sections
LINKER_FLAGS += $(filter -mthumb%,$(CFLAGS))
LINKER_FLAGS += $(filter -mcpu%,$(CFLAGS))
LINKER_FLAGS += -nostartfiles
LINKER_FLAGS += -Xlinker -T./linkerScr/$(LDSCRIPT).ld

cc_file  =  atomic
cc_file +=  dbgPort
cc_file +=  irq
cc_file +=  lowLevelInit
cc_file +=  spi
cc_file +=  uart
cc_file +=  spiFlasher

asm_file  = firmwareBootGcc

cc_objects = $(addsuffix .o,$(addprefix $(CPATHDIRS)/objs/,$(cc_file)))
cc_sources = $(addsuffix .c,$(addprefix $(CPATHDIRS)/src/,$(cc_file)))
asm_objects = $(addsuffix .o,$(addprefix $(CPATHDIRS)/objs/,$(asm_file)))
asm_sources = $(addsuffix .s,$(addprefix $(CPATHDIRS)/src/,$(asm_file)))
  
OBJS  =  $(cc_objects)
OBJS +=  $(asm_objects) 

################ common c part ##############################
$(CPATHDIRS)/objs/%.o: $(CPATHDIRS)/src/%.c
	$(CC) $(CFLAGS) $(INCLUDEDIRS) $^ -o $@
################ c part ##############################

################ assembler part ######################
$(asm_objects): $(asm_sources)
	$(CC) $(CFLAGS) $(INCLUDEDIRS) $^ -o $@	
################ assembler part ######################

all: $(PROJNAME).elf $(PROJNAME).bin size

$(PROJNAME).elf: $(OBJS)
	@echo 
	@echo -----------------Linking---------------------------
	$(LD) $(LINKER_FLAGS) $(OBJS) -o $@

%.bin:  $(PROJNAME).elf
	$(OBJCOPY) -O binary --strip-debug --strip-unneeded $^ $@

size: $(PROJNAME).elf
	@echo 
	@$(SIZE) -td $(PROJNAME).elf

clean:
	@echo 
	@echo -------Application cleaning------------------------
	-rm -rf $(OBJS) ./list/*.* $(PROJNAME).elf $(PROJNAME).bin
