PGI Fortran90+MPICH install questions on Scyld

Florent Calvayrac fcalvay at
Wed Oct 10 05:22:08 EDT 2001


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

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         | 
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
BUILD_DATE = $(shell date +%D)
AUTHOR = "newt at - modified for pgf90 by Florent.Calvayrac at"

# installation directories
USRDIR = /usr/local
INCDIR = $(USRDIR)/include

# 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)


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 -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)/
	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 -lbproc $(MPP_LDFLAGS) -lmpirun --whole-archive -L$(USRDIR)/mpi-beowulf90/lib -lmpich mpirun-stub.o -o $(LIBDIR)/
	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 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}


More information about the Beowulf mailing list