PGI Fortran90+MPICH install questions on Scyld

Florent Calvayrac fcalvay at aviion.univ-lemans.fr
Wed Oct 10 05:22:08 EDT 2001


Hi

just make sure you recompile the source of the modified mpich1.2
given on Scyld's ftp site (beompi... according to your version of
Beowulf2)

do it twice with different installation prefixes
to get an mpicc using gcc and mpif90 using 
pgf90 (else, there is always a simple or
double underscore problem one way or another).

I include a modified Makefile for
beompi-1.0.14 below :




-- 
Florent Calvayrac                          | Tel : 02 43 83 26 26 
Laboratoire de Physique de l'Etat Condense | Fax : 02 43 83 35 18
UMR-CNRS 6087         | http://www.univ-lemans.fr/~fcalvay 
Universite du Maine-Faculte des Sciences   |
72085 Le Mans Cedex 9
-------------- next part --------------
# beompi -- wrapper package to build and patch MPICH for Beowulf

#
# versioning information
#
PKG_NAME = beompi
VERSION = 1
PATCHLEVEL = 0.14
BUILD_DATE = $(shell date +%D)
AUTHOR = "newt at scyld.com - modified for pgf90 by Florent.Calvayrac at univ-lemans.fr"

#
# installation directories
#
USRDIR = /usr/local
BINDIR = $(USRDIR)/bin
LIBDIR = $(USRDIR)/lib
INCDIR = $(USRDIR)/include
MANDIR = $(USRDIR)/man

#
# build-time helper directories
#
MPP_LDFLAGS = 		# place a '-L' here for non-standard mpprun libs
MPP_BUILDDIR = 		# place a dirname here to have mpi build mpprun

# top of build dir
TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)

.EXPORT_ALL_VARIABLES:

all: mpich-1.2.0 mpprun

.unpack: contrib_sources/mpich.tar.gz
	# unpack distribution sources from ANL
	tar -xvzf $^
	mv mpich-1.2.0/mpid/server mpich-1.2.0/mpid/server.unused
	touch .unpack

.patch: .unpack
	# add the beowulf90 patches
	cd mpich-1.2.0 && patch -p1 < $(TOPDIR)/patches/beowulf-mpich.patch
	cd mpich-1.2.0/mpid/ch_p4 && patch -p1 < $(TOPDIR)/patches/beowulf-ch.patch
	cd mpich-1.2.0/mpid/ch_p4/p4 && patch -p1 < $(TOPDIR)/patches/beowulf-p4.patch
	cd mpich-1.2.0/mpid/ch_p4/p4 && patch -p1 < $(TOPDIR)/patches/beowulf-p4-sigint.patch
	touch .patch
	
mpich-1.2.0: .patch
	cd mpich-1.2.0/ && BINDIR="" LIBDIR="" ./configure -opt=-O2 -f90="pgf90" -fc="pgf77" --with-device=ch_p4 --lib=-lbproc -rsh=/bin/true
	cd mpich-1.2.0/ && BINDIR="" LIBDIR="" make

mpprun: dummy
	if [ -n "$(MPP_BUILDDIR)" ] ; then $(MAKE) -C $(MPP_BUILDDIR) ; fi

mpirun-stub.o: dummy

install: install-mpich mpprun mpirun-stub.o
	if [ -n "$(MPP_BUILDDIR)" ] ; then $(MAKE) -C $(MPP_BUILDDIR) install ; fi
	#
	# C libraries, static and dynamic 
	ld -L/usr/lib -shared -soname libmpi.so.1 -lbproc $(MPP_LDFLAGS) -lmpirun --whole-archive -L$(USRDIR)/mpi-beowulf90/lib -lmpich -lslog -defsym getarg_=1 -defsym f__xargc=1 mpirun-stub.o -o $(LIBDIR)/libmpi.so
	ld -L/usr/lib -Bstatic -i -lbproc --whole-archive $(MPP_LDFLAGS) -lmpirun -L$(USRDIR)/mpi-beowulf90/lib -lmpich -lslog -defsym getarg_=1 -defsym f__xargc=1 -o $(LIBDIR)/libmpi.a
	#
	# Fortran libraries, static and dynamic
	ld -L/usr/lib -shared -soname libmpif.so.1 -lbproc $(MPP_LDFLAGS) -lmpirun --whole-archive -L$(USRDIR)/mpi-beowulf90/lib -lmpich mpirun-stub.o -o $(LIBDIR)/libmpif.so
	ld -L/usr/lib -Bstatic -i -lbproc --whole-archive $(MPP_LDFLAGS) -lmpirun -L$(USRDIR)/mpi-beowulf90/lib -lmpich -o $(LIBDIR)/libmpif.a

install-mpich: mpich-1.2.0
	# clean out the old stuff
	rm -rf $(USRDIR)/mpi-beowulf90
	# install the base system
	cd mpich-1.2.0 && PREFIX=$(USRDIR)/mpi-beowulf90 make -e install
	# whip up the installation copy of the header
	rm -rf $(INCDIR)/mpi-beowulf90
	mkdir $(INCDIR)/mpi-beowulf90
	cp -R $(USRDIR)/mpi-beowulf90/include/*.h $(INCDIR)/mpi-beowulf90
	cp -R $(USRDIR)/mpi-beowulf90/include/c++ $(INCDIR)/mpi-beowulf90/
	find $(INCDIR)/mpi-beowulf90 -name '*.h' -exec sh -c 'echo -e ",s/#include[[:space:]]*\"/#include <mpi-beowulf90\//g\n,s/[.]h\"/.h>/g\nw" | ed {}' \;
	if [ -f $(INCDIR)/mpi.h ] ; then mv -f $(INCDIR)/mpi.h $(INCDIR)/mpi.h.old ; fi
	if [ -f $(INCDIR)/mpif.h ] ; then mv -f $(INCDIR)/mpif.h $(INCDIR)/mpif.h.old ; fi
	ln -s $(INCDIR)/mpi-beowulf90/mpi.h $(INCDIR)/mpi.h
	ln -s $(INCDIR)/mpi-beowulf90/mpif.h $(INCDIR)/mpif.h
	# copy the man pages into the right directories
	cp -ap mpich-1.2.0/man/man1/* $(MANDIR)/man1
	cp -ap mpich-1.2.0/man/man3/* $(MANDIR)/man3
	cp -ap mpich-1.2.0/man/man4/* $(MANDIR)/man4
	rm -rf $(USRDIR)/mpi-beowulf90/man
	
clean:
	# clean out out stubs
	rm -f *.[oas]
	# clean out our freindly packages.
	if [ -n "$(MPP_BUILDDIR)" ] ; then $(MAKE) -C $(MPP_BUILDDIR) clean ; fi
	# whack unfreindly packages
	rm -rf mpich-1.2.0
	rm -f .unpack
	rm -f .patch

release: clean
	cvs commit -m "see README" && cvs rtag ${PKG_NAME}-release-"${VERSION}-`echo ${PATCHLEVEL} | tr . - `" ${PKG_NAME}

dummy:


More information about the Beowulf mailing list