📄 mpif90-ckpt.in
字号:
#! /bin/sh# MPICH-V# Copyright (C) 2002, 2003 Groupe Cluster et Grid, LRI, Universite de Paris Sud### This file is part of MPICH-V.## MPICH-V is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## MPICH-V is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with MPICH-V; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA## $Id: mpif90-ckpt.in,v 1.1 2004/04/08 12:52:23 herault Exp $#DoLink=1DoCompile=0show_compile=0show_link=0MPILOG=Show=evalallargs=compileargs=linkargs=linkobjs=gettinglinkarg=0HasDashC=0UsesPmpi=0verbose=0# Default compiler configuration## Directory locations: Fixed for any MPI implementationprefix=@prefix@exec_prefix=@exec_prefix@sysconfdir=@sysconfdir@includedir=@includedir@libdir=@libdir@## Directory locations: Can change for each Fortran versionf90includedir=@f90includedir@f90libdir=@f90libdir@#F90BASE="@F90@"F90LINKERBASE="@F90LINKER@"LDFLAGSBASE="@LDFLAGS@"BASE_FFLAGS="@BASE_FFLAGS@ @F90_GETARG_FFLAGS@"F90INC="@F90INC@"# f90modinc specifies how to add a directory to the search path for modules.# Some compilers (Intel ifc) do not support this concept, and instead need# a specific list of files that contain module names and directories.# The f90modincspec is a more general approach that uses <dir> and <file># for the directory and file respectively.F90MODINC="@F90_MODINCFLAG@"F90MODINCSPEC="@F90MODINCSPEC@"USER_FFLAGS="@FFLAGS@"## Linker flagsF90_LDFLAGS="@F90_LDFLAGS@ -Wl,-rpath,@prefix@,-lckpt"BASE_LIB_LIST="@BASE_LIB_LIST@"FLIB_LIST="@F90_GETARG_LDFLAGS@"F90LIB_PATH_LEADER="@F90_LIBDIR_LEADER@"F90LIB_PATH="${libdir}"MPILIBNAME="@MPILIBNAME@"MPIVERSION="@MPIVERSION@"FWRAPNAME="@FWRAPNAME@"FLIBNAME="@FLIBNAME@"# set to yes if the PMPI routines are in the same library with the MPI routines# (for example, they are built with weak symbols).MPI_WITH_PMPI="@MPI_WITH_PMPI@"proflib=-lp${MPILIBNAME}proflibfullname=${libdir}/libp${MPILIBNAME}.a#hasMPE="@hasMPE@"# Shared library supportSHAREDKIND="@SHAREDKIND@"SHARED_LIB_SEARCH_PATH_LEADER='@SHARED_LIB_SEARCH_PATH_LEADER@'SHARED_LIB_LOCALDIR="@SHARED_LIB_LOCALDIR@"sharedlibdir=@sharedlib_dir@## Override the compilers using environment variablesF90LINKER="${MPICH_F90LINKER-$F90LINKERBASE}"if [ -n "$MPICH_F90" ] ; then F90="$MPICH_F90" F90name=`echo $F90 | sed 's/ /-/g'` if [ -s $sysconfdir/mpif90-$F90name.conf ] ; then . $sysconfdir/mpif90-$F90name.conf fielse F90="$F90BASE"fiUseSharedLib=${MPICH_USE_SHLIB-no}choice=0for arg in "$@" ; do# echo procssing arg $arg # Special processing for -o name if [ $gettinglinkarg = 1 ] ; then linkargs="$linkargs $arg" gettinglinkarg=0 outputfilename="$arg" continue fi case "$arg" in -c) # If -c is NOT specified, then we need to perform a link step. allargs="$allargs $arg" compileargs="$compileargs $arg" # If -o was set, then we need to move the output file option # to the compile line (note that this is non-standard, and should # not be used in portable codes) if [ $DoLink = 1 -a -n "$outputfilename" ] ; then compileargs="$compileargs -o $outputfilename" fi DoLink=0 HasDashC=1 ;; -o) # Need to link allargs="$allargs $arg" if [ $HasDashC = 1 ] ; then # Some BUT NOT ALL compilers support -o with -c. Allow # the user to make use of the feature, IF IT EXISTS. compileargs="$compileargs $arg" else linkargs="$linkargs $arg" compileargs="$compileargs -c" # Still need to add the target of the -o gettinglinkarg=1 DoLink=1 fi ;; -O*) allargs="$allargs $arg" compileargs="$compileargs $arg" linkargs="$linkargs $arg" if [ $choice = 0 ] ; then choice=2 ; fi ;; -choicemod) choice=1 ;; -nochoicemod) choice=2 ;; -mpilog) if [ $UsesPmpi = 1 ] ; then echo "Only one of -mpilog, -mpitrace, or -mpianim may be used." exit 1 else UsesPmpi=1 fi if [ "$hasMPE" = "yes" ] ; then MPILOG="-l${FWRAPNAME} -llmpe -lmpe" else echo "-mpilog requires the MPE libraries" fi ;; -mpitrace) if [ $UsesPmpi = 1 ] ; then echo "Only one of -mpilog, -mpitrace, or -mpianim may be used." exit 1 else UsesPmpi=1 fi if [ "$hasMPE" = "yes" ] ; then MPILOG="-l${FWRAPNAME} -ltmpe -lmpe" else echo "-mpitrace requires the MPE libraries" fi ;; -mpianim) if [ $UsesPmpi = 1 ] ; then echo "Only one of -mpilog, -mpitrace, or -mpianim may be used." exit 1 else UsesPmpi=1 fi if [ "$hasMPE" = "yes" ] ; then MPILOG="-l${FWRAPNAME} -lampe -lmpe" else echo "-mpianim requires the MPE libraries" fi ;; -echo) set -x ;; -show) Show=echo ;; -config=*) FCname=`echo A$arg | sed -e 's/A-config=//g'` if [ -s $sysconfdir/mpif90-$FCname.conf ] ; then . $sysconfdir/mpif90-$FCname.conf else echo "Configuration file mpif90-$FCname.conf not found" fi ;; -f90=*) F90=`echo A$arg | sed -e 's/A-f90=//g'` F90LINKER="$F90" ;; -compile_info) show_compile=1 DoLink=0 Show=echo ;; -link_info) show_link=1 Show=echo ;; -shlib) UseSharedLib=yes ;; -noshlib) UseSharedLib=no ;; -v) verbose=1 echo "mpif90 for $MPIVERSION" compileargs="$compileargs -v" linkargs="$linkargs -v" ;; -l*) # This SHOULD be the -l<lib> argument. Only for the linker linkargs="$linkargs $arg" allargs="$allargs $arg" ;; -help)cat <<EOFThis is a program to compile or link MPI programsIn addition, the following special options are supported -mpilog - Build version that generate MPE log files -mpitrace - Build version that generates traces -mpianim - Build version that generates real-time animation -choicemod - Use a version of the MPI module that supports "choice" types. This is also the default unless -O is specified -nochoicemod - Use a basic version of the MPI module. -f90=pgm - Change the program to use to compile and link MPI programs. WARNING! The program that you choose MUST be compatible with the MPICH libraries. If you have trouble, you should reconfigure and rebuild MPICH, selecting this compiler. -show - Show the commands that would be used without runnning them -compile_info - Show how to compile a program -link_info - Show how to link a program -help - Give this help -echo - Show exactly what this program is doing. This option should normally not be used.This should be used just like the usual Fortran compilerFor example, $0 -c foo.f and $0 -o foo foo.oCombining compilation and linking in a single command $0 -o foo foo.fmay not work on some systems, and is not recommended.EOF exit 1 ;; # Unrecognized args. Because we do an eval, we need to # carefully quote any args that contain quotes. *\"*) qarg="'"$arg"'" allargs="$allargs $qarg" compileargs="$compileargs $qarg" linkargs="$linkargs $qarg" ;; *\'*) qarg='\"'"$arg"'\"' allargs="$allargs $qarg" compileargs="$compileargs $qarg" linkargs="$linkargs $qarg" ;; *) allargs="$allargs $arg" if [ -s "$arg" ] ; then ext=`expr "$arg" : '.*\(\..*\)'` if [ "$ext" = ".f" -o "$ext" = ".F" -o "$ext" = ".f90" -o \ "$ext" = ".for" -o "$ext" = ".FOR" -o "$ext" = ".F90" ] ; then DoCompile=1 compileargs="$compileargs $arg" fname=`basename $arg $ext` linkobjs="$linkobjs $fname.o" elif [ "$ext" = ".o" ] ; then if [ $HasDashC = 1 ] ; then compileargs="$compileargs $arg" else DoLink=1 linkobjs="$linkobjs $arg" fi else compileargs="$compileargs $arg" linkargs="$linkargs $arg" fi else compileargs="$compileargs $arg" linkargs="$linkargs $arg" fi ;; esacdone## Set the module directoryif [ $choice -lt 2 ] ; then moduledir="${f90includedir}/f90choice" modulelib=${MPILIBNAME}f90else moduledir="${f90includedir}/f90base" modulelib=${MPILIBNAME}f90ncfiif [ -n "$F90MODINCSPEC" ] ; then newarg=`echo A"$F90MODINCSPEC" | \ sed -e 's/^A//' -e 's%<dir>%'"$moduledir%g" -e 's/<file>/mpi/g'` compileargs="$compileargs $newarg" linkargs="$linkargs -l$modulelib"elif [ -n "$F90MODINC" ] ; then compileargs="$compileargs ${F90MODINC}$moduledir" linkargs="$linkargs -l$modulelib"fi## Take care of mpif.h; try to add the link if necessary# We'll need to edit mpif.h to remove comments if we use mpif.h instead# of an MPI module#added_link=0if [ -z "${F90INC}" ] ; then if [ ! -r mpif.h ] ; then #echo "Adding a symbolic link for mpif.h" trap "$Show /bin/rm mpif.h" 0 # This should really be the (related) f77includedir (see mpif77). $Show ln -s ${includedir}/mpif.h mpif.h added_link=1 fielse F90INC=${F90INC}${includedir}fistatus=0if [ $DoCompile = 1 -o $show_compile = 1 ] ; then if [ $HasDashC != 1 ] ; then compileargs="-c $compileargs" fi $Show $F90 $F90INC $finc $BASE_FFLAGS $F90FLAGS $compileargs status=$? if [ $status != 0 ] ; then exit $status fifiif [ $DoLink = 1 -o $show_link = 1 ] ; then # If no LDFLAGS defined, use the ones that MPICH was built with if [ -z "$LDFLAGS" ] ; then LDFLAGS="$LDFLAGSBASE" fi # Figure out the library list. Because we want to support both a single # mpi library containing both C and Fortran interfaces, as well as # a library that allows multiple Fortran interfaces, we may need different # library link lines. With a unified C/Fortran library, we just # use -l${MPILIBNAME}. With separate Fortran libraries, we need # -l<fortranwrapperlib> -l${MPILIBNAME} -l<fortransuplib> # We also handle the profiling library here, which may not be needed # for those systems that support weak symbols. # If the libraries are separate, the Fortran77 must work with the # Fortran 90 files. if [ "${MPILIBNAME}" = "${FLIBNAME}" ] ; then mpilibs="-l${MPILIBNAME}" else mpilibs="-l${FLIBNAME} -l${MPILIBNAME} -l${FLIBNAME}fsup" fi # If the profiling library doesn't exist, or MPICH_NO_PROF environment # variable is set, skip the profiling library. if [ -n "$MPICH_NO_PROF" -o ! -s "$proflibfullname" ] ; then proflib="" fi # IRIX complains if we include a library twice. In the case of a # library using weak symbols, we don't need the proflib. Just # in case we do, there is an enviroment variable that # can be used to override this test. if [ "$MPI_WITH_PMPI" = "yes" -a "$MPICH_INCLUDE_PROFLIB" != yes ] ; then proflib="" fi # If proflib is non-empty, then add it if [ -n "$proflib" ] ; then mpilibs="$proflib $mpilibs $proflib" fi # See the comment in mpicc about UseSharedLib # Also, don't use if the shared libraries don't exist yet # (because -lmpichfarg.a won't exist yet) if [ "$SHAREDKIND" != "ignore" -a $UseSharedLib = "yes" -a \ -s ${libdir}/lib${FLIBNAME}farg.a ] ; then # We also add a library containing MPI_Init and the routines # that it uses to call getarg/iarg. flibpath="${F90LIB_PATH_LEADER}${sharedlibdir}" if [ -n "${SHARED_LIB_SEARCH_PATH_LEADER}" ] ; then flibpath="${SHARED_LIB_SEARCH_PATH_LEADER}${sharedlibdir} $flibpath" fi if [ -n "${SHAREDLIB_LOCALDIR}" ] ; then flibpath="${F90LIB_PATH_LEADER}${SHAREDLIB_LOCALDIR} $flibpath" if [ -n "${SHARED_LIB_SEARCH_PATH_LEADER}" ] ; then flibpath="${SHARED_LIB_SEARCH_PATH_LEADER}${SHAREDLIB_LOCALDIR} $flibpath" fi fi mpilibs="-l${FLIBNAME}farg $mpilibs" fi $Show $F90LINKER $F90_LDFLAGS $LDFLAGS $BASE_FFLAGS $flibpath ${F90LIB_PATH_LEADER}${F90LIB_PATH} $linkobjs $MPILOG $linkargs $mpilibs $BASE_LIB_LIST $FLIB_LIST status=$?fi## If we added the link, remove it.if [ $added_link = 1 ] ; then $Show rm mpif.h trap 0fiexit $status
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -