EXE=gate

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 = 
DEFINES = -DF_CPU=7372800L -DI2C_MASTER

SRC = ports.c driver.c test.c ports_driver.c spi_driver.c

DEBUG = -g
CFLAGS =  -I. -Ii2c -Wall -Os  -Wstrict-prototypes  -Werror $(MCU_FLAGS) $(DEBUG) $(DEFINES) $(INCLUDES)
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,build/%.o,$(patsubst %.cpp,build/%.o,$(SRC)))

MCU_FLAGS = -mmcu=atmega32

all: $(EXE).hex 

$(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


build/%.o: %.c $(CONFIG_FILES)
	#mkdirhier `dirname $@`
	$(CC) $(CFLAGS) $(LDFLAGS) -c -o $@ $<

build/%.o: %.cpp $(CONFIG_FILES)
	#mkdirhier `dirname $@`
	$(CPLUSPLUS) $(CFLAGS) $(LDFLAGS) -c -o $@ $<

build/%.o: %.S $(CONFIG_FILES)
	#mkdirhier `dirname $@`
	$(CC) $(ASFLAGS) -c -o $@ $<


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

docs:
	doxygen

force: clean all

