SRCDIR = src
OBJDIR = obj
CPU = atmega32

SRCS = $(SRCDIR)/main.c \
	$(SRCDIR)/V24Control.c \
	$(SRCDIR)/Servo.c \
	$(SRCDIR)/Ram.c \
	$(SRCDIR)/I2c.c  \
	$(SRCDIR)/Controller.c \
	$(SRCDIR)/FeedbackSensor.c \
	$(SRCDIR)/ValueIteration.c \
	$(SRCDIR)/StateSpace.c
	
	##$(SRCDIR)/ValueIteration.c \

OBJS =  $(SRCDIR)/main.o  \
	$(SRCDIR)/V24Control.o \
	$(SRCDIR)/Servo.o \
	$(SRCDIR)/Ram.o \
	$(SRCDIR)/I2c.o \
	$(SRCDIR)/Controller.o \
	$(SRCDIR)/FeedbackSensor.o \
	$(SRCDIR)/ValueIteration.o \
	$(SRCDIR)/StateSpace.o
	
	##$(SRCDIR)/ValueIteration.o\

##OBJS = $(OBJDIR)/main.o \
##		$(OBJDIR)/ValueIteration.o

TARGET = bin/crawlingrobot-prototype
TARGET_HEX = bin/crawlingrobot-prototype.hex

COMPILER = avr-g++
LINKER = avr-gcc
#CXXFLAGS = -mmcu=atmega32 -I/usr/avr1.6/avr/include -fmessage-length=0 -minit-stack=__stack -D__AVR_ATmega32__ -O5 -fshort-enums -fpack-struct -funsigned-char -funsigned-bitfields -gstabs 
##CXXFLAGS = -Os -Wall -g -fno-exceptions -mmcu=${CPU} -I/usr/avr/include
##CXXFLAGS = -g -O5 -mmcu=${CPU}  -I/usr/avr/include 
CXXFLAGS = -mmcu=${CPU} -I/usr/avr/include -Os
##LFLAGS = -Wl,-Map,avr.map -lm -L/usr/avr1.2/avr/lib -I/usr/avr1.2/avr/include
LIBS = -lm
#LFLAGS =  -L/usr/avr/lib -I/usr/avr/include -Wl,-u,vfprintf -lprintf_flt  -Wl,-Map,avr.map -mmcu=${CPU}
#LFLAGS =   -L/usr/avr/lib -mmcu=${CPU}
LFLAGS =  -Wl,-Map,avr.map 
#-Wl,-Map=$(@:%.elf=%.map) --cref --oformat=elf32-avr

first: all

#####################
## Erstellungsregeln
#####################

all: debug

debug: $(OBJS)
	## Binary zusammenlinken
	mv $(OBJS) $(OBJDIR)/
#	$(CC) $(CXXFLAGS) $(LFLAGS) -o $(TARGET) $(OBJDIR)/*.o $(LIBS)
	$(LINKER) $(CXXFLAGS) $(LFLAGS) -o $(TARGET) $(OBJDIR)/*.o $(LIBS)
	avr-strip $(TARGET)
	avr-size --format=sysv $(TARGET)


release: debug
	./avr_upload $(TARGET) $(TARGET_HEX) $(CPU)

$(OBJS):  
	$(COMPILER) -c $(CXXFLAGS) $(INCPATH) -o $@ $(@:.o=.c)
#	avr-strip $@

clean: 
	rm -f *~ $(OBJS) $(TARGET) $(TARGET_HEX) $(SRCDIR)/*~ $(OBJDIR)/*.o
