#
# Targets:
#	<none>		generate flash file
#	install		generate flash
#	download	download flash
#	check		shows md5 and sha1 sum of uploaded code
#	clean		remove obj- and temporary files
#
# change PROJNAME for new projects
# add your object files to OBJS
#

#-------------------------------------------------------------------------
# project specific things
# change these definitions for new projects
#-------------------------------------------------------------------------

PROJNAME = arduino_HOTP
OBJS =  main.o                  \
        trunc.o                 \
        calib.o                 \
        usb_callback.o          \
        sha1/sha1-asm.o         \
        hmac-sha1/hmac-sha1.o   \
        mem_eval/mem_eval.o     \
        usbdrv/usbdrv.o         \
        usbdrv/oddebug.o        \
        usbdrv/usbdrvasm.o      \
        usart/usart.o                

INCLUDE = -Isha1 -Ihmac-sha1 -Iusbdrv -Iusart -Imem_eval

DEBUG = -DDEBUG -DF_CPU=16000000
#DEBUG = -DDEBUG -DCALIB -DF_CPU=16000000

# target architecture
MCU	= atmega168

#-------------------------------------------------------------------------
# macros for the tools
#-------------------------------------------------------------------------

BAUD	= 19200

BINFORMAT = ihex

# programmer format, this depends on programmer or bootloader you're using
#PROGFORMAT = dasa2
#PROGFORMAT = dapa
#PROGFORMAT = stk200
#PROGFORMAT = usbtiny
PROGFORMAT = stk500v2

# programmer-device-file
#IFCTYPE	= /dev/ttyS0
#IFCTYPE	= /dev/ttyS1
#IFCTYPE	= /dev/ttyACM0
#IFCTYPE 	= /dev/ttyACM1
IFCTYPE	= /dev/ttyUSB0
#IFCTYPE	= /dev/ttyUSB1

# Tools
AS	= avr-as
ASLD	= avr-gcc -x assembler
LD	= avr-ld 
CC	= avr-gcc 
OBJCOPY = avr-objcopy
#PROGR	= uisp
#PROGR	= at16prog
PROGR  = lboot
#PROGR = avrdude

# Flags
CFLAGS  =  -Wall -Os -mmcu=$(MCU) $(DEBUG)
LDFLAGS	= -Wl,-Map=$*.map -mmcu=$(MCU)
OCFLAGS	= -O $(BINFORMAT)
# at16prog
#PRFLAGS	= $(IFCTYPE) -dprog=$(PROGFORMAT) -dpart=$(MCU)
# avrdude
#PRFLAGS		= -F -p $(MCU) -P $(IFCTYPE) -c $(PROGFORMAT)  -b $(BAUD) 
PRFLAGS 		= -d $(IFCTYPE) -b $(BAUD)

#-------------------------------------------------------------------------
# the targets
#-------------------------------------------------------------------------

all: $(PROJNAME).hex $(PROJNAME).elf $(OBJS)

%.hex:	%.elf
	$(OBJCOPY) $(OCFLAGS) $< $@
	@chmod ugo-x $@

%.elf:	$(OBJS)
	$(CC) $(OBJS) $(LIBS) $(LDFLAGS) -o $@

%.o:	%.c
	$(CC) $(CFLAGS) $(INCLUDE) -Wa,-a=$*.list -c -o $@ $<

%.o:	%.S
	$(CC) $(CFLAGS) $(INCLUDE) -Wa,-a=$*.list -c -o $@ $<

install: $(PROJNAME).hex
	$(PROGR) $(PRFLAGS) -p $(PROJNAME).hex
#$(PROGR) $(PRFLAGS)  -U flash:w:$(PROJNAME).hex
	
download: $(PROJNAME).down.hex
	echo ""
	
$(PROJNAME).down.hex:
	$(PROGR) $(PRFLAGS) -U flash:r:$(PROJNAME).down.hex:i
	
check:$(PROJNAME).down.hex $(PROJNAME).hex
	$(PROGR) $(PRFLAGS) -v $(PROJNAME).hex
	

TMP=*.hex *.elf *.map *.list *.o *~

define TMPCLEAN
@cd $(dir); rm -f $(TMP)

endef
SCHLIMM=cd $(dir);echo $(dir)$(TMP) 

clean:
	$(foreach dir,$(dir $(OBJS)), $(TMPCLEAN))
