CC       = mpic++
SNPSRC   = ../snpsrc
EMMSRC   = ../src
USRSRC   = ../svfx
ISCL     = ../lib/libscl/gpp
LSCL     = ../lib/libscl/gpp
ISNP     = ../lib/libsnp/gpp
LSNP     = ../lib/libsnp/gpp
ISMM     = ../lib/libsmm/gpp
LSMM     = ../lib/libsmm/gpp
CFLAGS   = -O2 -Wall -c -I. \
	   -I$(USRSRC) -I$(EMMSRC) -I$(SNPSRC)  -I$(ISMM) -I$(ISNP) -I$(ISCL)
LFLAGS   = -L$(LSMM) -lsmm -L$(LSNP) -lsnp -L$(LSCL) -lscl -lm 

HEADERS  = ./pathname.h $(ISNP)/libsnp.h $(ISMM)/libsmm.h \
	$(EMMSRC)/emm_base.h $(EMMSRC)/emm.h $(USRSRC)/emmusr.h \
	$(SNPSRC)/snp_base.h $(SNPSRC)/snp.h $(SNPSRC)/snpusr.h \
	$(ISCL)/libscl.h
	
OBJECTS = emmcode1.o emmcode2.o emmcode3.o emmusr.o\
	  snpcode1.o snpcode2.o snpcode3.o snpusr.o

LIBRARIES = libscl.a libsnp.a libsmm.a

PROGRAMS = emm_mpi 

all :  $(LIBRARIES) $(PROGRAMS)

libscl.a :
	make -C $(LSCL)

libsnp.a :
	make -C $(LSNP)

libsmm.a :
	make -C $(LSMM)

emm_mpi : emm_mpi.o $(OBJECTS) $(HEADERS) $(LIBRARIES)
	$(CC) -o emm_mpi emm_mpi.o $(OBJECTS) $(LFLAGS)

pathname.h : 
	/bin/echo "#define PATHNAME \"$(PWD)\"" > pathname.h

emm_mpi.o : $(EMMSRC)/emm_mpi.cpp $(HEADERS)
	$(CC) $(CFLAGS) $(EMMSRC)/emm_mpi.cpp

emmcode1.o : $(EMMSRC)/emmcode1.cpp $(HEADERS)
	$(CC) $(CFLAGS) $(EMMSRC)/emmcode1.cpp

emmcode2.o : $(EMMSRC)/emmcode2.cpp $(HEADERS)
	$(CC) $(CFLAGS) $(EMMSRC)/emmcode2.cpp

emmcode3.o : $(EMMSRC)/emmcode3.cpp $(HEADERS)
	$(CC) $(CFLAGS) $(EMMSRC)/emmcode3.cpp

emmusr.o : $(USRSRC)/emmusr.cpp $(HEADERS)
	$(CC) $(CFLAGS) $(USRSRC)/emmusr.cpp

snpcode1.o : $(SNPSRC)/snpcode1.cpp $(HEADERS)
	$(CC) $(CFLAGS) $(SNPSRC)/snpcode1.cpp

snpcode2.o : $(SNPSRC)/snpcode2.cpp $(HEADERS)
	$(CC) $(CFLAGS) $(SNPSRC)/snpcode2.cpp

snpcode3.o : $(SNPSRC)/snpcode3.cpp $(HEADERS)
	$(CC) $(CFLAGS) $(SNPSRC)/snpcode3.cpp

snpusr.o : $(SNPSRC)/snpusr.cpp $(HEADERS)
	$(CC) $(CFLAGS) $(SNPSRC)/snpusr.cpp

clean	:
	make -C $(LSCL) clean
	make -C $(LSNP) clean
	make -C $(LSMM) clean
	rm -f *.o core core.*

veryclean	:
	make -C $(LSCL) veryclean
	make -C $(LSNP) veryclean
	make -C $(LSMM) veryclean
	rm -f *.o core core.*
	rm -f $(PROGRAMS)

dirclean	:
	rm -f *.o core core.*
	rm -f $(PROGRAMS)

