# $Id: Makefile.matvec,v 1.4 2008/03/30 17:59:48 rkufrin Exp $

# PerfSuite flags have to be tailored to your installation.
# Since this is a Fortran program, make sure that the PerfSuite
# library directory that you are linking with was configured and
# built with the Fortran compiler used by this Makefile.
# If not, you might experience link-time errors with unresolved symbols.

PERFSUITEDIR	= /usr/local/perfsuite
PERFSUITELIBDIR	= $(PERFSUITEDIR)/lib

# PAPI includes versions of most common Fortran name mangling styles
# in its library, so no need to tailor.

PAPIDIR		= /usr/local/papi

F77		= ifort
R4FLAGS		= 
R8FLAGS		= -r8

# Note that the vec_report option interferes with the mapping of
# symbol information to source code lines with (at least) the
# following combinations:
# Intel(R) Fortran Compiler for 32-bit applications, Version 7.0   Build 20030212Z
# GNU ld version 2.11.90.0.8 (with BFD 2.11.90.0.8)
# Linux version 2.4.7-10smp (bhcompile@stripples.devel.redhat.com) (gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98)) #1 SMP Thu Sep 6 17:09:31 EDT 2001

#FFLAGS		= -g -ip -O3 -opt_report -vec_report3 -xW -pad -sox
FFLAGS		= -g -ip -O2 -opt_report -xW -pad -sox 
LDFLAGS		=

PSFFLAGS	= -I$(PERFSUITEDIR)/include
PSLDFLAGS	= -L$(PERFSUITELIBDIR) -L$(PAPIDIR)/lib \
		    -lpshwpc -lperfsuite -lpapi

# The OpenMP flags are not currently used.
OMPFFLAGS	= -openmp -fpp2
OMPLDFLAGS	= -openmp

EXE	= matvec-r4 matvec-r8
PSEXE	= matvec-r4-ps matvec-r8-ps
OMPEXE	= matvec-r4-omp matvec-r8-omp

base: $(EXE)
ps:  $(PSEXE)
omp: $(OMPEXE)
all: $(EXE) $(PSEXE) $(OMPEXE)

matvec-r4: matvec-r4.o
	$(F77) -o $@ matvec-r4.o $(LDFLAGS)

matvec-r4.o: matvec.f
	$(F77) -c $(FFLAGS) $(R4FLAGS) -o matvec-r4.o matvec.f

matvec-r8: matvec-r8.o
	$(F77) -o $@ matvec-r8.o $(LDFLAGS)

matvec-r8.o: matvec.f
	$(F77) -c $(FFLAGS) $(R8FLAGS) -o matvec-r8.o matvec.f

matvec-r4-ps: matvec-r4-ps.o
	$(F77) -o $@ matvec-r4-ps.o $(LDFLAGS) $(PSLDFLAGS)

matvec-r4-ps.o: matvec-ps.f
	$(F77) -c $(FFLAGS) $(R4FLAGS) $(PSFFLAGS) -o matvec-r4-ps.o matvec-ps.f

matvec-r8-ps: matvec-r8-ps.o
	$(F77) -o $@ matvec-r8-ps.o $(LDFLAGS) $(PSLDFLAGS)

matvec-r8-ps.o: matvec-ps.f
	$(F77) -c $(FFLAGS) $(R8FLAGS) $(PSFFLAGS) -o matvec-r8-ps.o matvec-ps.f

matvec-r4-omp: matvec-r4-omp.o
	$(F77) -o $@ matvec-r4-omp.o $(LDFLAGS) $(OMPLDFLAGS)

matvec-r4-omp.o: matvec.f
	$(F77) -c $(FFLAGS) $(OMPFFLAGS) $(R4FLAGS) -o matvec-r4-omp.o matvec.f

matvec-r8-omp: matvec-r8-omp.o
	$(F77) -o $@ matvec-r8-omp.o $(LDFLAGS) $(OMPLDFLAGS)

matvec-r8-omp.o: matvec.f
	$(F77) -c $(FFLAGS) $(OMPFFLAGS) $(R8FLAGS) -o matvec-r8-omp.o matvec.f

clean:
	/bin/rm -f $(EXE) $(OMPEXE) $(PSEXE) *.o core *.xml
