# $Id: Makefile.cpi.in,v 1.9 2009/03/10 21:15:29 rkufrin Exp $

EXE		= cpi cpi-pthreads
PSEXE		= cpi-pthreads-ps
OMPEXE		= cpi-omp cpi-ompf
PSOMPEXE	= cpi-omp-ps
MPIEXE		= cpi-mpi cpi-mpif
JAVAEXE		= CalcPi.class

CC		= icc 
CFLAGS		= -O3 -g
F77		= ifc 
FFLAGS		= -O3 -w95 -fpp2 -W1 -g
FLIBS		= -Vaxlib
JAVAC		= javac
MPICC		= mpicc
MPIF77		= mpif77


OMPFLAGS	= -openmp
PERFSUITE	= /usr
PAPI		= 

JARCHIVES	= $(PERFSUITE)/share/perfsuite/javalib/pshwpc.jar

.SUFFIXES: .java .class

.java.class:
	$(JAVAC) -classpath .:$(JARCHIVES) $<

base: $(EXE)
ps: $(PSEXE)
mpi: $(MPIEXE)
omp: $(OMPEXE)
psomp: $(PSOMPEXE)
java: $(JAVAEXE)

all: base ps mpi omp psomp java

cpi: cpi.o
	$(CC) -o $@ cpi.o 

cpi-pthreads: cpi-pthreads.o
	$(CC) -o $@ cpi-pthreads.o -lpthread

cpi-pthreads-ps: cpi-pthreads-ps.o
	$(CC) -o $@ cpi-pthreads-ps.o -L$(PERFSUITE)/lib -L$(PAPI)/lib \
		-lperfsuite_r -lpshwpc_r -lpapi -lpthread \
		-Wl,-rpath,$(PERFSUITE)/lib -Wl,-rpath,$(PAPI)/lib

cpi.o: cpi-pthreads.c
	$(CC) -c $(CFLAGS) -o cpi.o cpi-pthreads.c

cpi-pthreads.o: cpi-pthreads.c
	$(CC) -c $(CFLAGS) -D_REENTRANT cpi-pthreads.c

cpi-pthreads-ps.o: cpi-pthreads.c
	$(CC) -c $(CFLAGS) -D_REENTRANT -DPSHWPC -I$(PERFSUITE)/include \
		-o cpi-pthreads-ps.o cpi-pthreads.c

cpi-omp: cpi-omp.o
	$(CC) -o $@ $(OMPFLAGS) cpi-omp.o

cpi-omp.o: cpi-omp.c
	$(CC) -c $(CFLAGS) $(OMPFLAGS) cpi-omp.c

cpi-omp-ps: cpi-omp-ps.o
	$(CC) -o $@ $(OMPFLAGS) cpi-omp-ps.o -L$(PERFSUITE)/lib -L$(PAPI)/lib \
		-lperfsuite_r -lpshwpc_r -lpapi \
		-Wl,-rpath,$(PERFSUITE)/lib -Wl,-rpath,$(PAPI)/lib

cpi-omp-ps.o: cpi-omp.c
	$(CC) -c $(CFLAGS) $(OMPFLAGS) -DPSHWPC -I$(PERFSUITE)/include \
		-o cpi-omp-ps.o cpi-omp.c

cpi-ompf: cpi-ompf.o
	$(F77) -o $@ $(OMPFLAGS) cpi-ompf.o $(FLIBS)

cpi-ompf.o: cpi-ompf.f
	$(F77) -c $(FFLAGS) $(OMPFLAGS) cpi-ompf.f

cpi-mpi: cpi-mpi.o
	$(MPICC) -o $@ cpi-mpi.o

cpi-mpi.o: cpi-mpi.c
	$(MPICC) -c cpi-mpi.c

cpi-mpif: cpi-mpif.o
	$(MPIF77) -o $@ cpi-mpif.o

cpi-mpif.o: cpi-mpif.f
	$(MPIF77) -c cpi-mpif.f

$(JAVAEXE): CalcPi.java

clean:
	/bin/rm -rf $(EXE) $(MPIEXE) $(OMPEXE) $(PSEXE) \
			*.class *.o *.xml core 
