#!/usr/bin/make
# typical usage: make [write]

PRG            = FuseReset
PATH           =/bin:/usr/bin:/usr/local/bin:/cygdrive/c/WinAVR-20071221/bin:/cygdrive/c/WinAVR-20071221/utils/bin:/cygdrive/y/warez/Hard/Atmel/AVR/ELMwriters/avrxtool32/bin:/cygdrive/y/warez/Hard/Atmel/AVR/HIDaspx/hidspx-2010-0823/bin

AVRWRT         = hidspx
WRTFLAGS       = -ph:SN04 -d16
WRTFLAGS      += -fL0x62 -fH0xd9 -fX0xff
## AVRWRT         = avrsp
## WRTFLAGS       = -PL1 -C -d2
## WRTFLAGS      += -FH11011001 -FL01100010 -FX11111111 

OBJ            = $(PRG).o
OBJ           += TIM0.o
MCU_TARGET     = attiny2313
OPTIMIZE       = -Os -mcall-prologues -v
DEFS           =
LIBS           =

CC             = avr-gcc

INCDIRS        = -I. -I..
ASFLAGS        = -Wa,-adhlns=$(<:.S=.lst),-gstabs

ALL_ASFLAGS    = -mmcu=$(MCU_TARGET) -mtiny-stack -msize $(ASFLAGS) $(INCDIRS)	# -x assembler-with-cpp 

CFLAGS         = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS) $(INCDIRS)
LDFLAGS        = -Wl,-Map,$(PRG).map -nostartfiles -nostdlib # -Wl,--verbose

OBJCOPY        = avr-objcopy
OBJDUMP        = avr-objdump

USERFLAGS      =  -DFUSE_EXT_VALUE=0xff -DFUSE_HIGH_VALUE=0xdf -DFUSE_LOW_VALUE=0x62


all: always $(PRG).elf list text

$(PRG).elf: $(OBJ)
	$(CC) $(CFLAGS) $(LDFLAGS) $(USERFLAGS) -o $@ $^ $(LIBS)


clean:
	rm -rf *.o $(PRG).elf *.eps *.bak *.a
	rm -rf *.lst *.list *.map $(EXTRA_CLEAN_FILES)
	rm -rf $(PRG).hex $(PRG).eep


write: always $(PRG).hex $(PRG).eep
	$(AVRWRT) $(WRTFLAGS) $(PRG).hex $(PRG).eep

list:  $(PRG).list all
%.list: %.elf
	$(OBJDUMP) -h -S $< > $@
	awk '((($$1<=9)&&($$1>=0))&&($$2~/\.text/||$$2~/\.data/||$$2~/\.bss/||$$2~/\.eeprom/||$$0~/^Idx Name/)){print $$0}' $@

always: $(PRG).S common.inc
	$(CC) -c $(ALL_ASFLAGS) $(USERFLAGS) -o $(PRG).o $<

%.o: %.S common.inc
	$(CC) -c $(ALL_ASFLAGS) $(USERFLAGS) $< -o $@

text: hex
hex:  $(PRG).hex $(PRG).eep

%.hex: %.elf
	$(OBJCOPY) -j .text -j .data -O ihex $< $@

%.eep: %.elf
	$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex $< $@

