CC68O=gcc68o
CXX68O=c++68o
LD68=gld68o

LIBDIR=../lib

PICDIR=$(LIBDIR)/libpicproc
VISIONDIR=$(LIBDIR)/libvision
CAMERADIR=$(LIBDIR)/libcamera
LANGDIR=$(LIBDIR)/liblanguage

INCLUDES = -I$(PICDIR) -I$(CAMERADIR) -I$(VISIONDIR) -I$(LANGDIR)

MC=/user/res/uwarobot/mc-master/mc
CPP68FLAGS=-I$(MC)/include $(INCLUDES) -O6 -Wall

SIMDIR=/user/res/uwarobot/mc-master/mc-src/sim

PIC_LIB   = -L$(PICDIR) -lpicproc
CAMERA_LIB = -L$(CAMERADIR) -lcamera
VISION_LIB = -L$(VISIONDIR) -lvision
LANG_LIB   = -L$(LANGDIR) -llanguage

CXX=/usr/bin/c++
DEFINES=-DNDEBUG #-DTEST
CPPFLAGS=-I$(SIMDIR)/include -g -O6 -W -Wall $(INCLUDES) $(DEFINES)
LD68FLAGS=$(VISION_LIB) $(CAMERA_LIB) $(PIC_LIB) $(LANG_LIB) -lirtv
LDFLAGS=$(VISION_LIB)_lx $(CAMERA_LIB)_lx $(PIC_LIB)_lx $(LANG_LIB)_lx \
	-L$(SIMDIR)/lib -leyebot \
	-L/store/lib -Wl,-rpath,/store/lib -lCoin -lImlib\
	-lpthread -L/usr/X11R6/lib -L/store/lib -lforms -lX11 -lXext -lefence

OBJS = main.o debug.o scrollmenu.o input.o driver.o \
	pan-pos.o panning.o \
	timediff.o \
	predictor.o envstatus.o envstatus-draw.o psdrange.o playball.o \
	selflocate.o fieldmap.o
#	cmvision-test.o cmvision.o rgb2yuyv.o \
#	psd_sensor.o audio.o evidencemap.o
#	global-id-find.o

all: main main.hex
doc: README soccer-pere.html
soccer-pere.summary: main
	cat *.cc *.c *.hh *.h > $@
README: soccer-pere.summary
	robodoc $^ $@ SORT ASCII
	tr -d "" < $@ > $@.new; mv $@.new $@
soccer-pere.html: soccer-pere.summary
	robodoc $^ $@ SORT HTML

main: $(OBJS)
	$(CXX) -o $@ $^ $(LDFLAGS)

main.hex: $(patsubst %.o,%.o68,$(OBJS))
	$(LD68) $^ $(LD68FLAGS)

startup.hex: startup.o68 $(patsubst %.o,%.o68,$(OBJS))
	$(LD68) $^ $(LD68FLAGS)

lint:
	lclint +posixlib -booltype BOOL \
	  -I$(SIMDIR)/include $(INCLUDES) *.c

ODO_OBJS = odometry-calibr.o driver.o

odometry-calibr: $(ODO_OBJS)
	$(CXX) -o $@ $^ $(LDFLAGS)

odometry-calibr.hex: $(patsubst %.o,%.o68,$(ODO_OBJS))
	$(LD68) $^ $(LD68FLAGS)

drive-test.hex: drive-test.o68 driver.o68 debug.o68
	$(LD68) $^ $(LD68FLAGS)

KEEPER_OBJS = keeper.o $(OBJS)

keep: keeper.hex keeper

keeper.hex: $(patsubst %.o,%.o68,$(KEEPER_OBJS))
	$(LD68) $^ $(LD68FLAGS)

keeper: $(KEEPER_OBJS)
	$(CXX) -o $@ $^ $(LDFLAGS)

MENU_OBJS = scrollmenu.o

selflocate: debug.o fieldmap.o
	$(RM) selflocate.o 
	$(MAKE) DEFINES=-DTEST selflocate.o 
	$(CXX) -o $@ selflocate.o $^ $(LDFLAGS)
	$(RM) selflocate.o 

evidencemap: debug.o fieldmap.o
	$(RM) evidencemap.o 
	$(MAKE) DEFINES=-DTEST evidencemap.o 
	$(CXX) -o $@ evidencemap.o $^ $(LDFLAGS)
	$(RM) evidencemap.o 

scrollmenu: $(MENU_OBJS)
	$(CXX) -o $@ $^ $(LDFLAGS)

scrollmenu.hex: $(patsubst %.o,%.o68,$(MENU_OBJS))
	$(LD68) $^ $(LD68FLAGS)


.SUFFIXES: .o68
.cc.o68:
	$(CXX68O) $(CPP68FLAGS) $<
	mv $*.o $@

.c.o68:
	$(CC68O) $(CPP68FLAGS) $<
	mv $*.o $@

clean:
	$(RM) *~ *.bak
	$(RM) *.o
	$(RM) *.o68
	$(RM) main main.hex
	$(RM) odometry-calibr odometry-calibr.hex selflocate evidencemap
	$(RM) soccer-pere.summary

depend:
	makedepend -Y *.c *.cc

# DO NOT DELETE

debug.o: debug.h
cmvision-test.o: cmvision.h
cmvision.o: cmvision.h
driver.o: driver.hh vec2d.hh debug.h
envstatus-draw.o: envstatus.hh vec2d.hh driver.hh predictor.hh predictor.h
envstatus-draw.o: panning.hh segment2d.hh angles.h triangle2d.hh psdbeam.h
envstatus-draw.o: evidencemap.hh soccerfield.h fieldmap.hh
envstatus.o: envstatus.hh vec2d.hh driver.hh predictor.hh predictor.h
envstatus.o: panning.hh segment2d.hh angles.h triangle2d.hh psdbeam.h
envstatus.o: evidencemap.hh soccerfield.h debug.h fieldmap.hh blocktimer.hh
envstatus.o: hdtcamera.h hdtpsdpos.h soccer.hh miscmacro.h input.h
evidencemap.o: evidencemap.hh soccerfield.h psdbeam.h vec2d.hh blocktimer.hh
evidencemap.o: angles.h miscmacro.h
fieldmap.o: fieldmap.hh vec2d.hh segment2d.hh angles.h triangle2d.hh
fieldmap.o: soccerfield.h miscmacro.h
global-id-find.o: driver.hh vec2d.hh input.h debug.h
keeper.o: robotcontrol.hh vec2d.hh envstatus.hh driver.hh predictor.hh
keeper.o: predictor.h panning.hh segment2d.hh angles.h triangle2d.hh
keeper.o: psdbeam.h evidencemap.hh soccerfield.h keeper.hh soccer.hh debug.h
main.o: scrollmenu.hh driver.hh vec2d.hh debug.h soccer.hh segment2d.hh
main.o: angles.h triangle2d.hh psdbeam.h input.h
odometry-calibr.o: driver.hh vec2d.hh input.h
pan-pos.o: scrollmenu.hh driver.hh vec2d.hh panning.hh angles.h input.h
panning.o: panning.hh debug.h angles.h hdtcamera.h
playball.o: robotcontrol.hh vec2d.hh envstatus.hh driver.hh predictor.hh
playball.o: predictor.h panning.hh segment2d.hh angles.h triangle2d.hh
playball.o: psdbeam.h evidencemap.hh soccerfield.h soccer.hh debug.h input.h
playball.o: scrollmenu.hh
predictor.o: predictor.hh predictor.h vec2d.hh debug.h
psd_sensor.o: psd_sensor.h sensor.h
scrollmenu.o: scrollmenu.hh miscmacro.h input.h
selflocate.o: angles.h segment2d.hh vec2d.hh triangle2d.hh debug.h
selflocate.o: envstatus.hh driver.hh predictor.hh predictor.h panning.hh
selflocate.o: psdbeam.h evidencemap.hh soccerfield.h blocktimer.hh
selflocate.o: fieldmap.hh miscmacro.h soccer.hh
timediff.o: debug.h input.h
