/[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.145 by jmc, Wed Mar 29 19:28:02 2006 UTC revision 1.203 by jmc, Thu Mar 4 21:24:22 2010 UTC
# Line 13  Line 13 
13  test_for_package_in_cpp_options() {  test_for_package_in_cpp_options() {
14      cpp_options=$1      cpp_options=$1
15      pkg=$2      pkg=$2
16      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg[ ]"
17      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg[ ]"
18      test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg[ ]"
19      test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg[ ]"
20        test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg$"
21        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg$"
22        test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg$"
23        test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg$"
24  }  }
25    
26  # Search for particular CPP #cmds associated with MPI  # Search for particular CPP #cmds associated with MPI
27  # usage: test_for_mpi_in_cpp_eeoptions CPP_file  # usage: test_for_mpi_in_cpp_eeoptions CPP_file
28  test_for_mpi_in_cpp_eeoptions() {  test_for_mpi_in_cpp_eeoptions() {
29      cpp_options=$1      cpp_options=$1
30      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI[ ]"
31      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI[ ]"
32      test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI[ ]"
33      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI[ ]"
34        test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI$"
35        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI$"
36        test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI$"
37        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI$"
38  }  }
39    
40  # Search for particular string in a file. Return 1 if detected, 0 if not  # Search for particular string in a file. Return 1 if detected, 0 if not
# Line 39  test_for_string_in_file() { Line 47  test_for_string_in_file() {
47      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
48          printf "Error: In $file there is an illegal line: "          printf "Error: In $file there is an illegal line: "
49          grep -i "$strng" $file          grep -i "$strng" $file
50          return 1          exit 99
51      fi      fi
52      return 0      return 0
53  }  }
# Line 317  find_possible_configs()  { Line 325  find_possible_configs()  {
325    
326      #================================================================      #================================================================
327      #  look for possible C compilers      #  look for possible C compilers
328      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc"      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc"
329      p_CC=      p_CC=
330      for c in $tmp ; do      for c in $tmp ; do
331          rm -f ./genmake_hello.c  ./genmake_hello          rm -f ./genmake_hello.c  ./genmake_hello
# Line 356  EOF Line 364  EOF
364    
365      #================================================================      #================================================================
366      #  look for possible FORTRAN compilers      #  look for possible FORTRAN compilers
367      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95 gfortran"      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 gfortran g95"
368      p_FC=      p_FC=
369      for c in $tmp ; do      for c in $tmp ; do
370          rm -f ./hello.f ./hello          rm -f ./hello.f ./hello
# Line 511  Usage: "$0" [OPTIONS] Line 519  Usage: "$0" [OPTIONS]
519        -pdefault=NAME | --pdefault=NAME        -pdefault=NAME | --pdefault=NAME
520            Get the default package list from "NAME".            Get the default package list from "NAME".
521    
522        -bash NAME
523              Explicitly specify the Bourne or BASH shell to use
524    
525      -make NAME | -m NAME      -make NAME | -m NAME
526        --make=NAME | -m=NAME        --make=NAME | -m=NAME
527            Use "NAME" for the MAKE program. The default is "make" but            Use "NAME" for the MAKE program. The default is "make" but
# Line 570  Usage: "$0" [OPTIONS] Line 581  Usage: "$0" [OPTIONS]
581            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
582            is being used.            is being used.
583    
584        -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4
585              Use "real*4" type for _RS variable (#undef REAL4_IS_SLOW)
586              *only* works if CPP_EEOPTIONS.h allows this.
587    
588      -ignoretime | -ignore_time | --ignoretime | --ignore_time      -ignoretime | -ignore_time | --ignoretime | --ignore_time
589            Ignore all the "wall clock" routines entirely.  This will            Ignore all the "wall clock" routines entirely.  This will
590            not in any way hurt the model results -- it simply means            not in any way hurt the model results -- it simply means
# Line 579  Usage: "$0" [OPTIONS] Line 594  Usage: "$0" [OPTIONS]
594      -ts | --ts      -ts | --ts
595            Produce timing information per timestep            Produce timing information per timestep
596      -papis | --papis      -papis | --papis
597            Produce summary MFlop/s with PAPI per timestep            Produce summary MFlop/s (and IPC) with PAPI per timestep
598        -pcls | --pcls
599              Produce summary MFlop/s etc. with PCL per timestep
600      -foolad | --foolad      -foolad | --foolad
601            Fool the AD code generator            Fool the AD code generator
602      -papi | --papi      -papi | --papi
603            Performance analysis with PAPI            Performance analysis with PAPI
604        -pcl | --pcl
605              Performance analysis with PCL
606      -hpmt | --hpmt      -hpmt | --hpmt
607            Performance analysis with the HPM Toolkit            Performance analysis with the HPM Toolkit
608    
609      -gsl | --gsl      -gsl | --gsl
610            Use GSL to control floating point rounding and precision            Use GSL to control floating point rounding and precision
611        -devel | --devel
612              Add additional warning and debugging flags for development
613    
614      -mpi | --mpi      -mpi | --mpi
615            Include MPI header files and link to MPI libraries            Include MPI header files and link to MPI libraries
# Line 597  Usage: "$0" [OPTIONS] Line 618  Usage: "$0" [OPTIONS]
618            set to PATH. i.e. Include files from \$PATH/include, link to libraries            set to PATH. i.e. Include files from \$PATH/include, link to libraries
619            from \$PATH/lib and use binaries from \$PATH/bin.            from \$PATH/lib and use binaries from \$PATH/bin.
620    
621        -omp | --omp
622              Activate OpenMP code + use Compiler option OMPFLAG
623        -omp=OMPFLAG | --omp=OMPFLAG
624              Activate OpenMP code + use Compiler option OMPFLAG
625    
626      -es | --es | -embed-source | --embed-source      -es | --es | -embed-source | --embed-source
627            Embed a tarball containing the full source code            Embed a tarball containing the full source code
628            (including the Makefile, etc.) used to build the            (including the Makefile, etc.) used to build the
629            executable [off by default]            executable [off by default]
630    
     -bash NAME  
           Explicitly specify the Bourne or BASH shell to use  
   
631    While it is most often a single word, the "NAME" variables specified    While it is most often a single word, the "NAME" variables specified
632    above can in many cases be a space-delimited string such as:    above can in many cases be a space-delimited string such as:
633    
# Line 616  Usage: "$0" [OPTIONS] Line 639  Usage: "$0" [OPTIONS]
639    
640    For more detailed genmake documentation, please see:    For more detailed genmake documentation, please see:
641    
642      http://mitgcm.org/devel_HOWTO/      http://mitgcm.org/public/devel_HOWTO/
643    
644  EOF  EOF
645    
# Line 732  void FC_NAMEMANGLE(cloc) ( double *curti Line 755  void FC_NAMEMANGLE(cloc) ( double *curti
755   *curtim = *curtim/1.E6;   *curtim = *curtim/1.E6;
756  }  }
757  EOF  EOF
758      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
759        echo $COMM >> genmake_warnings
760        $COMM >> genmake_warnings 2>&1
761      RET_C=$?      RET_C=$?
762      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
763        program hello        program hello
# Line 742  EOF Line 767  EOF
767        print *," HELLO WORLD", wtime        print *," HELLO WORLD", wtime
768        end        end
769  EOF  EOF
770      $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
771        echo $COMM >> genmake_warnings
772        $COMM >> genmake_warnings 2>&1
773      RET_F=$?      RET_F=$?
774      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
775      RETVAL=$?      RETVAL=$?
# Line 755  EOF Line 782  EOF
782    
783    
784  check_HAVE_SIGREG()  {  check_HAVE_SIGREG()  {
785        if test ! "x$HAVE_SIGREG" = x ; then
786            return
787        fi
788      get_fortran_c_namemangling      get_fortran_c_namemangling
789      cat <<EOF > genmake_tc_1.c      cat <<EOF > genmake_tc_1.c
790  $FC_NAMEMANGLE  $FC_NAMEMANGLE
# Line 786  void FC_NAMEMANGLE(sigreg) (int * aip) Line 816  void FC_NAMEMANGLE(sigreg) (int * aip)
816      return;      return;
817  }  }
818  EOF  EOF
819      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
820        echo $COMM >> genmake_warnings
821        $COMM >> genmake_warnings 2>&1
822      RET_C=$?      RET_C=$?
823      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
824        program hello        program hello
# Line 812  EOF Line 844  EOF
844    
845    
846  check_HAVE_SETRLSTK()  {  check_HAVE_SETRLSTK()  {
847        if test "x$HAVE_SETRLSTK" = xt ; then
848            DEFINES="$DEFINES -DHAVE_SETRLSTK"
849            return
850        fi  
851        if test ! "x$HAVE_SETRLSTK" = x ; then
852            return
853        fi
854      get_fortran_c_namemangling      get_fortran_c_namemangling
855      cat <<EOF > genmake_tc_1.c      cat <<EOF > genmake_tc_1.c
856  $FC_NAMEMANGLE  $FC_NAMEMANGLE
# Line 827  void FC_NAMEMANGLE(setrlstk) () Line 866  void FC_NAMEMANGLE(setrlstk) ()
866      return;      return;
867  }  }
868  EOF  EOF
869      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
870        echo $COMM >> genmake_warnings
871        $COMM >> genmake_warnings 2>&1
872      RET_C=$?      RET_C=$?
873      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
874        program hello        program hello
# Line 871  void FC_NAMEMANGLE(tfsize) ( int *nbyte Line 912  void FC_NAMEMANGLE(tfsize) ( int *nbyte
912          *nbyte = -1;          *nbyte = -1;
913  }  }
914  EOF  EOF
915      make genmake_tc_1.o >> genmake_tc.log 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
916        echo $COMM >> genmake_warnings
917        $COMM >> genmake_tc.log 2>&1
918      RET_C=$?      RET_C=$?
919      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
920        program hello        program hello
# Line 922  EOF Line 965  EOF
965      cat genmake_tnc.F >> genmake_tnc.log      cat genmake_tnc.F >> genmake_tnc.log
966      echo "===  genmake_tnc.F  ===" >> genmake_tnc.log      echo "===  genmake_tnc.F  ===" >> genmake_tnc.log
967      RET_CPP=f      RET_CPP=f
968      COMM="$CPP $DEFINES $INCLUDES genmake_tnc.F"      COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES"
969      echo "$COMM" >> genmake_tnc.log      echo "$COMM" >> genmake_tnc.log
970      $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t      eval $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t
971      if test "x$RET_CPP" = xf ; then      if test "x$RET_CPP" = xf ; then
972          echo "  WARNING: CPP failed to pre-process the netcdf test." \          echo "  WARNING: CPP failed to pre-process the netcdf test." \
973              >> genmake_tnc.log              >> genmake_tnc.log
# Line 932  EOF Line 975  EOF
975              >> genmake_tnc.log              >> genmake_tnc.log
976      fi      fi
977      echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log      echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log
978      echo "  &&  $LINK -o genmake_tnc.o $LIBS" >> genmake_tnc.log      echo "  &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc.o $LIBS" >> genmake_tnc.log
979      $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \      $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
980          &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1          &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
981      RET_COMPILE=$?      RET_COMPILE=$?
982      cat genmake_tnc.log >> genmake_warnings      cat genmake_tnc.log >> genmake_warnings
983    
# Line 950  EOF Line 993  EOF
993      else      else
994          # try again with "-lnetcdf" added to the libs          # try again with "-lnetcdf" added to the libs
995          echo "try again with added '-lnetcdf'" > genmake_tnc.log          echo "try again with added '-lnetcdf'" > genmake_tnc.log
996          echo "$CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS \ " >> genmake_tnc.log          echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
997          echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log          echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
998          echo " &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log          echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
999          $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null  \          cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
1000              &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \              &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
1001              &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1              &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
1002          RET_COMPILE=$?          RET_COMPILE=$?
1003          cat genmake_tnc.log >> genmake_warnings          cat genmake_tnc.log >> genmake_warnings
1004          if test "x$RET_COMPILE" = x0 ; then          if test "x$RET_COMPILE" = x0 ; then
1005              LIBS="$LIBS -lnetcdf"              LIBS="$LIBS -lnetcdf"
1006              HAVE_NETCDF=t              HAVE_NETCDF=t
1007            else
1008            # try again with "-lnetcdff" added to the libs
1009                echo "try again with added '-lnetcdff -lnetcdf'" > genmake_tnc.log
1010                echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
1011                echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
1012                echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
1013                cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
1014                    &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
1015                    &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdff -lnetcdf >> genmake_tnc.log 2>&1
1016                RET_COMPILE=$?
1017                cat genmake_tnc.log >> genmake_warnings
1018                if test "x$RET_COMPILE" = x0 ; then
1019                    LIBS="$LIBS -lnetcdff -lnetcdf"
1020                    HAVE_NETCDF=t
1021                fi
1022          fi          fi
1023      fi      fi
1024      rm -f genmake_tnc*      rm -f genmake_tnc*
# Line 996  OPTFILE= Line 1054  OPTFILE=
1054  INCLUDES="-I. $INCLUDES"  INCLUDES="-I. $INCLUDES"
1055  FFLAGS=  FFLAGS=
1056  FOPTIM=  FOPTIM=
1057    FEXTRAFLAGS=
1058    USE_EXTENDED_SRC=
1059    EXTENDED_SRC_FLAG=
1060  CFLAGS=  CFLAGS=
1061  KFLAGS1=  KFLAGS1=
1062  KFLAGS2=  KFLAGS2=
# Line 1006  NOOPTFILES= Line 1067  NOOPTFILES=
1067  NOOPTFLAGS=  NOOPTFLAGS=
1068  MPI=  MPI=
1069  MPIPATH=  MPIPATH=
1070    OMP=
1071    OMPFLAG=
1072    USE_R4=
1073  TS=  TS=
1074  PAPIS=  PAPIS=
1075    PCLS=
1076  FOOLAD=  FOOLAD=
1077  PAPI=  PAPI=
1078    PCL=
1079  HPMT=  HPMT=
1080  GSL=  GSL=
1081    DEVEL=
1082  HAVE_TEST_L=  HAVE_TEST_L=
1083    
1084  # DEFINES checked by test compilation or command-line  # DEFINES checked by test compilation or command-line
# Line 1019  HAVE_SYSTEM= Line 1086  HAVE_SYSTEM=
1086  HAVE_FDATE=  HAVE_FDATE=
1087  FC_NAMEMANGLE=  FC_NAMEMANGLE=
1088  HAVE_CLOC=  HAVE_CLOC=
1089  HAVE_SETRLSTK=  # HAVE_SETRLSTK=
1090  HAVE_STAT=  HAVE_STAT=
1091  HAVE_NETCDF=  HAVE_NETCDF=
1092  HAVE_ETIME=  HAVE_ETIME=
# Line 1070  TAMC_EXTRA= Line 1137  TAMC_EXTRA=
1137    
1138  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1139  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
1140  gm_s2="FC CPP IEEE TS PAPIS PAPI HPMT GSL MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC IEEE USE_R4 TS PAPIS PCLS PAPI PCL HPMT GSL DEVEL MPI OMP DUMPSTATE STANDARDDIRS"
1141    
1142  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1143  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 FEXTRAFLAGS"
1144  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
1145  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
1146  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
# Line 1100  EOF Line 1167  EOF
1167    
1168  echo "===  Processing options files and arguments  ==="  echo "===  Processing options files and arguments  ==="
1169  gm_local="genmake_local"  gm_local="genmake_local"
 for i in . $MODS ; do  
     if test -r $i/$gm_local ; then  
         . $i/$gm_local  
         break  
     fi  
 done  
1170  printf "  getting local config information:  "  printf "  getting local config information:  "
1171  if test -f $gm_local ; then  if test -f $gm_local ; then
1172      echo "using $gm_local"      echo "using $gm_local"
# Line 1117  else Line 1178  else
1178  fi  fi
1179    
1180  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
 #OPTIONS=  
 #n=0  
 #for i ; do  
 #   echo "$i  $n"  
 #   setvar="OPTIONS[$n]='$i'"  
 #   #  echo "  $setvar"  
 #   eval "$setvar"  
 #   n=$(( $n + 1 ))  
 #done  
1181  #parse_options  #parse_options
1182  ac_prev=  ac_prev=
1183  for ac_option in "$@" ; do  for ac_option in "$@" ; do
# Line 1250  for ac_option in "$@" ; do Line 1302  for ac_option in "$@" ; do
1302          -noieee | --noieee)          -noieee | --noieee)
1303              IEEE= ;;              IEEE= ;;
1304    
1305            -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 )
1306                USE_R4=true ;;
1307    
1308          -ts | --ts)          -ts | --ts)
1309              TS=true ;;              TS=true ;;
1310          -papis | --papis)          -papis | --papis)
1311              PAPIS=true ;;              PAPIS=true ;;
1312            -pcls | --pcls)
1313                PCLS=true ;;
1314          -foolad | --foolad)          -foolad | --foolad)
1315              FOOLAD=true ;;              FOOLAD=true ;;
1316          -papi | --papi)          -papi | --papi)
1317              PAPI=true ;;              PAPI=true ;;
1318            -pcl | --pcl)
1319                PCL=true ;;
1320          -hpmt | --hpmt)          -hpmt | --hpmt)
1321              HPMT=true ;;              HPMT=true ;;
1322    
1323          -gsl | --gsl)          -gsl | --gsl)
1324              GSL=true ;;              GSL=true ;;
1325    
1326            -devel | --devel)
1327                DEVEL=true ;;
1328    
1329          -mpi | --mpi)          -mpi | --mpi)
1330              MPI=true ;;              MPI=true ;;
1331          -mpi=* | --mpi=*)          -mpi=* | --mpi=*)
1332              MPIPATH=$ac_optarg              MPIPATH=$ac_optarg
1333              MPI=true ;;              MPI=true ;;
1334                    
1335  #       -jam | --jam)          -omp | --omp)
1336  #           JAM=1 ;;              OMP=true ;;
1337  #       -nojam | --nojam)          -omp=* | --omp=*)
1338  #           JAM=0 ;;              OMPFLAG=$ac_optarg
1339                OMP=true ;;
1340                    
1341          -ds | --ds)          -ds | --ds)
1342              DUMPSTATE=t ;;              DUMPSTATE=t ;;
# Line 1312  done Line 1375  done
1375  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1376      echo      echo
1377      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1378      echo "  file.  This file format is no longer supported.  Please see:"      echo "  file.  This file format is no longer supported.  For directions on"
1379      echo      echo "  how to setup and use the new \"genmake2\" script, please see:"
1380      echo "    http://mitgcm.org/devel_HOWTO/"      echo "    http://mitgcm.org/devel_HOWTO/"
1381      echo      echo "  and send an email to MITgcm-support@mitgcm.org if you need help."
1382      echo "  for directions on how to setup and use the new \"genmake2\" input"      echo "WARNING: ignore \"./.genmakerc\" and continue."
     echo "  files and send an email to MITgcm-support@mitgcm.org if you want help."  
1383      echo      echo
1384  fi  fi
1385    
1386  #  Find the MITgcm ${ROOTDIR}  #  Find the MITgcm ${ROOTDIR}
1387  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1388      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1389      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 ../eesupp -a -d ../pkg ; then
1390          ROOTDIR=".."          ROOTDIR=".."
1391      else      else
1392          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
# Line 1349  if test ! -d ${ROOTDIR} ; then Line 1411  if test ! -d ${ROOTDIR} ; then
1411  fi  fi
1412    
1413  #  Find the MITgcm ${THISVER}  #  Find the MITgcm ${THISVER}
1414  if test -f "${ROOTDIR}/doc/tag-index" ; then  version_file="${ROOTDIR}/doc/tag-index"
1415      THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`  if test -f $version_file ; then
1416        THISVER=`$AWK '/^checkpoint/{print $1; exit}' $version_file`
1417    #-  remove ./BUILD_INFO.h file if older than version_file
1418        if test -f ./BUILD_INFO.h -a ./BUILD_INFO.h -ot $version_file ; then
1419            echo "  remove ./BUILD_INFO.h (older than ${version_file})"
1420            rm -f ./BUILD_INFO.h
1421        fi
1422  fi  fi
1423    
1424  if test "x$MAKEFILE" = x ; then  if test "x$MAKEFILE" = x ; then
# Line 1506  if test ! "x$MPI" = x ; then Line 1574  if test ! "x$MPI" = x ; then
1574        echo "  Turning on MPI cpp macros"        echo "  Turning on MPI cpp macros"
1575        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1576  fi  fi
1577    if test ! "x$OMP" = x ; then
1578          echo "  Add OMPFLAG and turn on OpenMP cpp macros"
1579          FFLAGS="$FFLAGS $OMPFLAG"
1580          F90FLAGS="$F90FLAGS $OMPFLAG"
1581          DEFINES="$DEFINES -DUSE_OMP_THREADING"
1582    fi
1583    
1584    if test ! "x$USE_R4" = x ; then
1585          echo "  Turning on LET_RS_BE_REAL4 cpp flag"
1586          DEFINES="$DEFINES -DLET_RS_BE_REAL4"
1587    fi
1588    
1589  if test ! "x$TS" = x ; then  if test ! "x$TS" = x ; then
1590        echo "  Turning on timing per timestep"        echo "  Turning on timing per timestep"
# Line 1514  if test ! "x$TS" = x ; then Line 1593  if test ! "x$TS" = x ; then
1593        else        else
1594              DEFINES="$DEFINES -DTIME_PER_TIMESTEP"              DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1595        fi        fi
1596          PACKAGES="$PACKAGES showflops"
1597  fi  fi
1598  if test ! "x$PAPIS" = x ; then  if test ! "x$PAPIS" = x ; then
1599        echo "  Turning on PAPI flop summary per timestep"        echo "  Turning on PAPI flop summary per timestep"
# Line 1525  if test ! "x$PAPIS" = x ; then Line 1605  if test ! "x$PAPIS" = x ; then
1605        fi        fi
1606        INCLUDES="$INCLUDES $PAPIINC"        INCLUDES="$INCLUDES $PAPIINC"
1607        LIBS="$LIBS $PAPILIB"        LIBS="$LIBS $PAPILIB"
1608          PACKAGES="$PACKAGES showflops"
1609    fi
1610    if test ! "x$PCLS" = x ; then
1611          echo "  Turning on PCL counter summary per timestep"
1612          echo "  Please make sure PCLINC, PCLLIB are defined"
1613          if test ! "x$FOOLAD" = x ; then
1614                DEFINES="$DEFINES -DUSE_PCL_FLOPS_SFP"
1615          else
1616                DEFINES="$DEFINES -DUSE_PCL_FLOPS"
1617          fi
1618          INCLUDES="$INCLUDES $PCLINC"
1619          LIBS="$LIBS $PCLLIB"
1620          PACKAGES="$PACKAGES showflops"
1621  fi  fi
1622  if test ! "x$PAPI" = x ; then  if test ! "x$PAPI" = x ; then
1623        if test ! "x$PAPIS" = x ; then        if test ! "x$PAPIS" = x ; then
# Line 1538  if test ! "x$PAPI" = x ; then Line 1631  if test ! "x$PAPI" = x ; then
1631            LIBS="$LIBS $PAPILIB"            LIBS="$LIBS $PAPILIB"
1632        fi        fi
1633  fi  fi
1634    if test ! "x$PCL" = x ; then
1635          if test ! "x$PCLS" = x ; then
1636              echo "  PCL performance analysis and flop summary per timestep cannot co-exist!"
1637              echo "  Sticking with PCL flop summary per timestep!"
1638          else
1639              echo "  Turning on performance analysis with PCL"
1640              echo "  Please make sure PCLINC, PCLLIB are defined"
1641              DEFINES="$DEFINES -DUSE_PCL"
1642              INCLUDES="$INCLUDES $PCLINC"
1643              LIBS="$LIBS $PCLLIB"
1644          fi
1645    fi
1646  if test ! "x$HPMT" = x ; then  if test ! "x$HPMT" = x ; then
1647        if test ! "x$PAPI" = x ; then        if test ! "x$PAPI" = x ; then
1648            echo "  PAPI and the HPM Toolkit cannot co-exist!"            echo "  PAPI and the HPM Toolkit cannot co-exist!"
1649            echo "  Sticking with PAPI!"            echo "  Sticking with PAPI!"
1650          else if test ! "x$PCL" = x ; then
1651              echo "  PCL and the HPM Toolkit cannot co-exist!"
1652              echo "  Sticking with PCL!"
1653        else        else
1654            echo "  Turning on performance analysis with the HPM Toolkit"            echo "  Turning on performance analysis with the HPM Toolkit"
1655            echo "  Please make sure HPMTINC, HPMTLIB are defined"            echo "  Please make sure HPMTINC, HPMTLIB are defined"
# Line 1549  if test ! "x$HPMT" = x ; then Line 1657  if test ! "x$HPMT" = x ; then
1657            INCLUDES="$INCLUDES $HPMTINC"            INCLUDES="$INCLUDES $HPMTINC"
1658            LIBS="$LIBS $HPMTLIB"            LIBS="$LIBS $HPMTLIB"
1659        fi        fi
1660          fi
1661  fi  fi
1662  if test ! "x$GSL" = x ; then  if test ! "x$GSL" = x ; then
1663        echo "  Turning on use of GSL to control floating point calculations"        echo "  Turning on use of GSL to control floating point calculations"
# Line 1557  if test ! "x$GSL" = x ; then Line 1666  if test ! "x$GSL" = x ; then
1666        INCLUDES="$INCLUDES $GSLINC"        INCLUDES="$INCLUDES $GSLINC"
1667        LIBS="$LIBS $GSLLIB"        LIBS="$LIBS $GSLLIB"
1668  fi  fi
1669    #- if USE_EXTENDED_SRC is set, add EXTENDED_SRC_FLAG to FFLAGS :
1670    if test ! "x$USE_EXTENDED_SRC" = x ; then
1671          FFLAGS="$FFLAGS $EXTENDED_SRC_FLAG"
1672          F90FIXEDFORMAT="$F90FIXEDFORMAT $EXTENDED_SRC_FLAG"
1673    fi
1674    
1675  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1676  printf "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
# Line 1636  rm -f genmake_t* Line 1750  rm -f genmake_t*
1750    
1751  printf "  Can we unlimit the stack size using $FC...  "  printf "  Can we unlimit the stack size using $FC...  "
1752  check_HAVE_SETRLSTK  check_HAVE_SETRLSTK
1753  if test "x$HAVE_SETRLSTK" != x ; then  if test "x$HAVE_SETRLSTK" = xt ; then
1754      echo "yes"      echo "yes"
1755  else  else
1756      echo "no"      echo "no"
# Line 1645  rm -f genmake_t* Line 1759  rm -f genmake_t*
1759    
1760  printf "  Can we register a signal handler using $FC...  "  printf "  Can we register a signal handler using $FC...  "
1761  check_HAVE_SIGREG  check_HAVE_SIGREG
1762  if test "x$HAVE_SIGREG" != x ; then  if test "x$HAVE_SIGREG" = xt ; then
1763      echo "yes"      echo "yes"
1764  else  else
1765      echo "no"      echo "no"
# Line 1679  fi Line 1793  fi
1793    
1794    
1795  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1796  printf "  Adding MODS directories:  "  printf "  Adding MODS directories: "
1797  for d in $MODS ; do  for d in $MODS ; do
1798      if test ! -d $d ; then      if test ! -d $d ; then
1799          echo          echo
1800          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1801          exit 1          exit 1
1802      else      else
1803          printf " $d"          printf "$d "
1804          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1805          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1806      fi      fi
# Line 1763  if test -r $ROOTDIR"/eesupp/src/Makefile Line 1877  if test -r $ROOTDIR"/eesupp/src/Makefile
1877      fi      fi
1878  fi  fi
1879    
1880  #same for exch2  #same for pkg/exch2 and pkg/regrid
1881  if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then  for pdir in exch2 regrid ; do
1882      echo "  Making source files in exch2 from  templates"      if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then
1883      ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1          echo "  Making source files in pkg/${pdir} from templates"
1884      RETVAL=$?          ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE ) > make_${pdir}.errors 2>&1
1885      if test "x${RETVAL}" = x0 ; then          RETVAL=$?
1886          rm -f make_exch2.errors          if test "x${RETVAL}" = x0 ; then
1887      else              rm -f make_${pdir}.errors
1888          echo "Error: problem encountered while building source files in exch2:"          else
1889          cat make_exch2.errors 1>&2              echo "Error: problem encountered while building source files in pkg/${pdir}:"
1890          exit 1              cat make_${pdir}.errors 1>&2
1891                exit 1
1892            fi
1893      fi      fi
1894  fi  done
1895    
1896  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1897  if  test "x${PDEPEND}" = x ; then  if  test "x${PDEPEND}" = x ; then
# Line 1886  done Line 2002  done
2002  rm -f ./.tmp_pack  rm -f ./.tmp_pack
2003  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
2004    
2005  #  Check availability of NetCDF and then either build the MNC template  #  Check for package MNC: if NetCDF is available, then build the MNC
2006  #  files or delete mnc from the list of available packages.  #  template files ; otherwise, delete mnc from the list of packages.
2007  echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1  echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
2008  RETVAL=$?  RETVAL=$?
2009  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
# Line 1921  EOF Line 2037  EOF
2037      fi      fi
2038  fi  fi
2039    
2040    #  Check for package PROFILES: if NetCDF is not available,
2041    #  then delete profiles from the list of available packages.
2042    echo $PACKAGES | grep ' profiles ' > /dev/null 2>&1
2043    RETVAL=$?
2044    if test "x$RETVAL" = x0 ; then
2045        if test "x$HAVE_NETCDF" != xt ; then
2046            cat <<EOF
2047    
2048    *********************************************************************
2049    WARNING: the "profiles" package was enabled but tests failed to
2050      compile NetCDF applications.  Please check that:
2051    
2052      1) NetCDF is correctly installed for this compiler and
2053      2) the LIBS variable (within the "optfile") specifies the correct
2054           NetCDF library to link against.
2055    
2056      Due to this failure, the "profiles" package is now DISABLED.
2057    *********************************************************************
2058    
2059    EOF
2060            PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'`
2061            DISABLE="$DISABLE profiles"
2062        fi
2063    fi
2064    
2065  echo "  applying package dependency rules"  echo "  applying package dependency rules"
2066  ck=  ck=
2067  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
2068      i=0      i=0
2069      # rtot=${#PNAME[@]}      # rtot=${#PNAME[@]}
2070      rtot=$nname      rtot=$nname
2071      while test $i -lt $rtot ; do      while test $i -le $rtot ; do
2072    
2073          #  Is $pname in the current $PACKAGES list?          #  Is $pname in the current $PACKAGES list?
2074          #  pname=${PNAME[$i]}          #  pname=${PNAME[$i]}
# Line 1961  while test "x$ck" != xtt ; do Line 2102  while test "x$ck" != xtt ; do
2102    
2103          #  Do we need to add $dname according to the dependency rules?          #  Do we need to add $dname according to the dependency rules?
2104          if test "x$pin" = xt -a "x$plus" = "x+" -a "x$din" = xf ; then          if test "x$pin" = xt -a "x$plus" = "x+" -a "x$din" = xf ; then
2105                #echo "   " $pname ": need to add :" $dname
2106              in_dis="f"              in_dis="f"
2107              for dis in $DISABLE ; do              for dis in $DISABLE ; do
2108                  if test "x$dis" = "x$dname" ; then                  if test "x$dis" = "x$dname" ; then
# Line 2105  fi Line 2247  fi
2247    
2248  #  Here, we build the list of files to be "run through" the adjoint  #  Here, we build the list of files to be "run through" the adjoint
2249  #  compiler.  #  compiler.
2250  if test -f ./ad_files ; then  if test -f ./adSrcFiles.tmp ; then
2251      rm -f ./ad_files      rm -f ./adSrcFiles.tmp
2252  fi  fi
2253  echo "  Creating the list of files for the adjoint compiler."  echo "  Creating the list of files for the adjoint compiler."
2254  for i in $SOURCEDIRS ; do  for i in $SOURCEDIRS ; do
2255      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
2256      for j in $list_files ; do      for j in $list_files ; do
2257          cat $i/$j >> ad_files          cat $i/$j >> adSrcFiles.tmp
2258      done      done
2259  done  done
2260  if test ! "x"$FS = "x.f" ; then  if test ! "x"$FS = "x.f" ; then
2261      cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f      cat adSrcFiles.tmp | sed -e "s/\.f/.$FS/g" > adSrcFiles.tmp_f
2262      mv -f ad_files_f ad_files      mv -f adSrcFiles.tmp_f adSrcFiles.tmp
2263  fi  fi
2264    
2265  echo  echo
# Line 2150  if test ! "x$DIVA" = x ; then Line 2292  if test ! "x$DIVA" = x ; then
2292          perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h          perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
2293      else      else
2294          echo " We cannot create a copy of mpif.h!"          echo " We cannot create a copy of mpif.h!"
2295          exit -1  #       exit -1
2296      fi      fi
2297  fi  fi
2298    
# Line 2175  if test ! -r ".links.tmp/foo" ; then Line 2317  if test ! -r ".links.tmp/foo" ; then
2317      exit 1      exit 1
2318  fi  fi
2319  rm -f .links.tmp/foo  rm -f .links.tmp/foo
2320    
2321    if test "x$OPENAD" != x ; then
2322        OAD_DONT_COMPILE="/dev/null"
2323        OAD_DONT_TRANSFORM="/dev/null"
2324        OAD_KEEP_ORIGINAL="/dev/null"
2325        OAD_CB2M_FILES="/dev/null"
2326        echo "  looking for dontCompile file:  "
2327        for i in "." $MODS ; do
2328            if test -r $i"/dontCompile" ; then
2329                OAD_DONT_COMPILE=$i"/dontCompile"
2330                echo "     found $OAD_DONT_COMPILE"
2331                break
2332            fi
2333        done
2334        echo "  looking for dontTransform file:  "
2335        for i in "." $MODS ; do
2336            if test -r $i"/dontTransform" ; then
2337                OAD_DONT_TRANSFORM=$i"/dontTransform"
2338                echo "     found $OAD_DONT_TRANSFORM"
2339                break
2340            fi
2341        done
2342        echo "  looking for keepOriginal file:  "
2343        for i in "." $MODS ; do
2344            if test -r $i"/keepOriginal" ; then
2345                OAD_KEEP_ORIGINAL=$i"/keepOriginal"
2346                echo "     found $OAD_KEEP_ORIGINAL"
2347                break
2348            fi
2349        done
2350        echo "  looking for cb2mFiles:  "
2351        for i in "." $MODS ; do
2352            if test -r $i"/cb2mFiles" ; then
2353                OAD_CB2M_FILES=$i"/cb2mFiles"
2354                echo "     found $OAD_CB2M_FILES"
2355                break
2356            fi
2357        done
2358        echo "   OpenAD exceptions:  "
2359    fi
2360    
2361  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2362  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2363  printf 'SRCFILES = '    > srclist.inc  printf 'F77_SRC_FILES = ' > F77srclist.tmp
2364  printf 'CSRCFILES = '   > csrclist.inc  printf 'NON_AD_F77_SRC_FILES = ' > nonADF77srclist.tmp
2365  printf 'F90SRCFILES = ' > f90srclist.inc  printf 'C_SRC_FILES = '   > csrclist.tmp
2366  printf 'HEADERFILES = ' > hlist.inc  printf 'F90_SRC_FILES = ' > F90srclist.tmp
2367  printf 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'H_SRC_FILES = '   > hsrclist.tmp
2368    printf 'AD_FLOW_FILES = ' > ad_flow_files.tmp
2369  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
2370  for d in $alldirs ; do  for d in $alldirs ; do
2371      deplist=      deplist=
2372      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
2373      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
2374        if test "x$OPENAD" != x ; then
2375            sfiles=`( echo $sfiles | grep -v _cb2m\. )`
2376        fi
2377      for sf in $sfiles ; do      for sf in $sfiles ; do
2378          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2379              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
# Line 2221  for d in $alldirs ; do Line 2408  for d in $alldirs ; do
2408                  if test "x$ignore_f" = xf ; then                  if test "x$ignore_f" = xf ; then
2409                      extn=`echo $sf | $AWK -F. '{print $NF}'`                      extn=`echo $sf | $AWK -F. '{print $NF}'`
2410                      case $extn in                      case $extn in
2411                          F)                        F)
2412                              echo    " \\"  >> srclist.inc                          echo    " \\"  >> F77srclist.tmp
2413                              printf " $sf" >> srclist.inc                          printf " $sf" >> F77srclist.tmp
2414                              ;;                          if test "x$OPENAD" != x ; then
2415                          F90)                              basename=${sf%%.F}
2416                              echo    " \\"  >> f90srclist.inc                              isAD=`egrep ^$basename.f'[  ]*' adSrcFiles.tmp`
2417                              printf " $sf" >> f90srclist.inc                              if test -z "$isAD" ; then
2418                              ;;                                  toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`
2419                          c)                                  if test -z "$toBeIgnored" ; then
2420                              echo    " \\"  >> csrclist.inc                                      echo    " \\"  >> nonADF77srclist.tmp
2421                              printf " $sf" >> csrclist.inc                                      printf " $sf" >> nonADF77srclist.tmp
2422                              ;;                                  else
2423                          h)                                      echo "    not to be compiled   :  $sf"
2424                              echo    " \\"  >> hlist.inc                                  fi
2425                              printf " $sf" >> hlist.inc                              else # file is initially listed as an AD file we want to exclude it
2426                              ;;                                   # or we want to retain the untransformed version
2427                          flow)                                  notToBeTransformed=`egrep ^$basename'[      ]*' ${OAD_DONT_TRANSFORM}`
2428                              echo    " \\"  >> ad_flow_files.inc                                  untransformedVersionToBeKept=`egrep ^$basename'[      ]*' ${OAD_KEEP_ORIGINAL}`
2429                              printf " $sf" >> ad_flow_files.inc                                  if test -n "$notToBeTransformed"; then
2430                              ;;                                      echo "    not to be transformed:  $sf"
2431                      esac                                  fi
2432                  fi                                  if test -n "$untransformedVersionToBeKept" ; then
2433                                        echo "    original to be kept  :  $sf"
2434                                    fi    
2435                                    if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then
2436                                        echo    " \\"  >> nonADF77srclist.tmp
2437                                        printf " $sf" >> nonADF77srclist.tmp
2438                                    fi
2439                                fi
2440                            fi
2441                            ;;
2442                        F90)
2443                            echo    " \\"  >> F90srclist.tmp
2444                            printf " $sf" >> F90srclist.tmp
2445                            ;;
2446                        c)
2447                            echo    " \\"  >> csrclist.tmp
2448                            printf " $sf" >> csrclist.tmp
2449                            ;;
2450                        h)
2451                            echo    " \\"  >> hsrclist.tmp
2452                            printf " $sf" >> hsrclist.tmp
2453                            ;;
2454                        flow)
2455                            echo    " \\"  >> ad_flow_files.tmp
2456                            printf " $sf" >> ad_flow_files.tmp
2457                            ;;
2458                       esac
2459                    fi
2460              fi              fi
2461          fi          fi
2462      done      done
2463      if test "x$deplist" != x ; then      if test "x$deplist" != x ; then
2464          echo "" >> srclinks.tmp        if test "$d" != "." ; then
2465            echo "" >> srclinks.tmp
2466          echo "#  These files are linked from $d" >> srclinks.tmp          echo "#  These files are linked from $d" >> srclinks.tmp
2467          echo "$deplist :" >> srclinks.tmp          echo "$deplist :" >> srclinks.tmp
2468          printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp  # We need to make sure that the link isn't already there.
2469    # This may happen when make thinks that a header file has to be "remade"
2470    # because a module it depends on has changed.  In this case we do nothing.
2471            printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $d >> srclinks.tmp
2472          fi
2473      fi      fi
2474  done  done
2475  rm -rf .links.tmp  rm -rf .links.tmp
2476  echo "" >> srclist.inc  echo "" >> F77srclist.tmp
2477  echo "" >> csrclist.inc  echo "" >> nonADF77srclist.tmp
2478  echo "" >> f90srclist.inc  echo "" >> csrclist.tmp
2479  echo "" >> hlist.inc  echo "" >> F90srclist.tmp
2480  echo "" >> ad_flow_files.inc  echo "" >> hsrclist.tmp
2481    echo "" >> ad_flow_files.tmp
2482    
2483    CMDLINE=$0
2484    for xx in "$@" ; do nw=`echo $xx | wc -w`
2485        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
2486                            else CMDLINE="$CMDLINE '$xx'" ; fi
2487    done
2488    
2489  if test -f $MAKEFILE ; then  if test -f $MAKEFILE ; then
2490      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.bak"
# Line 2269  echo "#    $MACHINE" >> $MAKEFILE Line 2495  echo "#    $MACHINE" >> $MAKEFILE
2495  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
2496  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
2497  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2498  echo "#    $0 $G2ARGS" >> $MAKEFILE  echo "#    $CMDLINE"  >> $MAKEFILE
2499  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2500  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2501    
# Line 2326  else Line 2552  else
2552      echo "EMBEDDED_FILES = " >>$MAKEFILE      echo "EMBEDDED_FILES = " >>$MAKEFILE
2553  fi  fi
2554    
 #  Note: figure out some way to add Hyades JAM libraries here  
2555  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2556  # Unix ln (link)  # Unix ln (link)
2557  LN = ${LN}  LN = ${LN}
# Line 2353  INCLUDES = ${INCLUDES} Line 2578  INCLUDES = ${INCLUDES}
2578  KFLAGS1 = ${KFLAGS1}  KFLAGS1 = ${KFLAGS1}
2579  KFLAGS2 = ${KFLAGS2}  KFLAGS2 = ${KFLAGS2}
2580  # Optim./debug for FC  # Optim./debug for FC
2581  FFLAGS = ${FFLAGS}  FFLAGS = ${FFLAGS} ${FEXTRAFLAGS}
2582  FOPTIM = ${FOPTIM}  FOPTIM = ${FOPTIM}
2583  # Optim./debug for FC  # Optim./debug for FC
2584  F90FLAGS = ${F90FLAGS}  F90FLAGS = ${F90FLAGS}
2585  F90OPTIM = ${F90OPTIM}  F90OPTIM = ${F90OPTIM}
2586    F90FIXEDFORMAT = ${F90FIXEDFORMAT}
2587  # Flags for CC  # Flags for CC
2588  CFLAGS = ${CFLAGS}  CFLAGS = ${CFLAGS}
2589  # Files that should not be optimized  # Files that should not be optimized
# Line 2370  MAKEFILE=${MAKEFILE} Line 2596  MAKEFILE=${MAKEFILE}
2596    
2597  EOF  EOF
2598    
2599  cat srclist.inc       >> $MAKEFILE  cat F77srclist.tmp      >> $MAKEFILE
2600  cat csrclist.inc      >> $MAKEFILE  cat nonADF77srclist.tmp >> $MAKEFILE
2601  cat f90srclist.inc    >> $MAKEFILE  cat csrclist.tmp        >> $MAKEFILE
2602  cat hlist.inc         >> $MAKEFILE  cat F90srclist.tmp      >> $MAKEFILE
2603  cat ad_flow_files.inc >> $MAKEFILE  cat hsrclist.tmp        >> $MAKEFILE
2604    cat ad_flow_files.tmp   >> $MAKEFILE
2605    
2606    rm -f F77srclist.tmp nonADF77srclist.tmp csrclist.tmp F90srclist.tmp hsrclist.tmp ad_flow_files.tmp
2607    
2608  echo >> $MAKEFILE  echo >> $MAKEFILE
2609  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE  
2610  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE  # add definitions for preprocessed sources
2611  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  # and note that not all systems allow case sensitive extensions
2612    # hence the $FS and $FS90 here.
2613    # for fixed format f90 files we use ff90 or FF90 resp
2614    # but these are not expected to be the original source files
2615    
2616    echo 'F77_PP_SRC_FILES = $(F77_SRC_FILES:.F=.'$FS')'      >> $MAKEFILE
2617    echo 'F90_PP_SRC_FILES = $(F90_SRC_FILES:.F90=.'$FS90')' >> $MAKEFILE
2618    echo 'OBJFILES= $(F77_SRC_FILES:.F=.o) $(C_SRC_FILES:.c=.o) $(F90_SRC_FILES:.F90=.o)' >> $MAKEFILE
2619    echo 'FLOFILES =  $(AD_FLOW_FILES:.flow=.flowdir)' >> $MAKEFILE
2620  echo >> $MAKEFILE  echo >> $MAKEFILE
2621  echo '.SUFFIXES:' >> $MAKEFILE  echo '.SUFFIXES:' >> $MAKEFILE
2622  echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE  echo '.SUFFIXES: .o .'$FS' .p .F .c .f'$FS90' .'$FS90' .FF90 .F90 .flowdir .flow' >> $MAKEFILE
 rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc  
 rm -f ad_flow_files.inc  
2623    
2624  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2625    
2626  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2627  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES) \$(EMBEDDED_FILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(OBJFILES) \$(EMBEDDED_FILES)
2628          @echo Creating \$@ ...          @echo Creating \$@ ...
2629          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2630  depend:  depend:
2631          @make links          @make links
2632          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2633          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2634          -rm -f makedepend.out          -rm -f makedepend.out
2635    
# Line 2401  lib: libmitgcmuv.a Line 2637  lib: libmitgcmuv.a
2637    
2638  libmitgcmuv.a: \$(OBJFILES)  libmitgcmuv.a: \$(OBJFILES)
2639          ar rcv libmitgcmuv.a \$(OBJFILES)          ar rcv libmitgcmuv.a \$(OBJFILES)
2640            ar d   libmitgcmuv.a main.o
2641    
2642  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(SPECIAL_FILES)
2643    
2644  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES)
2645    
2646  output.txt: \$(EXECUTABLE)  output.txt: \$(EXECUTABLE)
2647          @printf 'running ... '          @printf 'running ... '
2648          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
2649    
2650  clean:  clean:
2651          -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template          -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
2652            -rm -rf *.o
2653            -rm -rf *.$FS *.flowdir
2654            -rm -rf *.f$FS90 \$(AD_CLEAN) ad_input*
2655  Clean:  Clean:
2656          @make clean          @make clean
2657          @make cleanlinks          @make cleanlinks
2658          -rm -f \$(SPECIAL_FILES)          -rm -f \$(SPECIAL_FILES)
2659          -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak          -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log f90mkdepend.log *.bak
2660            -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log
2661  CLEAN:  CLEAN:
2662          @make Clean          @make Clean
2663          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2664          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2665          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2666          -rm -f \$(EXECUTABLE) *.txt STD* *diagnostics.log datetime          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime
2667            -rm -f *_MIT_CE_000.opt0000 costfunction*0000
2668          -rm -rf mnc_test_*          -rm -rf mnc_test_*
2669    
2670  #eh3 Makefile: makefile  #eh3 Makefile: makefile
# Line 2431  makefile: Line 2673  makefile:
2673  cleanlinks:  cleanlinks:
2674          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2675    
2676  # Special targets (SPECIAL_FILES) which are create by make  # Special targets (SPECIAL_FILES) which are created by make
2677  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
2678          @echo Creating \$@ ...          @echo Creating \$@ ...
2679          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@
# Line 2456  if test "x$EMBED_SRC" = xt ; then Line 2698  if test "x$EMBED_SRC" = xt ; then
2698    
2699  decode_files.o : EMBEDDED_FILES.h  decode_files.o : EMBEDDED_FILES.h
2700    
2701  ##  \$(F77FILES)  ##  \$(F77_PP_SRC_FILES)
2702  all_fF.tar.gz : \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile  all_fF.tar.gz : \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
2703          @echo Creating \$@ ...          @echo Creating \$@ ...
2704          -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile          -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
2705          -rm -f all_fF.tar.gz          -rm -f all_fF.tar.gz
2706          -gzip all_fF.tar          -gzip all_fF.tar
2707    
# Line 2483  cat >>$MAKEFILE <<EOF Line 2725  cat >>$MAKEFILE <<EOF
2725          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2726  .F90.$FS90:  .F90.$FS90:
2727          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2728    .FF90.f$FS90:
2729            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2730  .$FS90.o:  .$FS90.o:
2731          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2732    .f$FS90.o:
2733            cp \$< \$(basename  \$<).f90
2734            \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$(F90FIXEDFORMAT) \$(basename  \$<).f90
2735  .c.o:  .c.o:
2736          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2737    .flow.flowdir:
2738            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2739    
2740  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2741  .F.p:  .F.p:
# Line 2494  cat >>$MAKEFILE <<EOF Line 2743  cat >>$MAKEFILE <<EOF
2743  .p.$FS:  .p.$FS:
2744          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2745    
2746    EOF
2747    
2748  #=========================================  #=========================================
2749  #===  Automatic Differentiation Rules  ===  #===  Automatic Differentiation Rules  ===
2750    #===  for TAMC/TAF  ======================
2751    
2752    if test "x$OPENAD" = x ; then
2753    
2754    cat >>$MAKEFILE <<EOF
2755    
2756  TAMC           = ${TAMC}  TAMC           = ${TAMC}
2757  TAF            = ${TAF}  TAF            = ${TAF}
# Line 2510  ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF Line 2766  ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF
2766  ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"  ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"
2767  for i in $ad_vars ; do  for i in $ad_vars ; do
2768      name=$i      name=$i
2769      t1="t2=\$"`echo $i`      t1="t2=\$"`echo "$i"`
2770      eval $t1      eval $t1
2771      printf "%-20s = " $name >> $MAKEFILE      printf "%-20s = " $name >> $MAKEFILE
2772      echo $t2 >> $MAKEFILE      echo "$t2" | sed -e 's| \+| |g' >> $MAKEFILE
2773  done  done
2774    
2775  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
2776  echo >> $MAKEFILE  echo >> $MAKEFILE
2777  printf "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
2778  AD_FILES=`cat ad_files`  AD_FILES=`cat adSrcFiles.tmp`
2779  for i in $AD_FILES ; do  for i in $AD_FILES ; do
2780      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
2781      printf " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
2782  done  done
2783  echo >> $MAKEFILE  echo >> $MAKEFILE
2784  rm -f ad_files  rm -f adSrcFiles.tmp
2785    
2786  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2787    
2788  # ... AD ...  # ... AD ...
2789  adall: ad_taf  adall: \$(EXE_AD)
2790  adtaf: ad_taf_output.$FS  adtaf: ad_taf_output.$FS
2791  adtamc: ad_tamc_output.$FS  adtamc: ad_tamc_output.$FS
2792    
2793  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES) \$(AD_FLOW_FILES)
2794          @$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
2795          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
2796          -rm -f ad_config.template          -rm -f ad_config.template
2797          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2798          @make \$(AD_FLOW_FILES)          @make \$(FLOFILES)
2799          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS          cat \$(FLOFILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS
2800    
2801  ad_taf_output.$FS: ad_input_code.$FS  ad_taf_output.$FS: ad_input_code.$FS
2802          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2803            ls -l ad_input_code_ad.$FS
2804          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2805    
2806  adtafonly:  adtafonly:
2807          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2808            ls -l ad_input_code_ad.$FS
2809          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2810    
2811  ad_taf: ad_taf_output.o \$(OBJFILES)  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)
2812          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2813    
2814  ad_tamc_output.$FS: ad_input_code.$FS  ad_tamc_output.$FS: ad_input_code.$FS
2815          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
# Line 2571  ftlall: ftl_taf Line 2829  ftlall: ftl_taf
2829  ftltaf: ftl_taf_output.$FS  ftltaf: ftl_taf_output.$FS
2830  ftltamc: ftl_tamc_output.$FS  ftltamc: ftl_tamc_output.$FS
2831    
2832  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES)
2833          @$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
2834          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
2835          -rm -f ftl_config.template          -rm -f ftl_config.template
2836          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2837          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2838          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2839    
2840  ftl_taf_output.$FS: ftl_input_code.$FS  ftl_taf_output.$FS: ftl_input_code.$FS
2841          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2842            ls -l ftl_input_code_ftl.$FS
2843          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2844    
2845  ftltafonly:  ftltafonly:
2846          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2847            ls -l ftl_input_code_ftl.$FS
2848          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2849    
2850  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
# Line 2622  svd_touch: Line 2882  svd_touch:
2882          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
2883          -rm -f ftl_config.template          -rm -f ftl_config.template
2884    
2885  #=========================================  EOF
2886    
2887    fi
2888    
2889    #===  for OpenAD  ========================
2890    
2891    if test "x$OPENAD" != x ; then
2892    
2893    # ============ begin OpenAD specific section ==============
2894    
2895    cat >>$MAKEFILE <<EOF
2896    
2897    # all the source files linked from the various locations:
2898    ALL_LINKED_FILES= \
2899    \$(F77_SRC_FILES) \
2900    \$(C_SRC_FILES) \
2901    \$(H_SRC_FILES) \
2902    \$(F90_SRC_FILES) \
2903    \$(SPECIAL_FILES)
2904    
2905    ifndef OPENADROOT
2906      \$(error "Error:  environment variable OPENADROOT not defined!")
2907    endif
2908    
2909    ifndef XAIFSCHEMAROOT
2910      \$(error "Error:  environment variable XAIFSCHEMAROOT not defined!")
2911    endif
2912    
2913    ifndef XAIFBOOSTERROOT
2914      \$(error "Error:  environment variable XAIFBOOSTERROOT not defined!")
2915    endif
2916    
2917    EOF
2918    
2919    echo "  Add the source list for common block to module conversion "
2920    echo >> $MAKEFILE
2921    printf "CB2M_F90_SRC_NAMES = " >> $MAKEFILE
2922    for i in `cat ${OAD_CB2M_FILES}` ; do
2923      echo    " \\" >> $MAKEFILE
2924      printf " $i" >> $MAKEFILE
2925    done
2926    echo >> $MAKEFILE
2927    
2928    echo "  Add the source list for AD code generation"
2929    echo >> $MAKEFILE
2930    printf "AD_FILES = " >> $MAKEFILE
2931    for i in `cat ${OAD_CB2M_FILES}` ; do
2932      echo    " \\" >> $MAKEFILE
2933      printf " ${i}_mod.f$FS90" >> $MAKEFILE
2934    done
2935    AD_FILES=`cat adSrcFiles.tmp`
2936    for i in $AD_FILES ; do
2937      basename=${i%%.f}
2938      toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE} ${OAD_DONT_TRANSFORM}`
2939      if test -z "$toBeIgnored" ; then
2940        echo    " \\" >> $MAKEFILE
2941        printf " $i" >> $MAKEFILE
2942      fi
2943    done
2944    echo >> $MAKEFILE
2945    rm -f adSrcFiles.tmp
2946    
2947    cat >>$MAKEFILE <<EOF
2948    
2949    adAll: \$(EXE_AD)
2950    .PHONY: adAll
2951    
2952    CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES))
2953    
2954    .PRECIOUS: \$(CB2M_F90_PP_SRC_FILES) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90)
2955    
2956    .PHONY: adDepend
2957    adDepend: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(addsuffix _mod.FF90, \$(CB2M_F90_SRC_NAMES)) \$(F77_SRC_FILES:.F=_cb2m.FF90)
2958            \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2959            \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2960            -rm -f makedepend.out
2961    
2962    OPENAD_SUPPORT_F90_SRC_FILES = \
2963    w2f__types.F90 \
2964    OAD_active.F90 \
2965    OAD_cp.F90 \
2966    OAD_rev.F90 \
2967    OAD_tape.F90        
2968    
2969    OPENAD_SUPPORT_C_SRC_FILES = \
2970    iaddr.c \
2971    timeRatio.c
2972    
2973    f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90)
2974            cat \$^ > \$@
2975    
2976    f95_test.f90: all_mods.xb.x2w.w2f.pp.f$FS90 \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90) ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
2977            cat \$^ > \$@
2978    
2979    f95_test.out: f95_test_mods.f90 f95_test.f90
2980            f95 -fixed -w=unused -maxcontin=132 -c f95_test_mods.f90 > \$@ 2>&1
2981            f95 -fixed -w=unused -maxcontin=132 -c -fixed f95_test.f90 >> \$@ 2>&1
2982    
2983    # the file included below is created by the
2984    # postProcessor and its inclusion sets the
2985    # variable POSTPROCESSEDFILES
2986    # used below. Because the file is made during
2987    # make it won't be read until the second (recursive)
2988    # invocation in the rule below
2989    -include postProcess.make
2990    
2991    AD_OBJ_FILES_S1=\$(OPENAD_SUPPORT_F90_SRC_FILES:.F90=.o) \$(OPENAD_SUPPORT_C_SRC_FILES:.c=.o) \$(POSTPROCESSEDFILES:.f$FS90=.o)
2992    
2993    AD_OBJ_FILES_S2=\$(AD_OBJ_FILES_S1) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.o) \$(C_SRC_FILES:.c=.o) \$(F90_SRC_FILES:.F90=.o)
2994    
2995    postProcess.comp: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.tag \$(AD_OBJ_FILES_S1)
2996    ifeq (\$(MAKELEVEL),0)
2997            \$(MAKE) adAll
2998    else
2999            touch \$@
3000    endif
3001    
3002    \$(EXE_AD): \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.comp \$(AD_OBJ_FILES_S2)
3003    ifeq (\$(MAKELEVEL),1)
3004            \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(AD_OBJ_FILES_S2) \$(LIBS)
3005    else
3006            touch \$@
3007    endif
3008    
3009    # makefile debug rule
3010    openad: ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
3011    .PHONY: openad
3012    
3013    # create the module files
3014    %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk
3015            ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk
3016    
3017    # create the header files
3018    %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk
3019            ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES)
3020    
3021    # change everybody else to use the new module files:
3022    %_cb2m.FF90 : %.F ../OAD_support/cb2mUseModules.bash
3023            ../OAD_support/cb2mUseModules.bash $< ${MPI}
3024    
3025    # makefile debug rule
3026    small_f: \$(CB2M_F90_PP_SRC_FILES)
3027    .PHONY: small_f
3028    
3029    ad_output.txt: \$(EXE_AD)
3030            @printf 'linking data files ... '
3031            \$(LN) -f ../input_ad/data* ../input_ad/eedata .
3032            \$(LN) -f ../../global_ocean.90x40x15/input/*.bin .
3033            @printf 'running ... '
3034            @./\$(EXE_AD) > \$@
3035    
3036    CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS90)
3037    ad_input_code.f$FS90:  \$(CB2M_AD_FILES)
3038            cat \$^ > \$@
3039    
3040    # strip all comments and blanks to reduce
3041    # the file size in order to reduce perl's memory requirements
3042    ad_input_code_sf.f$FS90 : ad_input_code.f$FS90
3043            cat \$^ | sed -f ../OAD_support/strip.sed | sed -f ../OAD_support/stop2print.sed > \$@
3044    
3045    # mfef90 preprocessing
3046    # expand statement functions
3047    # expose mfef90 specific substring handling
3048    # add the w2f__types module
3049    ad_input_code_sf.w2f.f$FS90: ad_input_code_sf.f$FS90 mfef90 whirl2f whirl2f_be w2f__types.f90
3050            ./mfef90 -r8 -z -F -N132 \$<
3051            mv \$<.B \$(basename \$<).B
3052            ./whirl2f -openad \$(basename \$<).B
3053            cat w2f__types.f90 \$(basename \$<).w2f.f > \$@
3054    
3055    # canonicalizer
3056    ad_input_code_sf.w2f.pre.f$FS90: ad_input_code_sf.w2f.f$FS90 preProcess.py
3057            ./preProcess.py --timing --r8 -H -S \$< -o \$@
3058    
3059    # F -> WHIRL
3060    # note that the canonicalized version cuts off at col 72
3061    # doing this also for string constants which is ok as long
3062    # as we are in fixed mode and cut of exactly there.
3063    # Otherwise mfef90 patches in spaces to fill up to 72 (or 132)
3064    # characters respectively.
3065    ad_input_code_sf.w2f.pre.B: ad_input_code_sf.w2f.pre.f$FS90 mfef90
3066            ./mfef90 -r8 -z -F \$<
3067            mv \$<.B \$@
3068    
3069    # WHIRL -> XAIF
3070    ad_input_code_sf.w2f.pre.xaif : ad_input_code_sf.w2f.pre.B whirl2xaif
3071            ./whirl2xaif -s -n --debug 1 -o \$@ \$<
3072    
3073    # XAIF -> XAIF'
3074    ad_input_code_sf.w2f.pre.xb.xaif : ad_input_code_sf.w2f.pre.xaif xaif.xsd xaif_base.xsd xaif_inlinable_intrinsics.xsd xaif_derivative_propagator.xsd xaif_output.xsd oadDriver
3075            ./oadDriver -f -t forward_step -i \$< -c \${XAIFSCHEMAROOT}/schema/examples/inlinable_intrinsics.xaif -o \$@ -I -r
3076    
3077    # XAIF' -> WHIRL'
3078    ad_input_code_sf.w2f.pre.xb.x2w.B : ad_input_code_sf.w2f.pre.xb.xaif xaif2whirl
3079            ./xaif2whirl --debug 1 ad_input_code_sf.w2f.pre.B \$<
3080    
3081    # WHIRL' -> F'
3082    ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.B whirl2f whirl2f_be
3083            ./whirl2f -FLIST:ftn_file=\$@ -openad \$<
3084    
3085    # insert template directives
3086    ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90 ../OAD_support/insertTemplateDir.bash
3087            ../OAD_support/insertTemplateDir.bash \$< \$@
3088    
3089    PPEXTRAS=\$(wildcard ../OAD_support/ad_template.*.F) ../OAD_support/ad_inline.F
3090    # postprocess F'
3091    postProcess.tag: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90 postProcess.py \$(PPEXTRAS:.F=.f)
3092            # the target is a placeholder to signal execution of the rule
3093            touch \$@
3094            # this step also creates the file postProcess.make but we cannot
3095            # name it as the target or else make will try to remake it for
3096            # the include directive above for any rule, e.g. make clean
3097            ./postProcess.py --progress --timing --outputFormat=fixed -m r -i ../OAD_support/ad_inline.f --width 4 \$<
3098    
3099    # setup some links
3100    %.xsd:
3101            \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .
3102    
3103    mfef90:
3104            \$(LN) \${OPEN64ROOT}/crayf90/sgi/mfef90 .
3105    
3106    # link the support files:
3107    \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES):
3108            \$(LN) ../OAD_support/\$@ .
3109    
3110    whirl2xaif xaif2whirl:
3111            \$(LN) \${OPENADFORTTK}/bin/\$@ .
3112    
3113    preProcess.py postProcess.py:
3114            \$(LN) \${OPENADFORTTK_BASE}/tools/SourceProcessing/\$@ .
3115    
3116    whirl2f whirl2f_be:
3117            \$(LN) \${OPEN64ROOT}/whirl2f/\$@ .
3118    
3119    oadDriver:
3120            \$(LN) \${XAIFBOOSTERROOT}/xaifBooster/algorithms/BasicBlockPreaccumulationReverse/driver/oadDriver \$@
3121    
3122    AD_CLEAN += *_mod.h *_mod.F90 *.FF90 *.mod-whirl temp.sed oad_cp.* postProcess.make postProcess.tag postProcess.comp \$(PPEXTRAS:.F=.f)
3123    
3124    # ============ end OpenAD specific section ==============
3125    
3126  EOF  EOF
3127    
3128    fi
3129    
3130    #=========================================
3131    
3132  if test "x$EXEHOOK" != x ; then  if test "x$EXEHOOK" != x ; then
3133      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
3134  fi  fi

Legend:
Removed from v.1.145  
changed lines
  Added in v.1.203

  ViewVC Help
Powered by ViewVC 1.1.22