#*************************************************************#
#
#   Ensemble, (Version 0.40)
#   Copyright 1997 Cornell University
#   All rights reserved.
#
#   See ensemble/doc/license.txt for further information.
#
#*************************************************************#
# Makefile for Maestro/C++ interface and Maestro demos

ENSLIB = ../lib

PLATFORM = $(MACHTYPE)-$(OSTYPE)
LIBHOT	= libhot-$(PLATFORM).a
LIBMAE	= libmae-$(PLATFORM).a
#CFLAGS	= -c -g -I$(ENSLIB) -I$(PURIFY_HOME)
CFLAGS	= -c -g -I$(ENSLIB) 

#GTHREADS_sparc-sunos4 = /usr/local/lib
GTHREADS_sparc-sunos4 = /usr/u/hayden/lib/$(PLATFORM)
GTHREADS = $(GTHREADS_$(PLATFORM))

LDFLAGS_sparc-solaris 	= -lthread -lposix4 -lsocket -lnsl -ltermcap -lm
LDFLAGS_sparc-sunos4	= -L$(GTHREADS) -lgthreads -lmalloc -ltermcap -lm
#LDFLAGS_i386-linux	= -g -lgthreads -lmalloc -ltermcap -lm
LDFLAGS_i386-linux	= -g -lgthreads -lmalloc -ltermcap -lm
LDFLAGS_alpha-OSF1      = -lrt -lpthreads -lmach -lexc -lc_r -lm -ltermcap -taso
LDFLAGS_rs6000-aix	= -lpthreads -lm -termcap

LD_MACHDEP = $(LDFLAGS_$(PLATFORM))
LDFLAGS	= $(LD_MACHDEP)

CC	= gcc
CCC	= g++

# Set this to your purify location
PURIFY_HOME_sparc-solaris = /opts/pure/purify-3.2-solaris2
PURIFY_HOME = $(PURIFY_HOME_$(PLATFORM))

PURIFY_sparc-solaris = 	$(PURIFY_HOME)/purify 			\
			-cache-dir=/usr/u/alexey/tmp 		\
			-threads=yes -windows=no -g++=yes	\
			-log-file=out 				\
			-chain-length=15

PURIFY_LIB = $(PURIFY_HOME)/purify_stubs.a
PURIFY = $(PURIFY_$(PLATFORM))

.SUFFIXES: .C .c .o
.C.o:
	$(CCC) $(CFLAGS) $<
.c.o:
	$(CC) $(CFLAGS) $<

MAESTRO_OBJ = 	Maestro_Types.o		\
		Maestro_GroupMember.o	\
		Maestro_ClSv.o		\
		Maestro_CSX.o

SINGLE_THREADED_TEST = maestro_test
MULTI_THREADED_TEST = maestro_test_threads


all: $(SINGLE_THREADED_TEST) $(MULTI_THREADED_TEST)

$(LIBMAE): $(ENSLIB)/$(LIBHOT) $(MAESTRO_OBJ)
	$(RM) $(LIBMAE) libtmp.a
	cp $(ENSLIB)/$(LIBHOT) libtmp.a
	ar r libtmp.a $(MAESTRO_OBJ)
	ranlib libtmp.a
	mv libtmp.a $(LIBMAE)
	cp $(LIBMAE) $(ENSLIB)/$(LIBMAE)
	rm -f $(ENSLIB)/Maestro_*.h
	cp Maestro_*.h $(ENSLIB)
	chmod 444 $(ENSLIB)/Maestro_*.h

$(SINGLE_THREADED_TEST): $(LIBMAE) $(SINGLE_THREADED_TEST).o
	$(CCC) -o $(SINGLE_THREADED_TEST) $(SINGLE_THREADED_TEST).o \
	$(LIBMAE) $(LDFLAGS)

$(MULTI_THREADED_TEST): $(LIBMAE) $(MULTI_THREADED_TEST).o
	$(CCC) -o $(MULTI_THREADED_TEST) $(MULTI_THREADED_TEST).o \
	$(LIBMAE) $(LDFLAGS)

pur_$(SINGLE_THREADED_TEST): $(LIBMAE) $(SINGLE_THREADED_TEST).o
	$(PURIFY) $(CCC) -o pur_$(SINGLE_THREADED_TEST) \
	$(SINGLE_THREADED_TEST).o $(LIBMAE) $(PURIFY_LIB) $(LDFLAGS)

pur_$(MULTI_THREADED_TEST): $(LIBMAE) $(MULTI_THREADED_TEST).o
	$(PURIFY) $(CCC) -o pur_$(MULTI_THREADED_TEST) \
	$(MULTI_THREADED_TEST).o $(LIBMAE) $(PURIFY_LIB) $(LDFLAGS)

clean:
	$(RM) *.o *~ .*~ libmae* libtmp.a \
	$(MULTI_THREADED_TEST) pur_$(MULTI_THREADED_TEST) \
	$(SINGLE_THREADED_TEST) pur_$(SINGLE_THREADED_TEST)

electra: all
	cd ../electra ; g++ -o electra *.o libelectra.a libmaestroAd.a ../maestro/libmae-i386-linux.a -lelf /usr/local/lib/libgthreads.a /usr/local/lib/libmalloc.a -ltermcap -lm

depend:
	g++ -I ../lib -MM *.C >.err
	mv .err .depend

include .depend
