#*************************************************************#
#
#   Ensemble, (Version 0.40)
#   Copyright 1997 Cornell University
#   All rights reserved.
#
#   See ensemble/doc/license.txt for further information.
#
#*************************************************************#
#*************************************************************#
#
# DEMO directory Makefile
#
# Author: Mark Hayden, 8/96
#
#*************************************************************#
ENSROOT = ..
include $(ENSROOT)/mk/preamble.mk
include $(ENSROOT)/mk/config.mk
include $(ENSROOT)/mk/ocaml.mk
#*************************************************************#
DEMOS	= mtalk$(EXE) rand$(EXE) fifo$(EXE) perf$(EXE) \
	  gossip$(EXE) ensemble$(EXE) groupd$(EXE)
OBJS	= mtalk.cmo rand.cmo fifo.cmo perf.cmo gossip.cmo \
	  lensemble.cmo groupd.cmo 
OPTOBJS = mtalk.cmx rand.cmx fifo.cmx perf.cmx gossip.cmx \
	  lensemble.cmx groupd.cmx
EXEC	= _exec-$(PLATFORM)$(EXE)
#*************************************************************#
#PROFILE = -ccopt -p
#*************************************************************#

.SUFFIXES: .ml .cmo .cmx .mli .cmi
.mli.cmi:
	ocamlc -c -I $(ENSROOT)/lib $<
.ml.cmo:
	ocamlc -c -I $(ENSROOT)/lib $<
.ml.cmx:
	ocamlopt -c $(PROFILE) -I $(ENSROOT)/lib $<

#*************************************************************#

all: bytecode $(DEMOS)

# Make stuff in subdirectories too
everything: all
	cd tk ; make
	cd life ; make

bytecode: $(OBJS) $(ENSCONFDEP)
	$(RM) $(EXEC)
	ocamlc -o $(EXEC) -g $(LIBSYS) $(ENSCONF) $(OBJS)

#	ocamlc -o $(EXEC) -g $(LIBSYS) $(ENSCONF) $(CRYPTO_LINK) $(OBJS)
#*************************************************************#
# Standard demos.  We link/copy the _exec program to the names
# of the various demos.  It's all the same executable, which
# does different things depending on its name.  This is a
# hack, but worth the savings in link time.

gossip$(EXE): $(EXEC)
	$(RM) gossip$(EXE)
	$(LN) $(EXEC) gossip$(EXE)

groupd$(EXE): $(EXEC)
	$(RM) groupd$(EXE)
	$(LN) $(EXEC) groupd$(EXE)

mtalk$(EXE): $(EXEC)
	$(RM) mtalk$(EXE)
	$(LN) $(EXEC) mtalk$(EXE)

rand$(EXE): $(EXEC)
	$(RM) rand$(EXE)
	$(LN) $(EXEC) rand$(EXE)

fifo$(EXE): $(EXEC)
	$(RM) fifo$(EXE)
	$(LN) $(EXEC) fifo$(EXE)

perf$(EXE): $(EXEC)
	$(RM) perf$(EXE)
	$(LN) $(EXEC) perf$(EXE)

ensemble$(EXE): $(EXEC)
	$(RM) ensemble$(EXE)
	$(LN) $(EXEC) ensemble$(EXE)

#*************************************************************#

clean:
	$(RM) *~ .*~ *.cm* *.o .err TAGS core gmon.out
	$(RM) $(DEMOS) hot_test$(EXE) _exec*

realclean: clean

depend:
	ocamldep -I ../lib *.ml* > $(DEPEND)

include .depend

#*************************************************************#
# Make different versions of the demos

socket: socketexec $(DEMOS)
opt: optexec $(DEMOS)
socketopt: socketoptexec $(DEMOS)

socketexec: $(OBJS) $(ENSCONFDEP_skt)
	$(RM) $(EXEC)
	ocamlc -o $(EXEC) $(LIBSYS) $(ENSCONF_skt) $(OBJS)

#*************************************************************#

include $(ENSROOT)/mk/ocamlopt.mk

include $(ENSROOT)/mk/ocaml.mk

optexec: $(OPTOBJS)
	$(RM) $(EXEC)
	ocamlopt -o $(EXEC) $(LIBSYS)		\
	  unix.cmxa -cclib $(LIBCUNIX)		\
	  ../lib/usocket-$(PLATFORM).cmxa	\
	  ../lib/libens-$(PLATFORM).cmxa $(OPTOBJS)

socketoptexec: $(OPTOBJS) ../lib/socket-$(PLATFORM).cmxa $(LIBCSOCK)
	$(RM) $(EXEC)
	ocamlopt -o $(EXEC) $(LIBSYS)	\
	  unix.cmxa -cclib $(LIBCUNIX)	\
	  ../lib/socket-$(PLATFORM).cmxa -cclib $(LIBCSOCK) \
	  ../lib/libens-$(PLATFORM).cmxa $(OPTOBJS)

#*************************************************************#
