#OCAMLC = ocamlcp -g
#OCAMLCI = ocamlc.opt -g
#OCAMLLINK = ocamlcp -custom -g
#O= cmo
#A= cma

# non debugging
OCAMLC = ocamlopt -unsafe -inline 10 -noassert
OCAMLCI = ocamlopt
OCAMLLINK = ocamlopt
O= cmx
A= cmxa

MAIN=robot

all: robot

.SUFFIXES: .$(O) .cmi .ml .mli

# order is important here
OBJS =  \
	pos.$(O) \
	bitmap.$(O) \
	bitmap2d.$(O) \
	pqueue.$(O) \
	board.$(O) \
	client.$(O) \
	dijkstra.$(O) \
	robot.$(O)


.PHONY: main
main: robot
robot: $(OBJS)
	rm -f $(MAIN)
	$(OCAMLLINK) unix.$(A) -o $(MAIN) $(OBJS) -cclib -static -cclib -lunix 
	strip $(MAIN)

%.$(O): %.ml
	$(OCAMLC) -c $<

%.cmi:  %.mli
	$(OCAMLCI) -c $<

clean:
	rm -f *~ robot core *.o *.cmo *.cmx *.cmi ocamlprof.dump


# dependency list generated by ocamldep
bitmap2d.cmi: bitmap.cmi 
board.cmi: bitmap.cmi 
client.cmi: board.cmi 
dijkstra.cmi: board.cmi client.cmi pos.cmi 
bitmap2d.cmo: bitmap.cmi bitmap2d.cmi 
bitmap2d.cmx: bitmap.cmx bitmap2d.cmi 
bitmap.cmo: bitmap.cmi 
bitmap.cmx: bitmap.cmi 
board.cmo: bitmap.cmi bitmap2d.cmi board.cmi 
board.cmx: bitmap.cmx bitmap2d.cmx board.cmi 
client.cmo: board.cmi client.cmi 
client.cmx: board.cmx client.cmi 
dijkstra.cmo: bitmap2d.cmi board.cmi client.cmi pos.cmi pqueue.cmi dijkstra.cmi 
dijkstra.cmx: bitmap2d.cmx board.cmx client.cmx pos.cmx pqueue.cmx dijkstra.cmi 
pos.cmo: pos.cmi 
pos.cmx: pos.cmi 
pqueue.cmo: pqueue.cmi 
pqueue.cmx: pqueue.cmi 
robot.cmo: bitmap2d.cmi board.cmi client.cmi dijkstra.cmi 
robot.cmx: bitmap2d.cmx board.cmx client.cmx dijkstra.cmx 
