#!/usr/bin/make

ARCH		= atmega103
PROG_ARCH	= stk200
PROG_FLAGS	= -v
CFLAGS		= -Wall -O3

AVR_PATH	= /usr/local/bin
AR		= $(AVR_PATH)/avr-ar
AS		= $(CC) -c
CC		= $(AVR_PATH)/avr-gcc -mmcu=$(ARCH)
OBJCOPY		= $(AVR_PATH)/avr-objcopy
PROG		= $(AVR_PATH)/uisp -dprog=$(PROG_ARCH) $(PROG_FLAGS)

LIB		= libavr.a
PROGRAM		= pwmeter

LIBOBJS		=					\
	uart.o						\
	servo.o						\
	timer.o						\
	button.o					\
	adc.o						\
	ahrs.o						\

DONT_BUILD	=					\

all: pwmeter
pwmeter: pwmeter.elf
pwmeter.elf:						\
	pwmeter.o					\
	libavr.a					\

	$(CC) -mmcu=$(ARCH) -o $@ pwmeter.o -L . -lavr

pwmeter.o:						\
	pwmeter.c					\
	avr.h						\

old-all: $(LIB) $(PROGRAM)

hover.o:						\
	hover.c						\
	avr.h						\

safety.o:						\
	safety.c					\
	avr.h						\

avr.h:							\
	servo.h						\
	button.h					\
	timer.h						\
	ahrs.h						\
	adc.h						\

servo.o:						\
	servo.c						\
	servo.h						\
	timer.h						\

timer.o:						\
	timer.c						\
	timer.h						\

button.o:						\
	button.c					\
	button.h					\

uart.o:							\
	uart.c						\
	uart.h						\

adc.o:							\
	adc.c						\
	adc.h						\

interrupts.o:						\
	interrupts.s					\

ahrs.o:							\
	ahrs.c						\
	ahrs.h						\
	servo.h						\
	timer.h						\


# Helper to build the assembly version of a C file
.c.s:
	$(CC) $(CFLAGS) -S -o $@ $<


$(LIB):		$(LIBOBJS)
	$(AR) crs $(LIB) $(LIBOBJS)

$(PROGRAM):	$(PROGRAM).elf
	$(OBJCOPY) -O srec $(PROGRAM).elf $(PROGRAM)

hover.elf:	hover.o libavr.a
	$(CC) -o $@ hover.o -L. -lavr
hover:	hover.elf
	$(OBJCOPY) -O srec hover.elf hover


upload:	$(PROGRAM)
	$(PROG) --upload if=$(PROGRAM)
verify: $(PROGRAM)
	$(PROG) --verify if=$(PROGRAM)
erase:
	$(PROG) --erase
	sleep 1	# Avoid "memory locked" errors
install: erase upload

reset:
	$(PROG) --reset
	

upload:

clean:
	$(RM) a.out *.a *.so *.o *.elf *.srec core $(PROGRAM)
