

EXE=calibrate

CROSS_COMPILE_GCC=avr-
CROSS_COMPILE_BIN=avr-

AS = $(CROSS_COMPILE_BIN)as
CC = $(CROSS_COMPILE_GCC)gcc
CPLUSPLUS = $(CROSS_COMPILE_GCC)g++
LD = $(CROSS_COMPILE_BIN)ld
AR = $(CROSS_COMPILE_BIN)ar
OBJCOPY = $(CROSS_COMPILE_BIN)objcopy
OBJDUMP = $(CROSS_COMPILE_BIN)objdump

INCLUDES = 

SRC = main.c

DEBUG = -g
CFLAGS =  -I. -Wall -Os  -Wstrict-prototypes  -Werror $(MCU_FLAGS) $(DEBUG) $(DEFINES)
ASFLAGS = -I. $(MCU_FLAGS) -xassembler-with-cpp
LDFLAGS = 

COFFCONVERT=$(OBJCOPY) --debugging \
   -O coff-ext-avr \
	--change-section-address .data-0x800000 \
	--change-section-address .bss-0x800000 \
	--change-section-address .noinit-0x800000




APPOBJS = $(patsubst %.c,obj/%.o,$(patsubst %.cpp,obj/%.o,$(SRC)))

mega8: DEFINES = -DF_CPU=7372800L
mega8: MCU_FLAGS = -mmcu=atmega8

mega8: all


all: mkobjdir $(EXE).hex 

mega8: all


mkobjdir:
	mkdirhier obj

$(EXE).hex: $(EXE).elf
	$(OBJCOPY) -j .text -j .data -O ihex \
		$(EXE).elf $(EXE).hex
	chmod -x $(EXE).hex $(EXE).elf

$(EXE).elf: $(APPOBJS)
	$(CC) $(CFLAGS) ${LDFLAGS} -o $(EXE).elf \
		$(APPOBJS) 

$(EXE).cof : $(EXE).elf
	$(COFFCONVERT) -O coff-ext-avr $< $(EXE).cof


%.o : %.c

%.o : %.cpp

%.o : %.S


obj/%.o: %.c
	$(CC) $(CFLAGS) $(LDFLAGS) -c -o $@ $<

obj/%.o: %.cpp
	$(CPLUSPLUS) $(CFLAGS) $(LDFLAGS) -c -o $@ $<

obj/%.o: %.S
	$(CC) $(ASFLAGS) -c -o $@ $<


clean:
	rm -rf `find -name '*.o' -o -name ${EXE}.hex -o -name $(EXE).elf`

docs:
	doxygen

force: clean all

