DEFS?=-DERS7

PREFIX=/usr/local/OPEN_R_SDK
INSTALLDIR?=../MS
CXX=$(PREFIX)/bin/mipsel-linux-g++
CC=$(PREFIX)/bin/mipsel-linux-gcc
STRIP=$(PREFIX)/bin/mipsel-linux-strip
MKBIN=$(PREFIX)/OPEN_R/bin/mkbin
STUBGEN=$(PREFIX)/OPEN_R/bin/stubgen2
MKBINFLAGS=-p $(PREFIX)
LIBS=-L$(PREFIX)/OPEN_R/lib \
	-Lperl-5.8.0 \
	-lObjectComm \
	-lOPENR \
	-lERA201D1 

CXXFLAGS= \
	-O2 \
	-I. \
	-I$(PREFIX)/OPEN_R/include/R4000 \
	-I$(PREFIX)/OPEN_R/include/MCOOP \
	-I$(PREFIX)/OPEN_R/include \
	-I../common/include \
	-Iperl-5.8.0 \
	-DPERL_MICRO \
	-g \
	-Wall 

#
# When OPENR_DEBUG is defined, OSYSDEBUG() is available.
#
#CXXFLAGS+= -DOPENR_DEBUG

.PHONY: all install clean

all: robotComm.bin

%.o: %.cc
	$(CXX) $(CXXFLAGS) $(DEFS) -o $@ -c $<

%.o: %.c
	$(CC) $(CXXFLAGS) $(DEFS) -o $@ -c $<

sources = $(shell find . -name '*.cc')

%.d: %.cc
	@set -e; rm -f $@; \
	$(CC) -MM -MG $(CXXFLAGS) $< > $@.$$$$; \
	sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
	rm -f $@.$$$$

-include $(sources:.cc=.d)

-lmicroperl: 
	cd perl-5.8.0; make libmicroperl

PERLOBJS =  PerlOOWrapper.o LibRoutines.o FakeSysCalls.o -lmicroperl

ROBOTCOMMOBJS = \
	RobotCommStub.o RobotComm.o Handler.o Util.o

SENSOROBJS = \
	SensorComm/SensorComm.o SensorComm/Image.o SensorComm/Sensor.o \
	SensorComm/Color.o SensorComm/Lines.o SensorComm/Blobs.o \
	SensorComm/Pose.o SensorComm/Objects.o SensorComm/Space.o

MOTIONOBJS = \
	Motion/Motion.o \
	Motion/EffectorComm.o \
	Motion/WalkLegs.o Motion/PointHead.o

WORLDOBJS = \
	WorldModel/WorldModel.o WorldModel/RBFilter.o \
	WorldModel/Vision.o WorldModel/Odometry.o \
	WorldModel/Ball.o WorldModel/Location.o \
	WorldModel/Surround.o


RobotCommStub.cc def.h: stub.cfg
	$(STUBGEN) stub.cfg

robotComm.bin: $(ROBOTCOMMOBJS) robotComm.ocf \
	$(PERLOBJS) \
	$(SENSOROBJS) \
	$(MOTIONOBJS) \
	$(WORLDOBJS)
	$(MKBIN) $(MKBINFLAGS) -o $@ $^ $(LIBS) 
	$(STRIP) $@

install: robotComm.bin
	gzip -c robotComm.bin > $(INSTALLDIR)/OPEN-R/MW/OBJS/ROBOTCOM.BIN

clean:
	rm -f *.o *.bin *.elf *.snap.cc *.d
	rm -f $(SENSOROBJS)
	rm -f $(MOTIONOBJS)
	rm -f $(WORLDOBJS)
	rm -f RobotCommStub.h RobotCommStub.cc def.h entry.h
	rm -f $(INSTALLDIR)/OPEN-R/MW/OBJS/ROBOTCOM.BIN
	cd perl-5.8.0; make clean
