#
# 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
#
#
#-------------------------------------------------------------------------
# User defines
#-------------------------------------------------------------------------

SECRET = -DSECLEN=6 -DSECRET="{0xC0, 0xFF, 0xEE, 0xDE, 0xCA, 0xDE}" 
DEFINES = -DDEBUG -DF_CPU=16000000 -DKBD_DE -DEEPROM_SIZE=512 $(SECRET)

#DEFINES = -DDEBUG -DCALIB -DF_CPU=16500000 -DKBD_US -DEEPROM_SIZE=512

# target architecture
MCU	= atmega168

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

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

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

#-------------------------------------------------------------------------
# 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) $(DEFINES)
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
		

TMP=*.hex *.elf *.map *.list *.o *~
define TMPCLEAN
@cd $(dir); rm -f $(TMP)

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