############################################################################
#
#  Program:         ScaLAPACK
#
#  Module:          Makefile
#
#  Purpose:         PB-BLAS Sources Makefile
#
#  Creation date:   March 20, 1995
#
#  Modified:
#
#  Send bug reports, comments or suggestions to scalapack@cs.utk.edu
#
############################################################################

include ../../../../SLmake.inc

############################################################################
#  This is the makefile to create a library for the PBBLAS.
#  The files are grouped as follows:
#
#      ALLPBBLAS -- Auxiliary routines for Level 2 and 3 PBBLAS
#
#       PBSBLAS2 -- Single precision real PBBLAS2 routines
#       PBCBLAS2 -- Single precision complex PBBLAS2 routines
#       PBDBLAS2 -- Double precision real PBBLAS2 routines
#       PBZBLAS2 -- Double precision complex PBBLAS2 routines
#
#       PBSBLAS3 -- Single precision real PBBLAS3 routines
#       PBCBLAS3 -- Single precision complex PBBLAS3 routines
#       PBDBLAS3 -- Double precision real PBBLAS3 routines
#       PBZBLAS3 -- Double precision complex PBBLAS3 routines
#
#  The library can be set up to include routines for any combination
#  of the four precisions.  First, modify the ../../SLmake.inc file
#  definitions to match your compiler and the options to be used.
#  Then to create or add to the library, enter make followed by one or
#  more of the precisions desired.  Some examples:
#       make single
#       make single complex
#       make single double complex complex16
#  Alternatively, the command
#       make
#  without any arguments creates a library of all four precisions.
#  The library is combined with the PBLAS library and is called
#       pblas_$(plat).a 
#  (see ../../SLmake.inc for the definition of $(plat).
#
#  To remove the object files after the library is created, enter
#       make clean
#  To force the source files to be recompiled, enter, for example,
#       make single FRC=FRC
#
############################################################################

all: single double complex complex16

#---------------------------------------------------------------------
#  The following line defines auxiliary routines needed by both the
#  Level 2 and Level 3 BLAS.  Comment it out only if you already have
#  both the Level 2 and 3 PBBLAS.
#---------------------------------------------------------------------
ALLPBBLAS  = pxerbla.o
$(ALLPBBLAS) : $(FRC)

PBSBLASAUX = pbsdzero.o pbsdzro1.o pbslacp1.o pbslacpz.o pbsmatadd.o \
  pbstrad1.o pbstradd.o pbstrget.o pbstrsrt.o pbstrst1.o pbsvecadd.o
$(PBSBLASAUX) : $(FRC)

PBCBLASAUX = pbcdzero.o pbcdzro1.o pbclacp1.o pbclacpz.o pbcmatadd.o \
  pbctrad1.o pbctradd.o pbctrget.o pbctrsrt.o pbctrst1.o pbcvecadd.o 
$(PBCBLASAUX) : $(FRC)

PBDBLASAUX =  pbddzero.o pbddzro1.o pbdlacp1.o pbdlacpz.o pbdmatadd.o \
   pbdtrad1.o pbdtradd.o pbdtrget.o pbdtrsrt.o pbdtrst1.o pbdvecadd.o
$(PBDBLASAUX) : $(FRC)

PBZBLASAUX = pbzdzero.o pbzdzro1.o pbzlacp1.o pbzlacpz.o pbzmatadd.o \
  pbztrad1.o pbztradd.o pbztrget.o pbztrsrt.o pbztrst1.o pbzvecadd.o 
$(PBZBLASAUX) : $(FRC)

#---------------------------------------------------------
#  Comment out the next 4 definitions if you already have
#  the Level 2 PBBLAS.
#---------------------------------------------------------
PBSBLAS2 = pbsgemv.o pbsger.o pbssymv.o pbssyr.o pbssyr2.o \
          pbstrmv.o pbstrnv.o pbstrsv.o
$(PBSBLAS2): $(FRC)

PBCBLAS2 = pbcgemv.o pbcgerc.o pbcgeru.o pbchemv.o pbcher.o \
          pbcher2.o pbctrmv.o pbctrnv.o pbctrsv.o
$(PBCBLAS2): $(FRC)

PBDBLAS2 = pbdgemv.o pbdger.o pbdsymv.o pbdsyr.o pbdsyr2.o \
          pbdtrmv.o pbdtrnv.o pbdtrsv.o
$(PBDBLAS2): $(FRC)

PBZBLAS2 = pbzgemv.o pbzgerc.o pbzgeru.o pbzhemv.o pbzher.o \
          pbzher2.o pbztrmv.o pbztrnv.o pbztrsv.o
$(PBZBLAS2): $(FRC)

#---------------------------------------------------------
#  Comment out the next 4 definitions if you already have
#  the Level 3 PBBLAS.
#---------------------------------------------------------
PBSBLAS3 = pbsgemm.o pbssymm.o pbssyr2k.o pbssyrk.o pbstran.o \
          pbstrmm.o pbstrsm.o
$(PBSBLAS3): $(FRC)

PBCBLAS3 = pbcgemm.o pbchemm.o pbcher2k.o pbcherk.o pbcsymm.o \
          pbcsyr2k.o pbcsyrk.o pbctran.o pbctrmm.o pbctrsm.o
$(PBCBLAS3): $(FRC)

PBDBLAS3 = pbdgemm.o pbdsymm.o pbdsyr2k.o pbdsyrk.o pbdtran.o \
          pbdtrmm.o pbdtrsm.o
$(PBDBLAS3): $(FRC)

PBZBLAS3 = pbzgemm.o pbzhemm.o pbzher2k.o pbzherk.o pbzsymm.o \
          pbzsyr2k.o pbzsyrk.o pbztran.o pbztrmm.o pbztrsm.o
$(PBZBLAS3): $(FRC)

PBSBLAS = $(ALLPBBLAS) $(PBSBLASAUX) $(PBSBLAS2) $(PBSBLAS3)
PBCBLAS = $(ALLPBBLAS) $(PBCBLASAUX) $(PBCBLAS2) $(PBCBLAS3)
PBDBLAS = $(ALLPBBLAS) $(PBDBLASAUX) $(PBDBLAS2) $(PBDBLAS3)
PBZBLAS = $(ALLPBBLAS) $(PBZBLASAUX) $(PBZBLAS2) $(PBZBLAS3)

single: $(PBSBLAS)
	$(ARCH) $(ARCHFLAGS) $(PBLASLIB) $(PBSBLAS)
	$(RANLIB) $(PBLASLIB)

double: $(PBDBLAS)
	$(ARCH) $(ARCHFLAGS) $(PBLASLIB) $(PBDBLAS)
	$(RANLIB) $(PBLASLIB)

complex: $(PBCBLAS)
	$(ARCH) $(ARCHFLAGS) $(PBLASLIB) $(PBCBLAS)
	$(RANLIB) $(PBLASLIB)

complex16: $(PBZBLAS)
	$(ARCH) $(ARCHFLAGS) $(PBLASLIB) $(PBZBLAS)
	$(RANLIB) $(PBLASLIB)

FRC:
	@FRC=$(FRC)

clean :
	rm -f *.o

.f.o : ; $(F77) -c $(F77FLAGS) $*.f
