TAL_HOME       = /home/mf/kicad/tins_avr_lib
TAL_SRC        = ${TAL_HOME}/src/tal

PRG            = gombi
OBJ            = $(PRG).o ws2811drv.o $(TAL_SRC)/init_timers.o $(TAL_SRC)/timer_overflow.o $(TAL_SRC)/adc_init_and_check.o

PRG            = ws2811tst
OBJ            = $(PRG).o ws2811drv.o $(TAL_SRC)/init_timers.o $(TAL_SRC)/timer_overflow.o

#MCU_TARGET     = atmega8
#MCU_TARGET     = atmega48
#MCU_TARGET     = atmega88
MCU_TARGET     = atmega168
#MCU_TARGET     = atmega168p

OPTIMIZE       = -O2
WARNINGS       = -g -Wall -Werror

DEFS           = -I. -I${TAL_HOME}/inc
LIBS           =

# You should not have to change anything below here.

CC             = avr-gcc
AS             = avr-gcc

# Override is only needed by avr-lib build system.

override CFLAGS        = $(WARNINGS) $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS)
#override ASFLAGS       = -I/usr/local/avr/avr/asminc -mmcu=$(MCU_TARGET)
override ASFLAGS       = -mmcu=$(MCU_TARGET)
override LDFLAGS       = -Wl,-Map,$(PRG).map

OBJCOPY        = avr-objcopy
OBJDUMP        = avr-objdump
AVRSIZE        = avr-size

all: lines $(PRG).elf lst text eeprom

burn: all
	avrdude -c stk500 -P /dev/ttyUSB0 -p $(MCU_TARGET) -U flash:w:$(PRG).srec

usbasp: all
	avrdude -c usbasp -p $(MCU_TARGET) -U flash:w:$(PRG).srec

lines: .PHONY
	echo;echo;echo

.PHONY:

$(PRG).elf: $(OBJ)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
	echo ; echo $(PRG) size ; $(AVRSIZE) $@ ; echo

.c.s:	$<
	$(CC) $(CFLAGS) -S $<

# dependency:
demo.o: demo.c iocompat.h

clean:
	rm -rf $(OBJ) $(PRG).elf *.eps *.png *.pdf *.bak 
	rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)

lst:  $(PRG).lst

%.lst: %.elf
	$(OBJDUMP) -h -S $< > $@
	$(OBJDUMP) -t -j .bss $< | egrep -v '$<: *file format elf32-avr' >> $@
	$(OBJDUMP) -s -j .comment $< | egrep -v '$<: *file format elf32-avr' >> $@

# Rules for building the .text rom images

text: hex bin srec

hex:  $(PRG).hex
bin:  $(PRG).bin
srec: $(PRG).srec

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

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

%.bin: %.elf
	$(OBJCOPY) -j .text -j .data -O binary $< $@

# Rules for building the .eeprom rom images

eeprom: ehex ebin esrec

ehex:  $(PRG)_eeprom.hex
ebin:  $(PRG)_eeprom.bin
esrec: $(PRG)_eeprom.srec

%_eeprom.hex: %.elf
	@$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@ \
	|| { echo empty $@ not generated; exit 0; }

%_eeprom.srec: %.elf
	@$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@ \
	|| { echo empty $@ not generated; exit 0; }

%_eeprom.bin: %.elf
	@$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@ \
	|| { echo empty $@ not generated; exit 0; }

# Every thing below here is used by avr-libc's build system and can be ignored
# by the casual user.

FIG2DEV                 = fig2dev
EXTRA_CLEAN_FILES       = *.hex *.bin *.srec

dox: eps png pdf

eps: $(PRG).eps
png: $(PRG).png
pdf: $(PRG).pdf

%.eps: %.fig
	$(FIG2DEV) -L eps $< $@

%.pdf: %.fig
	$(FIG2DEV) -L pdf $< $@

%.png: %.fig
	$(FIG2DEV) -L png $< $@