#
#   COPYRIGHT U.S. GOVERNMENT 
#   
#   This software is distributed without charge and comes with
#   no warranty.
#
#   Please feel free to send questions, comments, and problem reports
#   to prism@super.org. 
#
#
#   PURPOSE
#   =======
#   Makefile for creating BiMMeR matrix multiply library

##### User configurable options #####

ARCH        = $(PRISM_MPI_ARCH)
COMM        = $(PRISM_MPI_COMM)

include $(PRISM_MAKE_INCLUDE)Make-$(ARCH)-$(COMM).include
### End User configurable options ###

PRISM_INCLUDE = -I../include

CFLAGS = $(PRISM_INCLUDE) $(MPI_INCLUDE) $(OTHER_DEFINES) $(PRISM_DEFINES)
CFLAGS_MC = $(CFLAGS) $(OPTFLAGS) -DPRISM_MPI_COLL
CFLAGS_MC_TEST = $(CFLAGS) $(OPTFLAGS) -DPRISM_TIME -DPRISM_MPI_COLL
CFLAGS_PC = $(CFLAGS) $(OPTFLAGS)
CFLAGS_PC_TEST = $(CFLAGS) $(OPTFLAGS) -DPRISM_TIME

LIB_PATH_O = ../lib/$(ARCH)/$(COMM)

LIB_MC = $(LIB_PATH_O)/libmmm.a
LIB_MC_TEST = $(LIB_PATH_O)/libmmmt.a
LIB_PC = $(LIB_PATH_O)/libmmp.a
LIB_PC_TEST = $(LIB_PATH_O)/libmmpt.a

OBJS_MC = prism_v_bimmer.o_m prism_v_bca_rb.o_m prism_v_bca_rc.o_m \
	  prism_v_bcb_rc.o_m prism_v_ra_bcb.o_m prism_v_ra_bcc.o_m \
          prism_v_rb_bcc.o_m prism_v_dlacpy.o prism_v_scl_mtrx.o_m
OBJS_MC_TEST = prism_v_bimmer.o_mt prism_v_bca_rb.o_mt prism_v_bca_rc.o_mt \
	prism_v_bcb_rc.o_mt prism_v_ra_bcb.o_mt prism_v_ra_bcc.o_mt \
	prism_v_rb_bcc.o_mt prism_v_dlacpy.o prism_v_scl_mtrx.o_mt
OBJS_PC = prism_v_bimmer.o_p prism_v_bca_rb.o_p prism_v_bca_rc.o_p \
	  prism_v_bcb_rc.o_p prism_v_ra_bcb.o_p prism_v_ra_bcc.o_p \
          prism_v_rb_bcc.o_p prism_v_dlacpy.o prism_v_scl_mtrx.o_p
OBJS_PC_TEST = prism_v_bimmer.o_pt prism_v_bca_rb.o_pt prism_v_bca_rc.o_pt \
	prism_v_bcb_rc.o_pt prism_v_ra_bcb.o_pt prism_v_ra_bcc.o_pt \
	prism_v_rb_bcc.o_pt prism_v_dlacpy.o prism_v_scl_mtrx.o_pt

.SUFFIXES: .c .f .o .o_m .o_mt .o_p .o_pt

default: mc
mc: $(LIB_MC)
mctest: $(LIB_MC_TEST)
pc: $(LIB_PC)
pctest: $(LIB_PC_TEST)
all: mc mctest pc pctest

.f.o:
	$(F77) $(OPTFLAGS) -c $?

.c.o_m:
	$(CC) $(CFLAGS_MC) -c $?
	mv $*.o $@
.c.o_mt:
	$(CC) $(CFLAGS_MC_TEST) -c $?
	mv $*.o $@
.c.o_p:
	$(CC) $(CFLAGS_PC) -c $?
	mv $*.o $@
.c.o_pt:
	$(CC) $(CFLAGS_PC_TEST) -c $?
	mv $*.o $@

$(LIB_MC): $(LIB_PATH_O) $(OBJS_MC) 
	-$(AR) $@ $(OBJS_MC)
	$(RANLIB) $@
$(LIB_MC_TEST): $(LIB_PATH_O) $(OBJS_MC_TEST) 
	-$(AR) $@ $(OBJS_MC_TEST) 
	$(RANLIB) $@
$(LIB_PC): $(LIB_PATH_O) $(OBJS_PC) 
	-$(AR) $@ $(OBJS_PC) 
	$(RANLIB) $@
$(LIB_PC_TEST): $(LIB_PATH_O) $(OBJS_PC_TEST) 
	-$(AR) $@ $(OBJS_PC_TEST)
	$(RANLIB) $@

$(LIB_PATH_O):
	mkdir -p $(LIB_PATH_O)

clean:
	/bin/rm -f *.o *.o_m *.o_mt *.o_p *.o_pt $(LIB_MC) $(LIB_MC_TEST) $(LIB_PC) $(LIB_PC_TEST) *~

cleanobjs:
	/bin/rm -f *.o *.o_m *.o_mt *.o_p *.o_pt
