/[MITgcm]/MITgcm/tools/genmake2
ViewVC logotype

Diff of /MITgcm/tools/genmake2

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.99 by edhill, Mon Sep 27 15:49:48 2004 UTC revision 1.139 by ce107, Thu Dec 22 01:22:27 2005 UTC
# Line 122  EOF Line 122  EOF
122        stop        stop
123        end        end
124  EOF  EOF
125      test -f Makefile  &&  mv -f Makefile Makefile.bak      test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
126      cat <<EOF >> Makefile      cat <<EOF >> $MAKEFILE
 %.$tfs : %.F  
127  .SUFFIXES:  .SUFFIXES:
128  genmake_hello.$tfs: genmake_hello.F  .SUFFIXES: .$tfs .F
129          $LN genmake_hello.F genmake_hello.$tfs  .F.$tfs:
130            $LN \$< \$@
131  EOF  EOF
132      $MAKE "genmake_hello."$tfs > /dev/null 2>&1      $MAKE "genmake_hello."$tfs > /dev/null 2>&1
133      RETVAL=$?      RETVAL=$?
# Line 148  EOF Line 148  EOF
148              return              return
149          fi          fi
150      fi      fi
151      rm -f genmake_hello.* Makefile      rm -f genmake_hello.* $MAKEFILE
152      test -f Makefile  &&  mv -f Makefile.bak Makefile      test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
153    
154      #  If we make it here, use the extensions      #  If we make it here, use the extensions
155      FS=$tfs      FS=$tfs
# Line 181  look_for_makedepend()  { Line 181  look_for_makedepend()  {
181      if test "x${MAKEDEPEND}" = x ; then      if test "x${MAKEDEPEND}" = x ; then
182          which makedepend > /dev/null 2>&1          which makedepend > /dev/null 2>&1
183          RV0=$?          RV0=$?
184            test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
185            #  echo 'MAKEFILE="'$MAKEFILE'"'
186            cat <<EOF >> $MAKEFILE
187    #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"
188    #
189    #   Some "makedepend" implementations will die if they cannot
190    #   find a Makefile -- so this file is here to gives them an
191    #   empty one to find and parse.
192    EOF
193          cat <<EOF >> genmake_tc.f          cat <<EOF >> genmake_tc.f
194        program test        program test
195        write(*,*) 'test'        write(*,*) 'test'
# Line 189  look_for_makedepend()  { Line 198  look_for_makedepend()  {
198  EOF  EOF
199          makedepend genmake_tc.f > /dev/null 2>&1          makedepend genmake_tc.f > /dev/null 2>&1
200          RV1=$?          RV1=$?
201            test -f $MAKEFILE  &&  rm -f $MAKEFILE
202            test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
203          if test "x${RV0}${RV1}" = x00 ; then          if test "x${RV0}${RV1}" = x00 ; then
204              MAKEDEPEND=makedepend              MAKEDEPEND=makedepend
205          else          else
# Line 310  EOF Line 321  EOF
321    
322      #================================================================      #================================================================
323      #  look for possible FORTRAN compilers      #  look for possible FORTRAN compilers
324      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95 gfortran"
325      p_FC=      p_FC=
326      for c in $tmp ; do      for c in $tmp ; do
327          rm -f ./hello.f ./hello          rm -f ./hello.f ./hello
# Line 342  EOF Line 353  EOF
353      else      else
354          echo "  The possible FORTRAN compilers found in your path are:"          echo "  The possible FORTRAN compilers found in your path are:"
355          echo "   "$p_FC          echo "   "$p_FC
356          if test "x$FC" = x ; then      fi
357              FC=`echo $p_FC | $AWK '{print $1}'`  
358              echo "  Setting FORTRAN compiler to: "$FC      #  Use the first of the compilers found in the current PATH
359          fi      #  that has a correctly-named optfile
360        if test "x$OPTFILE" = x  -a  "x$FC" = x ; then
361            for i in $p_FC ; do
362                OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
363                if test -r $OPTFILE ; then
364                    echo "  Setting OPTFILE to: "$OPTFILE
365                    break
366                fi
367            done
368      fi      fi
369    
370      if test "x$OPTFILE" = x ; then      if test "x$OPTFILE" = x ; then
# Line 516  Usage: "$0" [OPTIONS] Line 535  Usage: "$0" [OPTIONS]
535            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
536            is being used.            is being used.
537    
538        -ts | --ts
539              Produce timing information per timestep
540        -papis | --papis
541              Produce summary MFlop/s with PAPI per timestep
542        -foolad | --foolad
543              Fool the AD code generator
544        -papi | --papi
545              Performance analysis with PAPI
546        -hpmt | --hpmt
547              Performance analysis with the HPM Toolkit
548    
549        -gsl | --gsl
550              Use GSL to control floating point rounding and precision
551    
552      -mpi | --mpi      -mpi | --mpi
553            Include MPI header files and link to MPI libraries            Include MPI header files and link to MPI libraries
554      -mpi=PATH | --mpi=PATH      -mpi=PATH | --mpi=PATH
# Line 581  WARNING: Please contact <MITgcm-support@ Line 614  WARNING: Please contact <MITgcm-support@
614  EOF  EOF
615          return 1          return 1
616      fi      fi
617      cat > genmake_tcomp.f <<EOF      cat > genmake_tcomp.$FS <<EOF
618        subroutine tcall( string )        subroutine tcall( string )
619        character*(*) string        character*(*) string
620        call tsub( string )        call tsub( string )
621        end        end
622  EOF  EOF
623      $FC $FFLAGS $DEFINES -c genmake_tcomp.f >> genmake_warnings 2>&1      $FC $FFLAGS -c genmake_tcomp.$FS >> genmake_warnings 2>&1
624      RETVAL=$?      RETVAL=$?
625      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
626          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 653  void FC_NAMEMANGLE(cloc) ( double *curti Line 686  void FC_NAMEMANGLE(cloc) ( double *curti
686   *curtim = *curtim/1.E6;   *curtim = *curtim/1.E6;
687  }  }
688  EOF  EOF
689      make genmake_tc_1.o >> genmake_tc.log 2>&1      make genmake_tc_1.o >> genmake_warnings 2>&1
690      RET_C=$?      RET_C=$?
691      cat <<EOF > genmake_tc_2.f      cat <<EOF > genmake_tc_2.$FS
692        program hello        program hello
693        Real*8 wtime        REAL*8 wtime
694        external cloc        external cloc
695        call cloc(wtime)        call cloc(wtime)
696        print *," HELLO WORLD", wtime        print *," HELLO WORLD", wtime
697        end program hello        end
698  EOF  EOF
699      $FC $FFLAGS -o genmake_tc genmake_tc_2.f genmake_tc_1.o >> genmake_tc.log 2>&1      $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1
700      RET_F=$?      RET_F=$?
701      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_tc.log 2>&1      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
702      RETVAL=$?      RETVAL=$?
703      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
704          HAVE_CLOC=t          HAVE_CLOC=t
# Line 675  EOF Line 708  EOF
708  }  }
709    
710    
711    check_HAVE_SIGREG()  {
712        get_fortran_c_namemangling
713        cat <<EOF > genmake_tc_1.c
714    $FC_NAMEMANGLE
715    #include <stdlib.h>
716    #include <stdio.h>
717    #include <signal.h>
718    #include <errno.h>
719    #include <ucontext.h>
720    
721    int * ip;
722    
723    static void killhandler(
724        unsigned int sn, siginfo_t  si, struct ucontext *sc )
725    {
726        *ip = *ip + 1;
727        return;
728    }
729    
730    void FC_NAMEMANGLE(sigreg) (int * aip)
731    {
732        struct sigaction s;
733        ip = aip;
734        s.sa_flags = SA_SIGINFO;
735        s.sa_sigaction = (void *)killhandler;
736        if(sigaction (SIGTERM,&s,(struct sigaction *)NULL)) {
737            printf("Sigaction returned error = %d\n", errno);
738            exit(0);
739        }
740        return;
741    }
742    EOF
743        make genmake_tc_1.o >> genmake_warnings 2>&1
744        RET_C=$?
745        cat <<EOF > genmake_tc_2.$FS
746          program hello
747          integer anint
748          common /iv/ anint
749          external sigreg
750          call sigreg(anint)
751          end
752    EOF
753        echo >> genmake_warnings
754        echo "running: check_HAVE_SIGREG()" >> genmake_warnings
755        cat genmake_tc_2.$FS >> genmake_warnings
756        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
757        echo $COMM >> genmake_warnings
758        $COMM >> genmake_warnings 2>&1
759        RETVAL=$?
760        if test "x$RETVAL" = x0 ; then
761            HAVE_SIGREG=t
762            DEFINES="$DEFINES -DHAVE_SIGREG"
763        fi
764        rm -f genmake_tc*
765    }
766    
767    
768    check_HAVE_SETRLSTK()  {
769        get_fortran_c_namemangling
770        cat <<EOF > genmake_tc_1.c
771    $FC_NAMEMANGLE
772    #include <sys/time.h>
773    #include <sys/resource.h>
774    #include <unistd.h>
775    void FC_NAMEMANGLE(setrlstk) ()
776    {
777        struct rlimit rls;
778        rls.rlim_cur = RLIM_INFINITY;
779        rls.rlim_max = RLIM_INFINITY;
780        setrlimit(RLIMIT_STACK, &rls);
781        return;
782    }
783    EOF
784        make genmake_tc_1.o >> genmake_warnings 2>&1
785        RET_C=$?
786        cat <<EOF > genmake_tc_2.$FS
787          program hello
788          external setrlstk
789          call setrlstk()
790          end
791    EOF
792        echo >> genmake_warnings
793        echo "running: check_HAVE_SETRLSTK()" >> genmake_warnings
794        cat genmake_tc_2.$FS >> genmake_warnings
795        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
796        echo $COMM >> genmake_warnings
797        $COMM >> genmake_warnings 2>&1
798        RETVAL=$?
799        if test "x$RETVAL" = x0 ; then
800            HAVE_SETRLSTK=t
801            DEFINES="$DEFINES -DHAVE_SETRLSTK"
802        fi
803        rm -f genmake_tc*
804    }
805    
806    
807    check_HAVE_STAT()  {
808        get_fortran_c_namemangling
809        cat <<EOF > genmake_tc_1.c
810    $FC_NAMEMANGLE
811    #include <stdio.h>
812    #include <stdlib.h>
813    #include <unistd.h>
814    #include <sys/stat.h>
815    #include <sys/types.h>
816    void FC_NAMEMANGLE(tfsize) ( int *nbyte )
817    {
818        char name[512];
819        struct stat astat;
820    
821        name[0] = 'a'; name[1] = '\0';
822        if (! stat(name, &astat))
823            *nbyte = (int)(astat.st_size);
824        else
825            *nbyte = -1;
826    }
827    EOF
828        make genmake_tc_1.o >> genmake_tc.log 2>&1
829        RET_C=$?
830        cat <<EOF > genmake_tc_2.$FS
831          program hello
832          integer nbyte
833          call tfsize(nbyte)
834          print *," HELLO WORLD", nbyte
835          end
836    EOF
837        echo >> genmake_warnings
838        echo "running: check_HAVE_STAT()" >> genmake_warnings
839        cat genmake_tc_2.$FS >> genmake_warnings
840        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
841        echo $COMM >> genmake_warnings
842        $COMM >> genmake_tc.log 2>&1
843        RETVAL=$?
844        if test "x$RETVAL" = x0 ; then
845            HAVE_STAT=t
846            DEFINES="$DEFINES -DHAVE_STAT"
847        fi
848        rm -f genmake_tc*
849    }
850    
851    
852  check_netcdf_libs()  {  check_netcdf_libs()  {
853      echo "" > genmake_tnc.log      if test ! "x$SKIP_NETCDF_CHECK" = x ; then
854      cat <<EOF > genmake_tnc.for          return
855        fi
856        echo >> genmake_warnings
857        echo "running: check_netcdf_libs()" >> genmake_warnings
858        cat <<EOF > genmake_tnc.F
859        program fgennc        program fgennc
860  #include "netcdf.inc"  #include "netcdf.inc"
861    EOF
862        if test ! "x$MPI" = x ; then
863            echo '#include "mpif.h"' >> genmake_tnc.F
864        fi
865        cat <<EOF >> genmake_tnc.F
866        integer iret, ncid, xid        integer iret, ncid, xid
867        iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)        iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
868        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
# Line 689  check_netcdf_libs()  { Line 872  check_netcdf_libs()  {
872        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
873        end        end
874  EOF  EOF
875      #echo "$CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f"      echo "===  genmake_tnc.F  ===" > genmake_tnc.log
876      #echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.f"      cat genmake_tnc.F >> genmake_tnc.log
877      #echo "$LINK -o genmake_tnc.o $LIBS"      echo "===  genmake_tnc.F  ===" >> genmake_tnc.log
878      $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null  \      RET_CPP=f
879          &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.f >> genmake_tnc.log 2>&1  \      COMM="$CPP $DEFINES $INCLUDES genmake_tnc.F"
880        echo "$COMM" >> genmake_tnc.log
881        $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t
882        if test "x$RET_CPP" = xf ; then
883            echo "  WARNING: CPP failed to pre-process the netcdf test." \
884                >> genmake_tnc.log
885            echo "    Please check that \$INCLUDES is properly set." \
886                >> genmake_tnc.log
887        fi
888        echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log
889        echo "  &&  $LINK -o genmake_tnc.o $LIBS" >> genmake_tnc.log
890        $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
891          &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1          &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
892      RET_COMPILE=$?      RET_COMPILE=$?
893        cat genmake_tnc.log >> genmake_warnings
894    
895      #EH3  Remove test program execution for machines that either disallow      #EH3  Remove test program execution for machines that either disallow
896      #EH3  execution or cannot support it (eg. cross-compilers)      #EH3  execution or cannot support it (eg. cross-compilers)
# Line 708  EOF Line 903  EOF
903          HAVE_NETCDF=t          HAVE_NETCDF=t
904      else      else
905          # try again with "-lnetcdf" added to the libs          # try again with "-lnetcdf" added to the libs
906          $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null  \          echo "try again with added '-lnetcdf'" > genmake_tnc.log
907              &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.f >> genmake_tnc.log 2>&1  \          echo "$CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS \ " >> genmake_tnc.log
908            echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
909            echo " &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
910            $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null  \
911                &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
912              &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1              &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
913          RET_COMPILE=$?          RET_COMPILE=$?
914            cat genmake_tnc.log >> genmake_warnings
915          if test "x$RET_COMPILE" = x0 ; then          if test "x$RET_COMPILE" = x0 ; then
916              LIBS="$LIBS -lnetcdf"              LIBS="$LIBS -lnetcdf"
917              HAVE_NETCDF=t              HAVE_NETCDF=t
         else  
             cat genmake_tnc.log >> genmake_warnings  
918          fi          fi
919      fi      fi
920      rm -f genmake_tnc*      rm -f genmake_tnc*
# Line 735  PLATFORM= Line 933  PLATFORM=
933  LN=  LN=
934  S64=  S64=
935  KPP=  KPP=
936  FC=  #FC=
937  #CC=gcc  #CC=gcc
938  CPP=  #CPP=
939  LINK=  LINK=
940  DEFINES=  DEFINES=
941  PACKAGES=  PACKAGES=
942  ENABLE=  ENABLE=
943  DISABLE=  DISABLE=
944  MAKEFILE=  # MAKEFILE=
945  #MAKEDEPEND=  # MAKEDEPEND=
946  PDEPEND=  PDEPEND=
947  DUMPSTATE=t  DUMPSTATE=t
948  PDEFAULT=  PDEFAULT=
949  OPTFILE=  OPTFILE=
950  INCLUDES="-I."  INCLUDES="-I. $INCLUDES"
951  FFLAGS=  FFLAGS=
952  FOPTIM=  FOPTIM=
953  CFLAGS=  CFLAGS=
# Line 762  NOOPTFILES= Line 960  NOOPTFILES=
960  NOOPTFLAGS=  NOOPTFLAGS=
961  MPI=  MPI=
962  MPIPATH=  MPIPATH=
963    TS=
964    PAPIS=
965    FOOLAD=
966    PAPI=
967    HPMT=
968    GSL=
969    HAVE_TEST_L=
970    
971  # DEFINES checked by test compilation  # DEFINES checked by test compilation or command-line
972  HAVE_SYSTEM=  HAVE_SYSTEM=
973  HAVE_FDATE=  HAVE_FDATE=
974  FC_NAMEMANGLE=  FC_NAMEMANGLE=
975  HAVE_CLOC=  HAVE_CLOC=
976    HAVE_SETRLSTK=
977    HAVE_STAT=
978  HAVE_NETCDF=  HAVE_NETCDF=
979  HAVE_ETIME=  HAVE_ETIME=
980    IGNORE_TIME=
981    
982  MODS=  MODS=
983  TOOLSDIR=  TOOLSDIR=
# Line 780  STANDARDDIRS="USE_THE_DEFAULT" Line 988  STANDARDDIRS="USE_THE_DEFAULT"
988  G2ARGS=  G2ARGS=
989  BASH=  BASH=
990  PWD=`pwd`  PWD=`pwd`
991  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
992  AWK=awk  test "x$AWK" = x   &&  AWK=awk
993  THISHOST=`hostname`  THISHOST=`hostname`
994  THISCWD=`pwd`  THISCWD=`pwd`
995  THISDATE=`date`  THISDATE=`date`
# Line 815  TAMC_EXTRA= Line 1023  TAMC_EXTRA=
1023    
1024  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1025  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
1026  gm_s2="FC CPP IEEE MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC CPP IEEE TS PAPIS PAPI HPMT GSL MPI JAM DUMPSTATE STANDARDDIRS"
1027    
1028  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1029  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "
# Line 861  else Line 1069  else
1069      echo "none found"      echo "none found"
1070  fi  fi
1071    
1072  #  echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
1073  #OPTIONS=  #OPTIONS=
1074  #n=0  #n=0
1075  #for i ; do  #for i ; do
# Line 873  fi Line 1081  fi
1081  #done  #done
1082  #parse_options  #parse_options
1083  ac_prev=  ac_prev=
1084  for ac_option in $@ ; do  for ac_option in "$@" ; do
1085    
1086      G2ARGS="$G2ARGS \"$ac_option\""      G2ARGS="$G2ARGS \"$ac_option\""
1087    
# Line 995  for ac_option in $@ ; do Line 1203  for ac_option in $@ ; do
1203          -noieee | --noieee)          -noieee | --noieee)
1204              IEEE= ;;              IEEE= ;;
1205    
1206            -ts | --ts)
1207                TS=true ;;
1208            -papis | --papis)
1209                PAPIS=true ;;
1210            -foolad | --foolad)
1211                FOOLAD=true ;;
1212            -papi | --papi)
1213                PAPI=true ;;
1214            -hpmt | --hpmt)
1215                HPMT=true ;;
1216    
1217            -gsl | --gsl)
1218                GSL=true ;;
1219    
1220          -mpi | --mpi)          -mpi | --mpi)
1221              MPI=true ;;              MPI=true ;;
1222          -mpi=* | --mpi=*)          -mpi=* | --mpi=*)
# Line 1018  for ac_option in $@ ; do Line 1240  for ac_option in $@ ; do
1240              ac_prev=TAMC_EXTRA ;;              ac_prev=TAMC_EXTRA ;;
1241          -tamc_extra=* | --tamc_extra=*)          -tamc_extra=* | --tamc_extra=*)
1242              TAMC_EXTRA=$ac_optarg ;;              TAMC_EXTRA=$ac_optarg ;;
1243            
1244            -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1245                IGNORE_TIME="-DIGNORE_TIME" ;;
1246    
1247          -*)          -*)
1248              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
# Line 1033  for ac_option in $@ ; do Line 1258  for ac_option in $@ ; do
1258            
1259  done  done
1260    
1261    
1262  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1263      echo      echo
1264      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
# Line 1047  fi Line 1273  fi
1273    
1274  #  Find the MITgcm ${ROOTDIR}  #  Find the MITgcm ${ROOTDIR}
1275  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1276      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1277      if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
1278          ROOTDIR=".."          ROOTDIR=".."
1279      else      else
# Line 1074  fi Line 1300  fi
1300    
1301  #  Find the MITgcm ${THISVER}  #  Find the MITgcm ${THISVER}
1302  if test -f "${ROOTDIR}/doc/tag-index" ; then  if test -f "${ROOTDIR}/doc/tag-index" ; then
1303      THISVER=`grep checkpoint ${ROOTDIR}/doc/tag-index | head -1`      THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`
1304    fi
1305    
1306    if test "x$MAKEFILE" = x ; then
1307        MAKEFILE="Makefile"
1308  fi  fi
1309    
1310  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:  "
# Line 1106  if test "x$OPTFILE" != xNONE ; then Line 1336  if test "x$OPTFILE" != xNONE ; then
1336      fi      fi
1337  fi  fi
1338    
 #  Check for broken systems that cannot correctly distinguish *.F and *.f files  
 # check_for_broken_Ff  
   
1339  echo "  getting AD_OPTFILE information:  "  echo "  getting AD_OPTFILE information:  "
1340  if test "x${AD_OPTFILE}" = x ; then  if test "x${AD_OPTFILE}" = x ; then
1341      if test "x$MITGCM_AD_OF" = x ; then      if test "x$MITGCM_AD_OF" = x ; then
# Line 1136  if test "x${AD_OPTFILE}" != xNONE ; then Line 1363  if test "x${AD_OPTFILE}" != xNONE ; then
1363      fi      fi
1364  fi  fi
1365    
1366    #====================================================================
1367    #  Set default values if not set by the optfile
1368    #
1369  #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,  #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1370  #  either set defaults or complain and abort!  #  either set defaults or complain and abort!
1371  if test ! "x$BASH" = x ; then  if test ! "x$BASH" = x ; then
# Line 1212  Error: The command "ln -s" failed -- ple Line 1442  Error: The command "ln -s" failed -- ple
1442  EOF  EOF
1443      exit 1      exit 1
1444  fi  fi
1445    test -L genmake_tlink > /dev/null 2>&1
1446    RETVAL=$?
1447    if test "x$RETVAL" = x0 ; then
1448        HAVE_TEST_L=t
1449    fi
1450  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
1451    
1452  #  Check for broken *.F/*.f handling and fix if possible  #  Check for broken *.F/*.f handling and fix if possible
# Line 1222  if test ! "x$MPI" = x ; then Line 1457  if test ! "x$MPI" = x ; then
1457        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1458  fi  fi
1459    
1460    if test ! "x$TS" = x ; then
1461          echo "  Turning on timing per timestep"
1462          if test ! "x$FOOLAD" = x ; then
1463                DEFINES="$DEFINES -DTIME_PER_TIMESTEP_SFP"
1464          else
1465                DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1466          fi
1467    fi
1468    if test ! "x$PAPIS" = x ; then
1469          echo "  Turning on PAPI flop summary per timestep"
1470          echo "  Please make sure PAPIINC, PAPILIB are defined"
1471          if test ! "x$FOOLAD" = x ; then
1472                DEFINES="$DEFINES -DUSE_PAPI_FLOPS_SFP"
1473          else
1474                DEFINES="$DEFINES -DUSE_PAPI_FLOPS"
1475          fi
1476          INCLUDES="$INCLUDES $PAPIINC"
1477          LIBS="$LIBS $PAPILIB"
1478    fi
1479    if test ! "x$PAPI" = x ; then
1480          if test ! "x$PAPIS" = x ; then
1481              echo "  PAPI performance analysis and flop summary per timestep cannot co-exist!"
1482              echo "  Sticking with PAPI flop summary per timestep!"
1483          else
1484              echo "  Turning on performance analysis with PAPI"
1485              echo "  Please make sure PAPIINC, PAPILIB are defined"
1486              DEFINES="$DEFINES -DUSE_PAPI"
1487              INCLUDES="$INCLUDES $PAPIINC"
1488              LIBS="$LIBS $PAPILIB"
1489          fi
1490    fi
1491    if test ! "x$HPMT" = x ; then
1492          if test ! "x$PAPI" = x ; then
1493              echo "  PAPI and the HPM Toolkit cannot co-exist!"
1494              echo "  Sticking with PAPI!"
1495          else
1496              echo "  Turning on performance analysis with the HPM Toolkit"
1497              echo "  Please make sure HPMTINC, HPMTLIB are defined"
1498              DEFINES="$DEFINES -DUSE_LIBHPM"
1499              INCLUDES="$INCLUDES $HPMTINC"
1500              LIBS="$LIBS $HPMTLIB"
1501          fi
1502    fi
1503    if test ! "x$GSL" = x ; then
1504          echo "  Turning on use of GSL to control floating point calculations"
1505          echo "  Please make sure GSLINC, GSLLIB are defined"
1506          DEFINES="$DEFINES -DUSE_GSL_IEEE"
1507          INCLUDES="$INCLUDES $GSLINC"
1508          LIBS="$LIBS $GSLLIB"
1509    fi
1510    
1511  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1512  printf "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
1513  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1514        program hello        program hello
1515        call system('echo hi')        call system('echo hi')
1516        end        end
1517  EOF  EOF
1518  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1  $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1519  RETVAL=$?  RETVAL=$?
1520  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1521      HAVE_SYSTEM=t      HAVE_SYSTEM=t
# Line 1242  fi Line 1528  fi
1528  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1529    
1530  printf "  Do we have the fdate() command using $FC...  "  printf "  Do we have the fdate() command using $FC...  "
1531  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1532        program hello        program hello
1533        CHARACTER(128) string        CHARACTER*(128) string
1534        string = ' '        string = ' '
1535        call fdate( string )        call fdate( string )
1536        print *, string        print *, string
1537        end        end
1538  EOF  EOF
1539  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1  $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1540  RETVAL=$?  RETVAL=$?
1541  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1542      HAVE_FDATE=t      HAVE_FDATE=t
# Line 1263  fi Line 1549  fi
1549  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1550    
1551  printf "  Do we have the etime() command using $FC...  "  printf "  Do we have the etime() command using $FC...  "
1552  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1553        program hello        program hello
1554        REAL*4 ACTUAL, TARRAY(2)        REAL*4 ACTUAL, TARRAY(2)
1555        EXTERNAL ETIME        EXTERNAL ETIME
# Line 1272  cat > genmake_tcomp.f <<EOF Line 1558  cat > genmake_tcomp.f <<EOF
1558        print *, tarray        print *, tarray
1559        end        end
1560  EOF  EOF
1561  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1  $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1562  RETVAL=$?  RETVAL=$?
1563  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1564      HAVE_ETIME=t      HAVE_ETIME=t
# Line 1293  else Line 1579  else
1579  fi  fi
1580  rm -f genmake_t*  rm -f genmake_t*
1581    
1582    printf "  Can we unlimit the stack size using $FC...  "
1583    check_HAVE_SETRLSTK
1584    if test "x$HAVE_SETRLSTK" != x ; then
1585        echo "yes"
1586    else
1587        echo "no"
1588    fi
1589    rm -f genmake_t*
1590    
1591    printf "  Can we register a signal handler using $FC...  "
1592    check_HAVE_SIGREG
1593    if test "x$HAVE_SIGREG" != x ; then
1594        echo "yes"
1595    else
1596        echo "no"
1597    fi
1598    rm -f genmake_t*
1599    
1600    printf "  Can we use stat() through C calls...  "
1601    check_HAVE_STAT
1602    if test "x$HAVE_STAT" != x ; then
1603        echo "yes"
1604    else
1605        echo "no"
1606    fi
1607    rm -f genmake_t*
1608    
1609  printf "  Can we create NetCDF-enabled binaries...  "  printf "  Can we create NetCDF-enabled binaries...  "
1610  check_netcdf_libs  check_netcdf_libs
1611  if test "x$HAVE_NETCDF" != x ; then  if test "x$HAVE_NETCDF" != x ; then
# Line 1300  if test "x$HAVE_NETCDF" != x ; then Line 1613  if test "x$HAVE_NETCDF" != x ; then
1613  else  else
1614      echo "no"      echo "no"
1615  fi  fi
1616    DEFINES="$DEFINES $IGNORE_TIME"
1617    
1618  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1619  printf "  Adding MODS directories:  "  printf "  Adding MODS directories:  "
# Line 1317  for d in $MODS ; do Line 1630  for d in $MODS ; do
1630  done  done
1631  echo  echo
1632    
 if test "x$MAKEFILE" = x ; then  
     MAKEFILE="Makefile"  
 fi  
1633  if test "x${PLATFORM}" = x ; then  if test "x${PLATFORM}" = x ; then
1634      PLATFORM=$p_PLATFORM      PLATFORM=$p_PLATFORM
1635  fi  fi
1636    
1637  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1638      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1639      if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then      if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1640          EXEDIR=../exe          EXEDIR=../exe
1641      else      else
# Line 1345  if test ! -d ${TOOLSDIR} ; then Line 1655  if test ! -d ${TOOLSDIR} ; then
1655      exit 1      exit 1
1656  fi  fi
1657  if test "x$S64" = x ; then  if test "x$S64" = x ; then
1658      S64='$(TOOLSDIR)/set64bitConst.sh'      echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1
1659        RETVAL=$?
1660        if test "x${RETVAL}" = x0 ; then
1661            S64='$(TOOLSDIR)/set64bitConst.sh'
1662        else
1663            echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1
1664            RETVAL=$?
1665            if test "x${RETVAL}" = x0 ; then
1666                S64='$(TOOLSDIR)/set64bitConst.csh'
1667            else
1668                cat <<EOF
1669    
1670    ERROR: neither of the two default scripts:
1671    
1672        ${TOOLSDIR}/set64bitConst.sh
1673        ${TOOLSDIR}/set64bitConst.csh
1674    
1675      are working so please check paths or specify (with \$S64) a
1676      working version of this script.
1677    
1678    EOF
1679                exit 1
1680            fi
1681        fi
1682  fi  fi
1683  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1684    
# Line 1490  done Line 1823  done
1823  rm -f ./.tmp_pack  rm -f ./.tmp_pack
1824  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1825    
1826    #  Check availability of NetCDF and then either build the MNC template
1827    #  files or delete mnc from the list of available packages.
1828    echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1829    RETVAL=$?
1830    if test "x$RETVAL" = x0 ; then
1831        if test "x$HAVE_NETCDF" != xt ; then
1832            cat <<EOF
1833    
1834    *********************************************************************
1835    WARNING: the "mnc" package was enabled but tests failed to compile
1836      NetCDF applications.  Please check that:
1837    
1838      1) NetCDF is correctly installed for this compiler and
1839      2) the LIBS variable (within the "optfile") specifies the correct
1840           NetCDF library to link against.
1841    
1842      Due to this failure, the "mnc" package is now DISABLED.
1843    *********************************************************************
1844    
1845    EOF
1846            PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
1847            DISABLE="$DISABLE mnc"
1848        else
1849            ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
1850            RETVAL=$?
1851            if test "x${RETVAL}" = x0 ; then
1852                rm -f make_mnc.errors
1853            else
1854                echo "Error: problem encountered while building source files in pkg/mnc:"
1855                cat make_mnc.errors 1>&2
1856                exit 1
1857            fi
1858        fi
1859    fi
1860    
1861  echo "  applying package dependency rules"  echo "  applying package dependency rules"
1862  ck=  ck=
1863  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
# Line 1574  for i in $PACKAGES ; do Line 1942  for i in $PACKAGES ; do
1942      fi      fi
1943  done  done
1944    
 #  Build MNC templates and check for ability to build and use NetCDF  
 echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1  
 RETVAL=$?  
 if test "x$RETVAL" = x0 ; then  
     ( cd $ROOTDIR"/pkg/mnc" && $MAKE templates ) > make_mnc.errors 2>&1  
     RETVAL=$?  
     if test "x${RETVAL}" = x0 ; then  
         rm -f make_mnc.errors  
     else  
         echo "Error: problem encountered while building source files in pkg/mnc:"  
         cat make_mnc.errors 1>&2  
         exit 1  
     fi  
     if test "x$HAVE_NETCDF" != xt ; then  
         cat <<EOF  
   
 *********************************************************************  
 WARNING: the "mnc" package was enabled but tests failed to compile  
   NetCDF applications.  Please check that:  
   
   1) NetCDF is correctly installed for this compiler and  
   2) the LIBS variable (within the "optfile") specifies the correct  
        NetCDF library to link against.  
   
   Due to this failure, the "mnc" package is now DISABLED.  
 *********************************************************************  
   
 EOF  
         temp=`echo $PACKAGES | sed -e 's/mnc//g'`  
         PACKAGES=$temp  
     fi  
 fi  
   
1945  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
1946  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
1947  #  The following UGLY HACK sets multiple "#undef"s and it needs to go  #  The following UGLY HACK sets multiple "#undef"s and it needs to go
# Line 1626  for n in $names ; do Line 1961  for n in $names ; do
1961              fi              fi
1962          done          done
1963          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
1964              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
1965              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
1966          fi          fi
1967      fi      fi
1968  done  done
1969  ENABLED_PACKAGES=  ENABLED_PACKAGES=
1970  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1971      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`      def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
1972      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
1973  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
1974    
# Line 1717  for i in $SOURCEDIRS ; do Line 2052  for i in $SOURCEDIRS ; do
2052          cat $i/$j >> ad_files          cat $i/$j >> ad_files
2053      done      done
2054  done  done
2055    if test ! "x"$FS = "x.f" ; then
2056        cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f
2057        mv -f ad_files_f ad_files
2058    fi
2059    
2060  echo  echo
2061  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
# Line 1728  for i in $INCLUDEDIRS ; do Line 2066  for i in $INCLUDEDIRS ; do
2066      fi      fi
2067  done  done
2068    
2069    echo "  Creating the pseudo-MPI include directory"
2070    if test ! "x$DIVA" = x ; then
2071        INCLUDES="-I./mpi_headers $INCLUDES"
2072        rm -rf ./mpi_headers
2073        mkdir -p ./mpi_headers
2074    
2075        if test "x$MPIINCLUDEDIR" = x ; then
2076            if test "x$MPIHOME" = x ; then
2077                MPIHOME='/usr'
2078            fi
2079            MPIINCLUDEDIR='$MPIHOME/include'
2080        fi
2081        
2082        if test -r $MPIINCLUDEDIR/mpif.h ; then
2083            for i in $MPI_HEADER_FILES; do
2084                cp -p $MPIINCLUDEDIR/$i ./mpi_headers
2085            done
2086    
2087            perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
2088        else
2089            echo " We cannot create a copy of mpif.h!"
2090            exit -1
2091        fi
2092    fi
2093    
2094  echo "  Determining the list of source and include files"  echo "  Determining the list of source and include files"
2095  rm -rf .links.tmp  rm -rf .links.tmp
2096  mkdir .links.tmp  mkdir .links.tmp
# Line 1746  for d in $alldirs ; do Line 2109  for d in $alldirs ; do
2109      for sf in $sfiles ; do      for sf in $sfiles ; do
2110          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2111              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
2112                    ignore_f=f
2113                  case $d/$sf in                  case $d/$sf in
2114                    ./$PACKAGES_DOT_H)                    ./$PACKAGES_DOT_H)
2115                          ;;                          ;;
# Line 1756  for d in $alldirs ; do Line 2120  for d in $alldirs ; do
2120                    ./BUILD_INFO.h)                    ./BUILD_INFO.h)
2121                          ;;                          ;;
2122                    *)                    *)
2123                          touch .links.tmp/$sf                          #  For the local directory *ONLY*,
2124                          deplist="$deplist $sf"                          #  ignore all soft-links
2125                            if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then
2126                                ignore_f=t
2127                            else
2128                                touch .links.tmp/$sf
2129                                deplist="$deplist $sf"
2130                            fi
2131                          ;;                          ;;
2132                  esac                  esac
2133                  extn=`echo $sf | $AWK -F '.' '{print $NF}'`                  if test "x$ignore_f" = xf ; then
2134                  case $extn in                      extn=`echo $sf | $AWK -F. '{print $NF}'`
2135                      F)                      case $extn in
2136                          echo    " \\"  >> srclist.inc                          F)
2137                          printf " $sf" >> srclist.inc                              echo    " \\"  >> srclist.inc
2138                          ;;                              printf " $sf" >> srclist.inc
2139                      F90)                              ;;
2140                          echo    " \\"  >> f90srclist.inc                          F90)
2141                          printf " $sf" >> f90srclist.inc                              echo    " \\"  >> f90srclist.inc
2142                          ;;                              printf " $sf" >> f90srclist.inc
2143                      c)                              ;;
2144                          echo    " \\"  >> csrclist.inc                          c)
2145                          printf " $sf" >> csrclist.inc                              echo    " \\"  >> csrclist.inc
2146                          ;;                              printf " $sf" >> csrclist.inc
2147                      h)                              ;;
2148                          echo    " \\"  >> hlist.inc                          h)
2149                          printf " $sf" >> hlist.inc                              echo    " \\"  >> hlist.inc
2150                          ;;                              printf " $sf" >> hlist.inc
2151                      flow)                              ;;
2152                          echo    " \\"  >> ad_flow_files.inc                          flow)
2153                          printf " $sf" >> ad_flow_files.inc                              echo    " \\"  >> ad_flow_files.inc
2154                          ;;                              printf " $sf" >> ad_flow_files.inc
2155                  esac                              ;;
2156                        esac
2157                    fi
2158              fi              fi
2159          fi          fi
2160      done      done
# Line 1900  CFLAGS = ${CFLAGS} Line 2272  CFLAGS = ${CFLAGS}
2272  NOOPTFILES = ${NOOPTFILES}  NOOPTFILES = ${NOOPTFILES}
2273  NOOPTFLAGS = ${NOOPTFLAGS}  NOOPTFLAGS = ${NOOPTFLAGS}
2274  # Flags and libraries needed for linking  # Flags and libraries needed for linking
2275  LIBS = ${LIBS} \$(XLIBS)  LIBS = ${LIBS}
2276  # Name of the Mekfile  # Name of the Mekfile
2277  MAKEFILE=${MAKEFILE}  MAKEFILE=${MAKEFILE}
2278    
# Line 1913  cat hlist.inc         >> $MAKEFILE Line 2285  cat hlist.inc         >> $MAKEFILE
2285  cat ad_flow_files.inc >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
2286  echo >> $MAKEFILE  echo >> $MAKEFILE
2287  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
2288  echo 'F90FILES =  $(F90SRCFILES:.F=.'$FS90')' >> $MAKEFILE  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE
2289  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
2290  echo >> $MAKEFILE  echo >> $MAKEFILE
2291  echo '.SUFFIXES:' >> $MAKEFILE  echo '.SUFFIXES:' >> $MAKEFILE
# Line 1933  depend: Line 2305  depend:
2305          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2306          -rm -f makedepend.out          -rm -f makedepend.out
2307    
2308    lib: libmitgcmuv.a
2309    
2310    libmitgcmuv.a: \$(OBJFILES)
2311            ar rcv libmitgcmuv.a \$(OBJFILES)
2312    
2313  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
2314    
2315  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77FILES) \$(F90FILES)
# Line 1985  cat >>$MAKEFILE <<EOF Line 2362  cat >>$MAKEFILE <<EOF
2362    
2363  # The normal chain of rules is (  .F - .$FS - .o  )  # The normal chain of rules is (  .F - .$FS - .o  )
2364    
2365  %.o : %.F  ## This nullifies any default implicit rules concerning these two file types:
2366    ## %.o : %.F
2367    
2368  .F.$FS:  .F.$FS:
2369          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
# Line 1996  cat >>$MAKEFILE <<EOF Line 2374  cat >>$MAKEFILE <<EOF
2374  .$FS90.o:  .$FS90.o:
2375          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2376  .c.o:  .c.o:
2377          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2378    
2379  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2380  .F.p:  .F.p:
# Line 2041  cat >>$MAKEFILE <<EOF Line 2419  cat >>$MAKEFILE <<EOF
2419    
2420  # ... AD ...  # ... AD ...
2421  adall: ad_taf  adall: ad_taf
2422  adtaf: ad_taf_output.f  adtaf: ad_taf_output.$FS
2423  adtamc: ad_tamc_output.f  adtamc: ad_tamc_output.$FS
2424    
2425  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2426          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ad_config.template          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ad_config.template
2427          cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h          cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
2428          -rm -f ad_config.template          -rm -f ad_config.template
2429          @make \$(F77FILES)          @make \$(F77FILES)
2430          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2431          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS
2432    
2433  ad_taf_output.f: ad_input_code.f  ad_taf_output.$FS: ad_input_code.$FS
2434          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2435          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2436    
2437  adtafonly:  adtafonly:
2438          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2439          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2440    
2441  ad_taf: ad_taf_output.o \$(OBJFILES)  ad_taf: ad_taf_output.o \$(OBJFILES)
2442          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2443    
2444  ad_tamc_output.f: ad_input_code.f  ad_tamc_output.$FS: ad_input_code.$FS
2445          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2446          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS
2447    
2448  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2449          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2450    
2451    adonlyfwd:
2452            patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2453    
2454    adtrick:
2455            patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2456    
2457  # ... FTL ...  # ... FTL ...
2458  ftlall: ftl_taf  ftlall: ftl_taf
2459  ftltaf: ftl_taf_output.f  ftltaf: ftl_taf_output.$FS
2460  ftltamc: ftl_tamc_output.f  ftltamc: ftl_tamc_output.$FS
2461    
2462  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2463          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ftl_config.template          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ftl_config.template
2464          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2465          -rm -f ftl_config.template          -rm -f ftl_config.template
2466          @make \$(F77FILES)          @make \$(F77FILES)
2467          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2468          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2469    
2470  ftl_taf_output.f: ftl_input_code.f  ftl_taf_output.$FS: ftl_input_code.$FS
2471          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2472          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2473    
2474  ftltafonly:  ftltafonly:
2475          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2476          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2477    
2478  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2479          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2480    
2481  ftl_tamc_output.f: ftl_input_code.f  ftl_tamc_output.$FS: ftl_input_code.$FS
2482          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2483          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.f          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.$FS
2484    
2485  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2486          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2487    
2488    
2489  # ... SVD ...  # ... SVD ...
2490  svdtaf: ad_taf_output.f ftl_taf_output.f  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
2491  svdall: svd_taf          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
2492            @echo "--->>> Do make svdall afterwards to compile. <<<---"
2493    svdall: svd_touch svd_taf
2494    
2495  svd_taf: ad_taf_output.o ftl_taf_output.o \$(OBJFILES)  svd_taf: \$(OBJFILES)
2496          \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)          \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)
2497    
2498            @echo "--->>> Only COMPILE svd code! <<<---"
2499            @echo "--->>> Assumes you previously <<<---"
2500            @echo "--->>> did make svdtaf        <<<---"
2501    
2502    svd_touch:
2503            @echo "--->>> Only COMPILE svd code! <<<---"
2504            @echo "--->>> Assumes you previously <<<---"
2505            @echo "--->>> did make svdtaf        <<<---"
2506            touch ad_taf_output.$FS ftl_taf_output.$FS
2507            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
2508            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
2509            @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ftl_config.template
2510            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2511            -rm -f ftl_config.template
2512    
2513  #=========================================  #=========================================
2514    

Legend:
Removed from v.1.99  
changed lines
  Added in v.1.139

  ViewVC Help
Powered by ViewVC 1.1.22