##############################################################################
#
#  remove unused sections
##############################################################################

VERSION_HI  = 1
VERSION_LO_ = 0
VERSION_SUB = 0

PROGPORT = /dev/ttyUSB0
PROGSPEED = 57600

VERSION_LO=$(VERSION_LO_)$(VERSION_SUB)
SW_VERSION = $(VERSION_HI).$(VERSION_LO)

CDAY=26
CMONTH=1
CYEAR=12
# __NEWLIB__  -D__USE_CMSIS=CMSISv1p30_LPC17xx 
PARAMS = -DGET_DIAGNOSTIC_SESSION=1
# -D__NEWLIB__ 
#   -DNDEBUG -D__CODE_RED -D__REDLIB__ 
GLOBALDEFINES = -D__NEWLIB__ -DVERSION_HI=$(VERSION_HI) -DVERSION_LO=$(VERSION_LO) -DMAIN_VERSION_STR=\"$(VERSION_HI).$(VERSION_LO)\" -DCOMPILE_YEAR=$(CYEAR) -DCOMPILE_MONTH=$(CMONTH) -DCOMPILE_DAY=$(CDAY) -DVERSION_LO_=$(VERSION_LO_) -DVERSION_SUB=$(VERSION_SUB) $(PARAMS)

CREATE = test

ifeq ($(strip $(CREATE)),test)
PROG = $(CREATE)_$(VERSION_HI)$(VERSION_LO)
endif


#cr_startup_lpc178x.c \

#ASRCS   = startup_LPC17xx.s

SRCS    = cr_startup_lpc178x.c \
	  system_LPC177x_8x.c \
	  lpc177x_8x_uart.c \
	  lpc177x_8x_pinsel.c \
	  lpc177x_8x_clkpwr.c \
	  md5.c \
	  rsa.c \
	  bignum.c \
	  main.c \

#	  uart.c \





#MACROS	= 
#INCS = 
#LIBS =

OPT = s

# device
MCU	= cortex-m3 -mthumb

# to see configuration set this value to yes
#SHOWCONFIG = yes

INCLUDE_PATHS = ./inc
###############################################################################

# -Map="Test.map" -Xlinker  -mcpu=cortex-m3  -T "Test_Release.ld" -o"Test.axf" $(OBJS) $(USER_OBJS) $(LIBS)

CC 	= arm-none-eabi-gcc
SIZE	= arm-none-eabi-size
OBJCOPY = arm-none-eabi-objcopy
COPY    = cp

###############################################################################
# -g = debug information
CFLAGS =  -O$(OPT) -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -MMD -MP -I$(INCLUDE_PATHS)
CFLAGS += -mcpu=$(MCU)

CFLAGS += -Wall $(PROGDEFINES) $(GLOBALDEFINES)

# Minimalistic printf version 
LDFLAGS  = -mcpu=$(MCU) -nostdlib -Xlinker --gc-sections -mthumb -T "ld_script.ld" -Xlinker -Map=$(PROG).map
#LDFLAGS  = -Wl -Xlinker --gc-sections -mthumb -T "ld_script.ld" -Xlinker -Map $(PROG).map 
# 

#LDFLAGS += -s -Wl,-Map,$(PROG).map,-u,vfprintf,--gc-sections

ASMFLAGS = -mcpu=$(MCU) -x assembler-with-cpp -Wa,

###############################################################################

#CFLAGS += -O$(OPT)
#CFLAGS += $(MACROS)

OBJS	= $(SRCS:.c=.o) $(ASRCS:.s=.o)
DEPS	= $(OBJS:.o=.d)

###############################################################################

CFLAGS += $(INCS)
LDFLAGS += $(LIBS)

###############################################################################

ifeq ($(strip $(SHOWCONFIG)),yes)
PREAMBLE = show_config
endif

all: $(PREAMBLE) $(PROG).axf $(PROG).bin show_size


###############################################################################
# we only handle (include) dependency files if we do not use
# make or mrproper targets
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),mrproper)

%.d: %.c
	@$(CC) $(CFLAGS) -MT '$*.o $*.d' -MM $<  -MF $@;

%.d: %.s
	@echo '$(CC) $(ASMFLAGS) $*.o $*.d'
	@$(CC) $(ASMFLAGS) -MT '$*.o $*.d' -MM $<  -MF $@;

-include $(DEPS)
endif
endif
###############################################################################
#
#  Rules for the hex and eeprom files 

%.bin: %.axf
	@echo
	@echo ___ CREATING BIN FILE ___
	$(OBJCOPY) -O binary $< $@
#	$(COPY) $@ release 

###############################################################################
#
# General compile options

%.o: %.c
	@echo '$$(CC) $$(CFLAGS) -o $@ $<'
	@$(CC) $(CFLAGS) -c -o $@ $<

%.o: %.s
	@echo '$(CC) $(ASMFLAGS) -o $@ $<'
	@$(CC) $(ASMFLAGS) -c -o $@ $<


$(PROG).axf: compile_msg $(DEPS) $(OBJS) link_msg
	@echo '$(CC) $(LDFLAGS) -o$@ $(OBJS) '
	@$(CC) $(LDFLAGS) -o$@ $(OBJS) 

show_size:
	@if [ -f $(PROG).axf ]; then \
	echo; \
	echo ___ SIZE ___; \
	$(SIZE) -B $(PROG).axf; echo; \
	fi

preamble:
	@echo
	@echo ___ CONFIGURATION ___
	@echo "PROG    :" $(PROG)
	@echo "CC      :" $(CC)
	@echo "SIZE    :" $(SIZE)
	@echo "CFLAGS  :"
	@$(foreach cfl, $(CFLAGS), echo "          "$(cfl);)
	@echo "LDFLAGS :"
	@$(foreach ld, $(LDFLAGS), echo "          "$(ld);)
	@echo "OBJS    :"
	@$(foreach obj, $(OBJS), echo "          "$(obj);)

compile_msg:
	@echo
	@echo ___ COMPILING ___

link_msg:
	@echo
	@echo ___ LINKING ___

clean:
	$(RM) *~ *.o *.d *.elf *.hex *.bin *.eeprom *.map *.axf

mrproper: clean
	$(RM) $(PROG) $(PROG).elf $(PROG).hex $(PROG).eeprom


###############################################################################
#
# Programmer section

debugprog: $(PROG).bin
	lpc21isp -term -wipe -bin -control $< $(PROGPORT) $(PROGSPEED) 12000

prog: $(PROG).bin
	lpc21isp -term -wipe -bin -control $< $(PROGPORT) $(PROGSPEED) 12000

#include ~/programme/Makefile.rules
