MCU_TARGET	= atmega328p
#MCU_TARGET	= atmega32u4
F_CPU		= 16000000L

#MCU_TARGET	= at90s8535
#F_CPU		= 3686400

OPTIMIZE	= -Os
INCLUDES	+= -I.

CXXLIBS		= -L. -lc++helpers

SIMPLE_C_PROGS		= \
	blinken-lights-c \
	blinken-lights2-c \

SIMPLE_CXX_PROGS		= \
	blinken-lights \
	blinken-lights2 \
	blinken-lights3 \
	blinken-lights4 \
	blinken-lights5 \
	blinken-lights6 \
	blinken-lights7 \
	blinken-lights8 \
	blinken-lights9 \

MYLIB = libc++helpers.a
MYLIBOBJS = delay1.o
MYLIBHEADERS = util/delay1.hh


all: $(MYLIB) $(patsubst %,%.all,$(SIMPLE_C_PROGS) $(SIMPLE_CXX_PROGS))

# additional dependencies
blinken-lights7.elf: gpio.hh
blinken-lights8.elf: gpio.hh
blinken-lights9.elf: gpio2.hh


#SIMPLE_C_ELFS = $(patsubst %,%.elf,$(SIMPLE_C_PROGS))
#SIMPLE_CXX_ELFS = $(patsubst %,%.elf,$(SIMPLE_CXX_PROGS))

$(MYLIB): $(MYLIBOBJS)
	$(AR) -r $@ $^
	$(RANLIB) $@

$(MYLIBOBJS): $(MYLIBHEADERS)

%.elf: $(MYLIB)



.SUFFIXES: .c .cc .o .E .elf .lst .bin .hex .srec .all

# we don't want the intermediate files to be deleted
.SECONDARY:

CC		= avr-gcc
CXX		= avr-g++

DEFS		+= -DF_CPU=$(F_CPU)

CMNFLAGS	= -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS) $(INCLUDES)
#CFLAGS		= -std=c99 $(CMNFLAGS)
CFLAGS		= $(CMNFLAGS)
CXXFLAGS	+= -std=c++0x $(CMNFLAGS)
#LDFLAGS		+=

OBJCOPY        = avr-objcopy
OBJDUMP        = avr-objdump

AR		= avr-ar
RANLIB		= avr-ranlib


%.all: %.elf %.bin %.hex %.lst
	@echo $* done

.c.elf:
	$(CC) $(CFLAGS) $(LDFLAGS) -Wl,-Map=$*.map -o $@ $^ $(LIBS)

.cc.elf:
	$(CXX) $(CXXFLAGS) $(LDFLAGS) -Wl,-Map=$*.map -o $@ $^ $(LIBS) $(CXXLIBS)

.c.E:
	$(CC) $(CFLAGS) -E $^ > $@

.cc.E:
	$(CXX) $(CXXFLAGS) -E $^ > $@

%.lst: %.elf
	$(OBJDUMP) -h -S $< > $@

# Rules for building the .text rom images

%.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 $< $@


clean:
	rm -f *.o *.elf *.E *.hex *.bin *.srec *.map *.lst
	rm -f $(MYLIB) *~
