#
# Declaration de l'extension
.SUFFIXES:.f90

#
# Variables PVM
PVMINCLUDE=     $(PVM_ROOT)/include
PVMLIB  =       $(PVM_ROOT)/lib/$(PVM_ARCH)

# Compilateur et editeur de liens
FC         = xlf90_r
FLD        = $(FC)

RM         = /usr/bin/rm -f

#
# COMPILATION
#

# Options d'optimisation
OLEV       = -qhot -O3 -qtune=auto -qarch=auto -qcache=auto
FOPT       = -qstrict

FMAX       = -qipa
FMAX       =

# Options de parallelisation
OPAR       =

# Options de deboguage
ODEB       = -qnooptimize
FDEB       = -qcheck -qdbg -qextchk -qfullpath -qundef \
	-qflttrap=:ov:und:zero:inv:en -qinitauto=FF

# Options de portage
OPRT       = -qautodbl=dbl4 -qdpc=e
OPRT       = 

# Options d'entrees / sorties du compilateur
OES        = -qfixed=132 -qsuffix=f=f90 -I$(PVMINCLUDE)

# Options de listing
OLST       = -qlistopt -qreport=hotlist -qsource
OLST       =

# Options de profilage
PROF       = -pg -qdbg -qfullpath
PROF       =

# Options compilation
FFLAGS     = $(OLEV) $(FOPT) $(FMAX) $(OPAR) $(OPRT) $(PROF) $(OES) $(OLST)

#
# EDITION DES LIENS
#

# Librairies Fortran
LIBS      = -lmass -lmassv -lessl -lm -L$(PVMLIB) -lpvm3  -lfpvm3 -lgpvm3

# Option optimisation
LDLEV     = $(OLEV)

# Option de portage
LDREN     = -brename:.flush,.flush_ -brename:.etime,.etime_
LDREN     =

# Options memoire
LDMEM     = -bmaxdata:0x40000000 -blpdata

# Options editions des liens
LDFLAGS   = $(LDLEV) $(LDMEM) $(LDREN)


# Includes Fortran
FHDRS      =

# objects Fortran
MOBJS      = modscal.o prod_mst.o
SOBJS      = modscal.o prod_slv.o

# compilation Fortran
.f90.o:
	$(FC) $(FFLAGS) $< -c

# linking
all:  mst slv

EXECM = prod_mst.exe
mst:    $(MOBJS)
	$(FLD) $(LDFLAGS) $(MOBJS) $(LIBS) -o $(EXECM)

EXECS = prod_slv.exe
slv:    $(SOBJS)
	$(FLD) $(LDFLAGS) $(SOBJS) $(LIBS) -o $(EXECS)

clean:
	$(RM) $(MOBJS) $(SOBJS) $(EXECS) $(EXECM) *.mod


###
modscal.o: modscal.f90
	$(FC) -c $(FFLAGS) modscal.f90
prod_mst.o: prod_mst.f90 modscal.o
	$(FC) -c $(FFLAGS) prod_mst.f90
prod_slv.o: prod_slv.f90 modscal.o
	$(FC) -c $(FFLAGS) prod_slv.f90

