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

MAKE                 = make --no-print-directory

MPI_CC               = /home/g5k/paradiseo/mpich2//bin/mpicc
MPI_F77              = /home/g5k/paradiseo/mpich2//bin/mpif77
MPI_CLINKER          = $(MPI_CC)
MPI_FLINKER          = $(MPI_F77)

DEBUG_LIBS           = 
MPI_INC              = 
MPI_LIBS             = 
CFLAGS               = 
FFLAGS               = 
MPE_INCDIR           = /home/g5k/paradiseo/mpich2//include
MPE_LIBDIR           = /home/g5k/paradiseo/mpich2//lib
F2CMPI_LIBS          = -lmpe_f2cmpi
COLLCHK_LIBS         = -L$(MPE_LIBDIR) -lmpe_collchk $(MPI_LIBS)
COLLCHK_FLIBS        = -L$(MPE_LIBDIR) \
                       $(F2CMPI_LIBS) -lmpe_collchk \
                       $(MPI_LIBS)

C_INCS               = -I$(MPE_INCDIR) $(MPI_INC)
F_INCS               = -I$(MPE_INCDIR) $(MPI_INC)
LDFLAGS              = 
MPE_BUILD_FORTRAN2C  = yes
RM                   = rm
MPE_OUTFILE          = mpe2_collchk_test.txt

#### End User configurable options ###

srcdir        = /home/g5k/paradiseo/mpich2-1.0.3/src/mpe2/src/collchk/test

CC_FLAGS      = $(CFLAGS) $(C_INCS) $(MPE_COPTS)
FC_FLAGS      = $(FFLAGS) $(F_INCS) $(MPE_FOPTS)
CC_LDFLAGS    = $(LDFLAGS) $(CFLAGS) $(MPE_LDOPTS)
FC_LDFLAGS    = $(LDFLAGS) $(FFLAGS) $(MPE_LDOPTS)

VPATH=.:$(srcdir)

.SUFFIXES: .c .f .o 

C_SRC         = wrong_composite.c wrong_scatterv.c \
                wrong_int_byte.c wrong_root.c \
                composite.c scatterv.c \
                time_bcast.c time_allreduce.c \
                time_alltoallv.c time_alltoallv0.c
F_SRC         = wrong_reals.f
C_OBJS        = $(C_SRC:.c=.o)
F_OBJS        = $(F_SRC:.f=.o)
C_EXECS       = $(C_OBJS:.o=)

OPT_C_EXECS   = time_bcast_nochk time_allreduce_nochk \
                time_alltoallv0_nochk time_alltoallv_nochk

OPT_F_EXECS   = wrong_reals wrong_reals_nochk

.c.o:
	$(MPI_CC) $(CC_FLAGS) -c $<

.f.o:
	$(MPI_F77) $(FC_FLAGS) -c $<

.o:
	$(MPI_CLINKER) $(CC_LDFLAGS) -o $@ $< $(COLLCHK_LIBS)

time_bcast_nochk: time_bcast.o
	$(MPI_CLINKER) $(CC_LDFLAGS) -o $@ $? $(MPI_LIBS)

time_allreduce_nochk: time_allreduce.o
	$(MPI_CLINKER) $(CC_LDFLAGS) -o $@ $? $(MPI_LIBS)

time_alltoallv_nochk: time_alltoallv.o
	$(MPI_CLINKER) $(CC_LDFLAGS) -o $@ $? $(MPI_LIBS)

time_alltoallv0_nochk: time_alltoallv0.o
	$(MPI_CLINKER) $(CC_LDFLAGS) -o $@ $? $(MPI_LIBS)

wrong_reals: wrong_reals.o
	$(MPI_FLINKER) $(FC_LDFLAGS) -o $@ $? $(COLLCHK_FLIBS)

wrong_reals_nochk: wrong_reals.o
	$(MPI_FLINKER) $(FC_LDFLAGS) -o $@ $? $(MPI_LIBS)

default: $(C_OBJS) $(C_EXECS) $(OPT_C_EXECS)

linktest: linktest_C

linktest_C:
	@-echo ; \
	echo -n "*** Link C program with the MPI collective/datatype checking library ..... " ; \
	$(RM) -f wrong_int_byte ; \
	$(MAKE) wrong_int_byte > $(MPE_OUTFILE) 2>&1 ; \
	if test -x wrong_int_byte ; then \
	    echo "Yes." ; \
	    $(RM) -f wrong_int_byte ; \
	else \
	    echo "No." ; \
	    echo "    The failed command: " ; \
	    cat $(MPE_OUTFILE) ; \
	fi ; \
	$(RM) -f $(MPE_OUTFILE)
	@-echo ; $(MAKE) clean

linktest_F77:
	@-if [ "$(MPE_BUILD_FORTRAN2C)" = "yes" ] ; then \
	    echo ; \
	    echo -n "*** Link F77 program with the MPI collective/datatype checking library ... " ; \
	    $(RM) -f wrong_reals ; \
	    $(MAKE) wrong_reals > $(MPE_OUTFILE) 2>&1 ; \
	    if test -x wrong_reals ; then \
	        echo "Yes." ; \
	        $(RM) -f wrong_reals ; \
	    else \
	        echo "No." ; \
	        echo "    The failed command: " ; \
	        cat $(MPE_OUTFILE) ; \
	    fi ; \
	    $(RM) -f $(MPE_OUTFILE) ; \
	    $(MAKE) clean ; \
	    echo ; \
	  fi

clean:
	@-$(RM) -f $(MPE_OUTFILE)
	@-$(RM) -f $(C_OBJS) $(F_OBJS) *.o
	@-$(RM) -f $(C_EXECS) $(OPT_C_EXECS) $(OPT_F_EXECS)

distclean: clean
	@-$(RM) -f Makefile
