####################################################################
#                                                                   #
# PARKBENCH Version 2.0                                             #
#                                                                   #
# November 10, 1995                                                 #
#                                                                   #
# University of Tennesee, Knoxville                                 #
# University of Southampton, United Kingdom                         #
#                                                                   #
#####################################################################
make.def =  ../conf/make.def
include $(make.def)

SHELL	=	/bin/sh
llowlevel =	Low_Level
lkernel =	$(LIBS_TO_MAKE)
lSPECIAL =	BLACS  BLAS
lallkernel =	PBLAS SCALAPACK TOOLS BLAS BLACS
lnpb.pvm =	MPI2PVM
lallT =		Low_Level.T PBLAS.T SCALAPACK.T TOOLS.T BLAS.T MPI2PVM.T
BLACS_Bmake 		= ../lib/BLACS/Bmake.inc
BLACS_Bmake_ARCH 	= ../lib/BLACS/BMAKES/Bmake.$(BLACS_ARCH)
BLACS_Bmake.mpi 	= ../lib/BLACS.MPI/Bmake.inc
BLACS_Bmake.mpi_ARCH 	= ../lib/BLACS.MPI/BMAKES/Bmake.MPI-$(BLACS_ARCH)
lall =          $(lallT:.T=) BLACS
lpvm =          Low_Level.pvm  BLACS.pvm  MPI2PVM.T
lmpi =          Low_Level.mpi  BLACS.mpi
lallcl =        $(lallT:.T=.cl)  BLACS.cl  BLACS.MPI.cl
lallclo =       $(lallT:.T=.clo) BLACS.clo BLACS.MPI.clo

###  For Kernels we will make always $(LIBS_TO_MAKE)!      ###
###  which you should specify in ParkBench/make.local.def  ###

default:        lowlevel $(LIBS_TO_MAKE)
Low_Level:	Low_Level.T
PBLAS:		PBLAS.T
SCALAPACK:	SCALAPACK.T
TOOLS:		TOOLS.T
BLACS:		BLACS.T
BLACS.T:	BLACS.pvm BLACS.mpi
BLAS:		BLAS.T
NPB.pvm MPI2PVM:	MPI2PVM.T

null:

all:  		$(lall)

lowlevel:	$(llowlevel)
Kernels:	$(lkernel)
Kernels.seq:	$(LIBS_TO_MAKE) #PBLAS SCALAPACK TOOLS BLAS
Kernels.pvm:	$(LIBS_TO_MAKE) #Kernels.seq BLACS.pvm
Kernels.mpi:	$(LIBS_TO_MAKE) #Kernels.seq BLACS.mpi
pvm:		$(lpvm)
mpi:		$(lmpi)

echo:
	@- echo ': '
	@- echo 'lall:        ' $(lall)
	@- echo 'llowlevel:   ' $(llowlevel)
	@- echo 'lkernel:     ' $(lkernel)
	@- echo 'lSPECIAL:    ' $(lSPECIAL)
	@- echo 'lallcl:      ' $(lallcl)
	@- echo 'lallclo:     ' $(lallclo)
	@- echo ': '


###  Declares how to make a single library  ###
$(lallT):	
	@ echo "building in $(@:.T=)"
	-  cd $(@:.T=); make
	@ echo "done building in $(@:.T=)"

Low_Level.seq:	
	@ echo "building in $(@:.seq=) seq"
	-  cd $(@:.seq=); make seq
	@ echo "done building in $(@:.seq=) seq"

Low_Level.pvm:	
	@ echo "building in $(@:.pvm=) pvm"
	-  cd $(@:.pvm=); make pvm
	@ echo "done building in $(@:.pvm=) pvm"

Low_Level.mpi:	
	@ echo "building in $(@:.mpi=) mpi"
	-  cd $(@:.mpi=); make mpi
	@ echo "done building in $(@:.mpi=) mpi"

# For now we use two BLACS directories for pvm and for mpi #
# BLACS stuff

$(BLACS_Bmake_ARCH):
	@ echo '   Bmake.$(BLACS_ARCH) for building BLACS not available !'
	@ echo '   Please create a suitable version by hand'
	@ echo '   and place ist in $(BLACS_Bmake_ARCH)'

$(BLACS_Bmake): $(BLACS_Bmake_ARCH)
	@ echo "BTOPdir="$(ParkBench_home)"/lib/BLACS" > Bmake.head
	@ echo "PVM_ROOT="$(PVM_ROOT) >> Bmake.head
	@ cat Bmake.head $(BLACS_Bmake_ARCH) > $(BLACS_Bmake)
	@ echo Bmake.$(BLACS_ARCH) copied for use as Bmake.inc for BLACS

BLACS.pvm BLACS.PVM.pvm: $(BLACS_Bmake)
	@ echo "building in $(@:.pvm=) for pvm"
	- cd $(@:.pvm=); make pvm $(BLACS_arg) COMMLIB=PVM
	@ echo "done building in $(@:.pvm=) for pvm"

$(BLACS_Bmake.mpi_ARCH):
	@ echo '   Bmake.MPI-$(BLACS_ARCH) for building BLACS not available !'
	@ echo '   Please create a suitable version by hand'
	@ echo '   and place ist in $(BLACS_Bmake.mpi_ARCH)'

$(BLACS_Bmake.mpi): $(BLACS_Bmake.mpi_ARCH)
	@ echo "BTOPdir="$(ParkBench_home)"/lib/BLACS.MPI" > Bmake.head
	@ echo "MPIINCdir ="$(MPI_INCDIR) >> Bmake.head
	@ echo "MPILIB ="$(MPI_LIBDIR) >> Bmake.head
	@ cat Bmake.head $(BLACS_Bmake.mpi_ARCH) > $(BLACS_Bmake.mpi)
	@ echo Bmake.MPI-$(BLACS_ARCH) copied for use as Bmake.inc for BLACS

BLACS.mpi BLACS.MPI.mpi: $(BLACS_Bmake.mpi)
	@ echo "building in $(@:.mpi=) for mpi"
	- cd $(@:.mpi=); make mpi $(BLACS_arg) COMMLIB=MPI
	@ echo "done building in $(@:.mpi=) for mpi"

###  Cleanup  ###

$(lallcl):
	- cd $(@:.cl=) ; make clean
clean:	$(lallcl)
	- rm -f *~ Bmake.head

$(lallclo): 
	- cd $(@:.clo=) ; make clobber
clobber: clean $(lallclo)
	- rm -f */*.a *~ 
	- rm -f BLACS/LIB/*-0.a
	- rm -f BLACS.MPI/LIB/*-0.a $(BLACS_Bmake) $(BLACS_Bmake.mpi)

