/[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.211 by jmc, Tue Nov 2 22:45:07 2010 UTC revision 1.234 by jmc, Fri Aug 17 17:27:57 2012 UTC
# Line 1  Line 1 
1  #! /usr/bin/env bash  #! /usr/bin/env bash
2  #  #
3  # $Header$  # $Header$
4    # $Name$
5  #  #
6  # Makefile generator for MITgcm UV codes  # Makefile generator for MITgcm UV codes
7  #   created  by cnh 03/98  #   created  by cnh 03/98
# Line 8  Line 9 
9  #   modified by aja 01/00  #   modified by aja 01/00
10  #   rewritten in bash by eh3 08/03  #   rewritten in bash by eh3 08/03
11    
12    #  Explain usage
13    usage()  {
14    cat <<EOF
15    
16    Usage: "$0" [OPTIONS]
17      where [OPTIONS] can be:
18    
19        -help | --help | -h | --h
20              Print this help message and exit.
21    
22        -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME
23          -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME
24              Use "NAME" as the adoptfile.  By default, the file at
25              "tools/adjoint_options/adjoint_default" will be used.
26    
27        -nooptfile | --nooptfile
28          -optfile NAME | --optfile NAME | -of NAME | --of NAME
29          -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
30              Use "NAME" as the optfile.  By default, an attempt will be
31              made to find an appropriate "standard" optfile in the
32              tools/build_options/ directory.
33    
34        -pdepend NAME | --pdepend NAME
35          -pdepend=NAME | --pdepend=NAME
36              Get package dependency information from "NAME".
37    
38        -pgroups NAME | --pgroups NAME
39          -pgroups=NAME | --pgroups=NAME
40              Get the package groups information from "NAME".
41    
42        -bash NAME
43              Explicitly specify the Bourne or BASH shell to use
44    
45        -make NAME | -m NAME
46          --make=NAME | -m=NAME
47              Use "NAME" for the MAKE program. The default is "make" but
48              many platforms, "gmake" is the preferred choice.
49    
50        -makefile NAME | -mf NAME
51          --makefile=NAME | -mf=NAME
52              Call the makefile "NAME".  The default is "Makefile".
53    
54        -makedepend NAME | -md NAME
55          --makedepend=NAME | -md=NAME
56              Use "NAME" for the MAKEDEPEND program.
57    
58        -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
59          -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
60              Specify the location of the MITgcm ROOTDIR as "NAME".
61              By default, genamke will try to find the location by
62              looking in parent directories (up to the 5th parent).
63    
64        -mods NAME | --mods NAME | -mo NAME | --mo NAME
65          -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME
66              Here, "NAME" specifies a list of directories that are
67              used for additional source code.  Files found in the
68              "mods list" are given preference over files of the same
69              name found elsewhere.
70    
71        -disable NAME | --disable NAME
72          -disable=NAME | --disable=NAME
73              Here "NAME" specifies a list of packages that we don't
74              want to use.  If this violates package dependencies,
75              genamke will exit with an error message.
76    
77        -enable NAME | --enable NAME
78          -enable=NAME | --enable=NAME
79              Here "NAME" specifies a list of packages that we wish
80              to specifically enable.  If this violates package
81              dependencies, genamke will exit with an error message.
82    
83        -standarddirs NAME | --standarddirs NAME
84          -standarddirs=NAME | --standarddirs=NAME
85              Here, "NAME" specifies a list of directories to be
86              used as the "standard" code.
87    
88        -fortran NAME | --fortran NAME | -fc NAME | --fc NAME
89          -fc=NAME | --fc=NAME
90              Use "NAME" as the fortran compiler.  By default, genmake
91              will search for a working compiler by trying a list of
92              "usual suspects" such as g77, f77, etc.
93    
94        -cc NAME | --cc NAME | -cc=NAME | --cc=NAME
95              Use "NAME" as the C compiler.  By default, genmake
96              will search for a working compiler by trying a list of
97              "usual suspects" such as gcc, c89, cc, etc.
98    
99        -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4
100              Use "real*4" type for _RS variable (#undef REAL4_IS_SLOW)
101              *only* works if CPP_EEOPTIONS.h allows this.
102    
103        -ignoretime | -ignore_time | --ignoretime | --ignore_time
104              Ignore all the "wall clock" routines entirely.  This will
105              not in any way hurt the model results -- it simply means
106              that the code that checks how long the model spends in
107              various routines will give junk values.
108    
109        -ts | --ts
110              Produce timing information per timestep
111        -papis | --papis
112              Produce summary MFlop/s (and IPC) with PAPI per timestep
113        -pcls | --pcls
114              Produce summary MFlop/s etc. with PCL per timestep
115        -foolad | --foolad
116              Fool the AD code generator
117        -papi | --papi
118              Performance analysis with PAPI
119        -pcl | --pcl
120              Performance analysis with PCL
121        -hpmt | --hpmt
122              Performance analysis with the HPM Toolkit
123    
124        -ieee | --ieee
125              use IEEE numerics.  Note that this option *only* works
126              if it is supported by the OPTFILE that is being used.
127        -devel | --devel
128              Add additional warning and debugging flags for development
129              (if supported by the OPTFILE); also switch to IEEE numerics.
130        -gsl | --gsl
131              Use GSL to control floating point rounding and precision
132    
133        -mpi | --mpi
134              Include MPI header files and link to MPI libraries
135        -mpi=PATH | --mpi=PATH
136              Include MPI header files and link to MPI libraries using MPI_ROOT
137              set to PATH. i.e. Include files from \$PATH/include, link to libraries
138              from \$PATH/lib and use binaries from \$PATH/bin.
139    
140        -omp | --omp
141              Activate OpenMP code + use Compiler option OMPFLAG
142        -omp=OMPFLAG | --omp=OMPFLAG
143              Activate OpenMP code + use Compiler option OMPFLAG
144    
145        -es | --es | -embed-source | --embed-source
146              Embed a tarball containing the full source code
147              (including the Makefile, etc.) used to build the
148              executable [off by default]
149    
150        -ds | --ds
151              Report genmake internal variables status (DUMPSTATE)
152              to file "genmake_state" (for debug purpose)
153    
154      While it is most often a single word, the "NAME" variables specified
155      above can in many cases be a space-delimited string such as:
156    
157        --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'
158        -mods=dir1   -mods='dir1'   -mods='dir1 dir2 dir3'
159        -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32'
160    
161      which, depending upon your shell, may need to be single-quoted.
162    
163      For more detailed genmake documentation, please see:
164    
165        http://mitgcm.org/public/devel_HOWTO/
166    
167    EOF
168    
169        exit 1
170    }
171    
172  # Search for particular CPP #cmds associated with packages  # Search for particular CPP #cmds associated with packages
173  # usage: test_for_package_in_cpp_options CPP_file package_name  # usage: test_for_package_in_cpp_options CPP_file package_name
174  test_for_package_in_cpp_options() {  test_for_package_in_cpp_options() {
# Line 136  EOF Line 297  EOF
297  .F.$tfs:  .F.$tfs:
298          $LN \$< \$@          $LN \$< \$@
299  EOF  EOF
300      $MAKE "genmake_hello."$tfs > /dev/null 2>&1      $MAKE -f $MAKEFILE "genmake_hello."$tfs > /dev/null 2>&1
301      RETVAL=$?      RETVAL=$?
302      if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then      if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then
303          if test "x$FS" = x ; then          if test "x$FS" = x ; then
# Line 164  EOF Line 325  EOF
325      return      return
326  }  }
327    
   
328  look_for_makedepend()  {  look_for_makedepend()  {
329    
330      #  The "original" makedepend is part of the Imake system that is      #  The "original" makedepend is part of the Imake system that is
# Line 185  look_for_makedepend()  { Line 345  look_for_makedepend()  {
345      #    3) locally build and use the cyrus implementation      #    3) locally build and use the cyrus implementation
346      #    4) fall back to the buggy local xmakedpend script      #    4) fall back to the buggy local xmakedpend script
347      #      #
348        echo >> $LOGFILE
349        echo "running: look_for_makedepend()" >> $LOGFILE
350        if test "x${MAKEDEPEND}" != x ; then
351            echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1
352            RETVAL=$?
353            if test x"$RETVAL" = x0 ; then
354                build_cyrus_makedepend
355                RETVAL=$?
356                if test "x$RETVAL" != x0 ; then
357                    echo "WARNING: unable to build cyrus-makedepend. Try 'makedepend'"
358                    MAKEDEPEND=
359                fi
360            else
361                echo "${MAKEDEPEND}" | grep 'tools.xmakedepend' > /dev/null 2>&1
362                RETVAL=$?
363                if test "x$RETVAL" = x0 ; then
364                    MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
365                fi
366                echo " -->     MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
367            fi
368        fi
369      if test "x${MAKEDEPEND}" = x ; then      if test "x${MAKEDEPEND}" = x ; then
370          which makedepend > /dev/null 2>&1          which makedepend > /dev/null 2>&1
371          RV0=$?          RV0=$?
# Line 203  EOF Line 384  EOF
384        stop        stop
385        end        end
386  EOF  EOF
387          makedepend genmake_tc.f > /dev/null 2>&1          makedepend -f $MAKEFILE genmake_tc.f > /dev/null 2>&1
388          RV1=$?          RV1=$?
389          test -f $MAKEFILE  &&  rm -f $MAKEFILE          test -f $MAKEFILE  &&  rm -f $MAKEFILE
390          test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE          test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
391          if test "x${RV0}${RV1}" = x00 ; then          if test "x${RV0}${RV1}" = x00 ; then
392              MAKEDEPEND=makedepend              MAKEDEPEND=makedepend
393                echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
394          else          else
395              echo "    a system-default makedepend was not found."              echo "    system-default makedepend not found. Try to build cyrus-makedepend"
   
396              #  Try to build the cyrus implementation              #  Try to build the cyrus implementation
397              build_cyrus_makedepend              build_cyrus_makedepend
398              RETVAL=$?              RETVAL=$?
399              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
400                    echo "WARNING: unable to build cyrus-makedepend. Use local xmakedepend"
401                  MAKEDEPEND='$(TOOLSDIR)/xmakedepend'                  MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
402                    echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
403              fi              fi
             rm -f ./genmake_cy_md  
         fi  
     else  
         #  echo "MAKEDEPEND=${MAKEDEPEND}"  
         echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1  
         RETVAL=$?  
         if test x"$RETVAL" = x0 ; then  
             build_cyrus_makedepend  
404          fi          fi
405      fi      fi
406  }  }
407    
   
408  build_cyrus_makedepend()  {  build_cyrus_makedepend()  {
409        echo >> $LOGFILE
410        echo "running: build_cyrus_makedepend()" >> $LOGFILE
411      rm -f ./genmake_cy_md      rm -f ./genmake_cy_md
412      (      (
413          cd $ROOTDIR/tools/cyrus-imapd-makedepend  \          cd $ROOTDIR/tools/cyrus-imapd-makedepend  \
# Line 248  build_cyrus_makedepend()  { Line 424  build_cyrus_makedepend()  {
424      rm -f ./genmake_cy_md      rm -f ./genmake_cy_md
425      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
426          MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'          MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
427            echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
428          return 0          return 0
429      else      else
430          echo "WARNING: unable to build cyrus-imapd-makedepend"          echo "WARNING: fail to build cyrus-imapd-makedepend" >> $LOGFILE
431          return 1          return 1
432      fi      fi
433  }  }
434    
   
435  build_embed_encode()  build_embed_encode()
436  {  {
437      printf "  building the embed-encode utility...  "      printf "  building the embed-encode utility...  "
# Line 274  build_embed_encode() Line 450  build_embed_encode()
450              RETVAL=$?              RETVAL=$?
451              if test "x$RETVAL" = x0 ; then              if test "x$RETVAL" = x0 ; then
452                  echo "OK"                  echo "OK"
                 DEFINES="$DEFINES -DHAVE_EMBED_SRC"  
453                  return 0                  return 0
454              fi              fi
455          done          done
# Line 286  build_embed_encode() Line 461  build_embed_encode()
461          return 1          return 1
462      fi      fi
463      echo "OK"      echo "OK"
     DEFINES="$DEFINES -DHAVE_EMBED_SRC"  
464  }  }
465    
466    #  look for possible C compilers
467  # Guess possible config options for this host  look_for_C_compilers() {
468  find_possible_configs()  {      echo >> $LOGFILE
469        echo "running: look_for_C_compilers()" >> $LOGFILE
470      tmp1=`uname`"_"`uname -m`      rm -f ./genmake_hello.c  ./genmake_hello
471      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`      cat >> genmake_hello.c << EOF
     tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`  
     tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`  
     tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`  
     tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`  
     PLATFORM=$tmp3  
     echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32  
     OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`  
     echo "  The platform appears to be:  $PLATFORM"  
   
     echo "test" > test  
     ln -s ./test link  
     RETVAL=$?  
     if test "x${RETVAL}" = x0 ; then  
         LN="ln -s"  
     else  
         echo "Error: \"ln -s\" does not appear to work on this system!"  
         echo "  For help, please contact <MITgcm-support@mitgcm.org>."  
         exit 1  
     fi  
     rm -f test link  
   
     if test "x$CPP" = x ; then  
         CPP="cpp -traditional -P"  
     fi  
   
     look_for_makedepend  
   
     #================================================================  
     #  look for possible C compilers  
     tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc"  
     p_CC=  
     for c in $tmp ; do  
         rm -f ./genmake_hello.c  ./genmake_hello  
         cat >> genmake_hello.c << EOF  
472  #include <stdio.h>  #include <stdio.h>
473  int main(int argc, char **argv) {  int main(int argc, char **argv) {
474    printf("Hello!\n");    printf("Hello!\n");
475    return 0;    return 0;
476  }  }
477  EOF  EOF
478          $c -o genmake_hello genmake_hello.c > /dev/null 2>&1      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc"
479        p_CC=
480        for c in $tmp ; do
481            COMM="$c $CFLAGS -o genmake_hello genmake_hello.c"
482            echo $COMM >> $LOGFILE
483            $COMM >> $LOGFILE 2>&1
484          RETVAL=$?          RETVAL=$?
485          if test "x${RETVAL}" = x0 ; then          if test "x${RETVAL}" = x0 ; then
486                echo " $c test successful" >> $LOGFILE
487              p_CC="$p_CC $c"              p_CC="$p_CC $c"
488          fi          fi
489      done      done
# Line 353  Error: No C compilers were found in your Line 499  Error: No C compilers were found in your
499  EOF  EOF
500          exit 1          exit 1
501      else      else
502          echo "  The possible C compilers found in your path are:"          echo "  The possible C compilers found in your path are: $p_CC" | tee -a $LOGFILE
         echo "   "$p_CC  
503          if test "x$CC" = x ; then          if test "x$CC" = x ; then
504              CC=`echo $p_CC | $AWK '{print $1}'`              CC=`echo $p_CC | $AWK '{print $1}'`
505              echo "  Setting C compiler to: "$CC              echo "  Setting C compiler to: "$CC
506          fi          fi
507      fi      fi
508        echo " --> set CC='$CC'" >> $LOGFILE
509    }
510    
511    # Guess possible config options for this host
512    find_possible_optfile()  {
513    
514        echo >> $LOGFILE
515        echo "running: find_possible_optfile()" >> $LOGFILE
516        tmp1=`uname`"_"`uname -m`
517        tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
518        tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
519        tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`
520        tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`
521        tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`
522        PLATFORM=$tmp3
523        echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
524        OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
525        echo "  The platform appears to be:  $PLATFORM" | tee -a $LOGFILE
526    
527      #================================================================      #================================================================
528      #  look for possible FORTRAN compilers      #  look for possible FORTRAN compilers
529      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 gfortran g95"      echo "  look for possible FORTRAN compilers" >> $LOGFILE
530        tmp="$MITGCM_FC $FC efc gfortran g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 g95"
531      p_FC=      p_FC=
532      for c in $tmp ; do      rm -f ./genmake_hello.f
533          rm -f ./hello.f ./hello      cat >> genmake_hello.f <<EOF
         cat >> hello.f <<EOF  
534        program hello        program hello
535        do i=1,3        do i=1,3
536          print *, 'hello world : ', i          print *, 'hello world : ', i
537        enddo        enddo
538        end        end
539  EOF  EOF
540          $c -o hello hello.f > /dev/null 2>&1      for f in $tmp ; do
541            COMM="$f -o genmake_hello genmake_hello.f"
542            echo $COMM >> $LOGFILE
543            $COMM >> $LOGFILE 2>&1
544          RETVAL=$?          RETVAL=$?
545          if test "x${RETVAL}" = x0 ; then          if test "x${RETVAL}" = x0 ; then
546              p_FC="$p_FC $c"              echo " $f test successful" >> $LOGFILE
547                p_FC="$p_FC $f"
548          fi          fi
549      done      done
550      rm -f ./hello.f ./hello      rm -f ./genmake_hello.f ./genmake_hello
551      if test "x${p_FC}" = x ; then      if test "x${p_FC}" = x ; then
552          cat 1>&2 <<EOF          cat 1>&2 <<EOF
553    
# Line 393  Error: No Fortran compilers were found i Line 560  Error: No Fortran compilers were found i
560  EOF  EOF
561          exit 1          exit 1
562      else      else
563          echo "  The possible FORTRAN compilers found in your path are:"          echo "  The possible FORTRAN compilers found in your path are: $p_FC" | tee -a $LOGFILE
         echo "   "$p_FC  
564      fi      fi
565    
566      #  Use the first of the compilers found in the current PATH      #  Use the first of the compilers found in the current PATH
# Line 403  EOF Line 569  EOF
569          for i in $p_FC ; do          for i in $p_FC ; do
570              OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i              OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
571              if test -r $OPTFILE ; then              if test -r $OPTFILE ; then
572                  echo "  Setting OPTFILE to: "$OPTFILE                  echo "  Setting OPTFILE to: "$OPTFILE | tee -a $LOGFILE
573                  break                  break
574              fi              fi
575          done          done
# Line 415  EOF Line 581  EOF
581               echo "  I looked for the file "$OPTFILE" but did not find it"               echo "  I looked for the file "$OPTFILE" but did not find it"
582          fi          fi
583      fi      fi
584  #    echo "  The options file:  $p_OF"  
 #    echo "    appears to match so we'll use it."  
 #   for i in $p_FC ; do  
 #p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i  
 #if test -r $p_OF ; then  
 #    OPTFILE=$p_OF  
 #    echo "  The options file:  $p_OF"  
 #    echo "    appears to match so we'll use it."  
 #    break  
 #fi  
 #   done  
585      if test "x$OPTFILE" = x ; then      if test "x$OPTFILE" = x ; then
586          cat 1>&2 <<EOF          cat 1>&2 <<EOF
587    
# Line 470  EOF Line 626  EOF
626  #       fi  #       fi
627  #       rm -f test.f out  #       rm -f test.f out
628  #     fi  #     fi
   
629  }  }
630    
631  #  Parse the package dependency information  #  Parse the package dependency information
# Line 488  get_pdepend_list()  { Line 643  get_pdepend_list()  {
643      fi      fi
644      . ./.pd_tmp      . ./.pd_tmp
645      rm -f ./.pd_tmp      rm -f ./.pd_tmp
   
 }  
   
   
 #  Explain usage  
 usage()  {  
 cat <<EOF  
   
 Usage: "$0" [OPTIONS]  
   where [OPTIONS] can be:  
   
     -help | --help | -h | --h  
           Print this help message and exit.  
   
     -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME  
       -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME  
           Use "NAME" as the adoptfile.  By default, the file at  
           "tools/adjoint_options/adjoint_default" will be used.  
   
     -nooptfile | --nooptfile  
       -optfile NAME | --optfile NAME | -of NAME | --of NAME  
       -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME  
           Use "NAME" as the optfile.  By default, an attempt will be  
           made to find an appropriate "standard" optfile in the  
           tools/build_options/ directory.  
   
     -pdepend NAME | --pdepend NAME  
       -pdepend=NAME | --pdepend=NAME  
           Get package dependency information from "NAME".  
   
     -pgroups NAME | --pgroups NAME  
       -pgroups=NAME | --pgroups=NAME  
           Get the package groups information from "NAME".  
   
     -bash NAME  
           Explicitly specify the Bourne or BASH shell to use  
   
     -make NAME | -m NAME  
       --make=NAME | -m=NAME  
           Use "NAME" for the MAKE program. The default is "make" but  
           many platforms, "gmake" is the preferred choice.  
   
     -makefile NAME | -mf NAME  
       --makefile=NAME | -mf=NAME  
           Call the makefile "NAME".  The default is "Makefile".  
   
     -makedepend NAME | -md NAME  
       --makedepend=NAME | -md=NAME  
           Use "NAME" for the MAKEDEPEND program.  
   
     -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME  
       -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME  
           Specify the location of the MITgcm ROOTDIR as "NAME".  
           By default, genamke will try to find the location by  
           looking in parent directories (up to the 5th parent).  
   
     -mods NAME | --mods NAME | -mo NAME | --mo NAME  
       -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME  
           Here, "NAME" specifies a list of directories that are  
           used for additional source code.  Files found in the  
           "mods list" are given preference over files of the same  
           name found elsewhere.  
   
     -disable NAME | --disable NAME  
       -disable=NAME | --disable=NAME  
           Here "NAME" specifies a list of packages that we don't  
           want to use.  If this violates package dependencies,  
           genamke will exit with an error message.  
   
     -enable NAME | --enable NAME  
       -enable=NAME | --enable=NAME  
           Here "NAME" specifies a list of packages that we wish  
           to specifically enable.  If this violates package  
           dependencies, genamke will exit with an error message.  
   
     -standarddirs NAME | --standarddirs NAME  
       -standarddirs=NAME | --standarddirs=NAME  
           Here, "NAME" specifies a list of directories to be  
           used as the "standard" code.  
   
     -fortran NAME | --fortran NAME | -fc NAME | --fc NAME  
       -fc=NAME | --fc=NAME  
           Use "NAME" as the fortran compiler.  By default, genmake  
           will search for a working compiler by trying a list of  
           "usual suspects" such as g77, f77, etc.  
   
     -cc NAME | --cc NAME | -cc=NAME | --cc=NAME  
           Use "NAME" as the C compiler.  By default, genmake  
           will search for a working compiler by trying a list of  
           "usual suspects" such as gcc, c89, cc, etc.  
   
     -[no]ieee | --[no]ieee  
           Do or don't use IEEE numerics.  Note that this option  
           *only* works if it is supported by the OPTFILE that  
           is being used.  
   
     -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4  
           Use "real*4" type for _RS variable (#undef REAL4_IS_SLOW)  
           *only* works if CPP_EEOPTIONS.h allows this.  
   
     -ignoretime | -ignore_time | --ignoretime | --ignore_time  
           Ignore all the "wall clock" routines entirely.  This will  
           not in any way hurt the model results -- it simply means  
           that the code that checks how long the model spends in  
           various routines will give junk values.  
   
     -ts | --ts  
           Produce timing information per timestep  
     -papis | --papis  
           Produce summary MFlop/s (and IPC) with PAPI per timestep  
     -pcls | --pcls  
           Produce summary MFlop/s etc. with PCL per timestep  
     -foolad | --foolad  
           Fool the AD code generator  
     -papi | --papi  
           Performance analysis with PAPI  
     -pcl | --pcl  
           Performance analysis with PCL  
     -hpmt | --hpmt  
           Performance analysis with the HPM Toolkit  
   
     -gsl | --gsl  
           Use GSL to control floating point rounding and precision  
     -devel | --devel  
           Add additional warning and debugging flags for development  
   
     -mpi | --mpi  
           Include MPI header files and link to MPI libraries  
     -mpi=PATH | --mpi=PATH  
           Include MPI header files and link to MPI libraries using MPI_ROOT  
           set to PATH. i.e. Include files from \$PATH/include, link to libraries  
           from \$PATH/lib and use binaries from \$PATH/bin.  
   
     -omp | --omp  
           Activate OpenMP code + use Compiler option OMPFLAG  
     -omp=OMPFLAG | --omp=OMPFLAG  
           Activate OpenMP code + use Compiler option OMPFLAG  
   
     -es | --es | -embed-source | --embed-source  
           Embed a tarball containing the full source code  
           (including the Makefile, etc.) used to build the  
           executable [off by default]  
   
   While it is most often a single word, the "NAME" variables specified  
   above can in many cases be a space-delimited string such as:  
   
     --enable pkg1   --enable 'pkg1 pkg2'   --enable 'pkg1 pkg2 pkg3'  
     -mods=dir1   -mods='dir1'   -mods='dir1 dir2 dir3'  
     -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32'  
   
   which, depending upon your shell, may need to be single-quoted.  
   
   For more detailed genmake documentation, please see:  
   
     http://mitgcm.org/public/devel_HOWTO/  
   
 EOF  
   
     exit 1  
646  }  }
647    
648  #  Build a CPP macro to automate calling C routines from FORTRAN  #  Build a CPP macro to automate calling C routines from FORTRAN
# Line 656  get_fortran_c_namemangling()  { Line 652  get_fortran_c_namemangling()  {
652      if test ! "x$FC_NAMEMANGLE" = x ; then      if test ! "x$FC_NAMEMANGLE" = x ; then
653          return 0          return 0
654      fi      fi
655      echo "running: get_fortran_c_namemangling()" >> $LOGFILE      echo " running: get_fortran_c_namemangling()" >> $LOGFILE
656    
657      default_nm="#define FC_NAMEMANGLE(X) X ## _"      default_nm="#define FC_NAMEMANGLE(X) X ## _"
658    
659      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
660  void tcall( char * string ) { tsub( string ); }  void tcall( char * string ) { tsub( string ); }
661  EOF  EOF
662      $MAKE genmake_test.o >> $LOGFILE 2>&1      COMM="$CC $CFLAGS -c genmake_test.c"
663        echo ' '$COMM >> $LOGFILE
664        $COMM >> $LOGFILE 2>&1
665      RETVAL=$?      RETVAL=$?
666      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
667          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
668          cat <<EOF>> $LOGFILE          cat <<EOF>> $LOGFILE
669    
670  WARNING: C test compile fails   WARNING: C test compile fails
671  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'   WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
672  WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here   WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
673  EOF  EOF
674          return 1          return 1
675      fi      fi
# Line 681  EOF Line 679  EOF
679          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
680          cat <<EOF>> $LOGFILE          cat <<EOF>> $LOGFILE
681    
682  WARNING: The "nm" command failed.   WARNING: The "nm" command failed.
683  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'   WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
684  WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here   WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here
685  EOF  EOF
686          return 1          return 1
687      fi      fi
# Line 693  EOF Line 691  EOF
691        call tsub( string )        call tsub( string )
692        end        end
693  EOF  EOF
694      $FC $FFLAGS -c genmake_tcomp.$FS >> $LOGFILE 2>&1      COMM="$FC $FFLAGS -c genmake_tcomp.$FS"
695        echo ' '$COMM >> $LOGFILE
696        $COMM >> $LOGFILE 2>&1
697      RETVAL=$?      RETVAL=$?
698      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
699          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
700          cat <<EOF>> $LOGFILE          cat <<EOF>> $LOGFILE
701    
702  WARNING: FORTRAN test compile fails -- please see '$LOGFILE'   WARNING: FORTRAN test compile fails -- please see '$LOGFILE'
703  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'   WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
704  WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.   WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
705  EOF  EOF
706          return 1          return 1
707      fi      fi
# Line 711  EOF Line 711  EOF
711          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
712          cat <<EOF>> $LOGFILE          cat <<EOF>> $LOGFILE
713    
714  WARNING: The "nm" command failed.   WARNING: The "nm" command failed.
715  WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'   WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE'
716  WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.   WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here.
717  EOF  EOF
718          return 1          return 1
719      fi      fi
# Line 739  EOF Line 739  EOF
739    
740      #  cleanup the testing files      #  cleanup the testing files
741      rm -f genmake_tcomp.* genmake_test.*      rm -f genmake_tcomp.* genmake_test.*
 }  
742    
743        echo " --> set FC_NAMEMANGLE='$FC_NAMEMANGLE'" >> $LOGFILE
744    }
745    
746  check_HAVE_CLOC()  {  check_HAVE_CLOC()  {
747      echo >> $LOGFILE      echo >> $LOGFILE
# Line 781  EOF Line 782  EOF
782      RETVAL=$?      RETVAL=$?
783      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
784          HAVE_CLOC=t          HAVE_CLOC=t
         DEFINES="$DEFINES -DHAVE_CLOC"  
785      fi      fi
786      rm -f genmake_tc*      rm -f genmake_tc*
787        echo " --> set HAVE_CLOC='$HAVE_CLOC'" >> $LOGFILE
788  }  }
789    
   
790  check_HAVE_SIGREG()  {  check_HAVE_SIGREG()  {
791      if test ! "x$HAVE_SIGREG" = x ; then      if test ! "x$HAVE_SIGREG" = x ; then
792          return          return
# Line 843  EOF Line 843  EOF
843      RETVAL=$?      RETVAL=$?
844      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
845          HAVE_SIGREG=t          HAVE_SIGREG=t
         DEFINES="$DEFINES -DHAVE_SIGREG"  
846      fi      fi
847      rm -f genmake_tc*      rm -f genmake_tc*
848        echo " --> set HAVE_SIGREG='$HAVE_SIGREG'" >> $LOGFILE
849  }  }
850    
   
851  check_HAVE_SETRLSTK()  {  check_HAVE_SETRLSTK()  {
     if test "x$HAVE_SETRLSTK" = xt ; then  
         DEFINES="$DEFINES -DHAVE_SETRLSTK"  
         return  
     fi    
852      if test ! "x$HAVE_SETRLSTK" = x ; then      if test ! "x$HAVE_SETRLSTK" = x ; then
853          return          return
854      fi      fi
# Line 891  EOF Line 886  EOF
886      RETVAL=$?      RETVAL=$?
887      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
888          HAVE_SETRLSTK=t          HAVE_SETRLSTK=t
         DEFINES="$DEFINES -DHAVE_SETRLSTK"  
889      fi      fi
890      rm -f genmake_tc*      rm -f genmake_tc*
891        echo " --> set HAVE_SETRLSTK='$HAVE_SETRLSTK'" >> $LOGFILE
892  }  }
893    
   
894  check_HAVE_STAT()  {  check_HAVE_STAT()  {
895      echo >> $LOGFILE      echo >> $LOGFILE
896      echo "running: check_HAVE_STAT()" >> $LOGFILE      echo "running: check_HAVE_STAT()" >> $LOGFILE
# Line 938  EOF Line 932  EOF
932      RETVAL=$?      RETVAL=$?
933      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
934          HAVE_STAT=t          HAVE_STAT=t
         DEFINES="$DEFINES -DHAVE_STAT"  
935      fi      fi
936      rm -f genmake_tc*      rm -f genmake_tc*
937        echo " --> set HAVE_STAT='$HAVE_STAT'" >> $LOGFILE
938  }  }
939    
   
940  check_netcdf_libs()  {  check_netcdf_libs()  {
941      if test ! "x$SKIP_NETCDF_CHECK" = x ; then      if test ! "x$SKIP_NETCDF_CHECK" = x ; then
942          return          return
# Line 1033  EOF Line 1026  EOF
1026          fi          fi
1027      fi      fi
1028      rm -f genmake_tnc*      rm -f genmake_tnc*
1029        echo " --> set HAVE_NETCDF='$HAVE_NETCDF'" >> $LOGFILE
1030  }  }
1031    
1032    check_lapack_libs()  {
1033        if test ! "x$SKIP_LAPACK_CHECK" = x ; then
1034            return
1035        fi
1036        echo >> $LOGFILE
1037        echo "running: check_lapack_libs()" >> $LOGFILE
1038        cat <<EOF > genmake_tla.F
1039          program fgenla
1040          integer info
1041          integer ipiv( 2 )
1042          double precision ab( 4, 2 ), b( 2 )
1043          data ab / 0., 0., 1., 2., 0., 2., 1., 0. /
1044          data b / 1., 1. /
1045          call dgbsv( 2, 1, 1, 1, ab, 4, ipiv, b, 2, info )
1046          IF (info .NE. 0) write(*,*) 'Error:', info
1047          write(*,*) b
1048          end
1049    EOF
1050        echo "===  genmake_tla.F  >>>" > genmake_tla.log
1051        cat genmake_tla.F >> genmake_tla.log
1052        echo "<<<  genmake_tla.F  ===" >> genmake_tla.log
1053        RET_CPP=f
1054        COMM="cat genmake_tla.F | $CPP $DEFINES $INCLUDES"
1055        echo "$COMM" >> genmake_tla.log
1056        eval $COMM > genmake_tla.$FS 2>/dev/null  &&  RET_CPP=t
1057        if test "x$RET_CPP" = xf ; then
1058            echo "  WARNING: CPP failed to pre-process the lapack test." \
1059                >> genmake_tla.log
1060            echo "    Please check that \$INCLUDES is properly set." \
1061                >> genmake_tla.log
1062        fi
1063        echo "$FC $FFLAGS $FOPTIM -c genmake_tla.$FS  \ " >> genmake_tla.log
1064        echo "  &&  $LINK $FFLAGS $FOPTIM -o genmake_tla.o $LIBS" >> genmake_tla.log
1065        $FC $FFLAGS $FOPTIM -c genmake_tla.$FS >> genmake_tla.log 2>&1  \
1066            &&  $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS >> genmake_tla.log 2>&1
1067        RET_COMPILE=$?
1068        cat genmake_tla.log >> $LOGFILE
1069    
1070        # test program execution not always possible (see check_netcdf_libs)
1071        #
1072        #test -x ./genmake_tla  &&  ./genmake_tla >> genmake_tla.log 2>&1
1073        #RETVAL=$?
1074        #if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
1075    
1076        if test "x$RET_COMPILE" = x0 ; then
1077            HAVE_LAPACK=t
1078            echo "check_lapack: successful" >> $LOGFILE
1079        else
1080            # try again with "-llapack" added to the libs
1081            echo "==> try again with added '-llapack'" > genmake_tla.log
1082            echo "cat genmake_tla.F | $CPP $DEFINES $INCLUDES > genmake_tla.$FS \ " >> genmake_tla.log
1083            echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tla.$FS \ " >> genmake_tla.log
1084            echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS -llapack" >> genmake_tla.log
1085            cat genmake_tla.F | $CPP $DEFINES $INCLUDES > genmake_tla.$FS 2>/dev/null  \
1086                &&  $FC $FFLAGS $FOPTIM -c genmake_tla.$FS >> genmake_tla.log 2>&1  \
1087                &&  $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS -llapack >> genmake_tla.log 2>&1
1088            RET_COMPILE=$?
1089            echo >> $LOGFILE
1090            cat genmake_tla.log >> $LOGFILE
1091            if test "x$RET_COMPILE" = x0 ; then
1092                LIBS="$LIBS -llapack"
1093                HAVE_LAPACK=t
1094                echo "check_lapack: successful" >> $LOGFILE
1095            else
1096            # try again with "-lf77blas -lcblas" added to the libs
1097                echo "==> try again with added '-llapack -lf77blas -lcblas'" > genmake_tla.log
1098                echo "cat genmake_tla.F | $CPP $DEFINES $INCLUDES > genmake_tla.$FS \ " >> genmake_tla.log
1099                echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tla.$FS \ " >> genmake_tla.log
1100                echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS -llapack -lf77blas -lcblas" >> genmake_tla.log
1101                cat genmake_tla.F | $CPP $DEFINES $INCLUDES > genmake_tla.$FS 2>/dev/null  \
1102                    &&  $FC $FFLAGS $FOPTIM -c genmake_tla.$FS >> genmake_tla.log 2>&1  \
1103                    &&  $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS -llapack -lf77blas -lcblas >> genmake_tla.log 2>&1
1104                RET_COMPILE=$?
1105                echo >> $LOGFILE
1106                cat genmake_tla.log >> $LOGFILE
1107                if test "x$RET_COMPILE" = x0 ; then
1108                    LIBS="$LIBS -llapack -lf77blas -lcblas"
1109                    HAVE_LAPACK=t
1110                    echo "check_lapack: successful" >> $LOGFILE
1111                else
1112                # try again with "-latlas" added to the libs
1113                    echo "==> try again with added '-llapack -lf77blas -lcblas -latlas'" > genmake_tla.log
1114                    echo "cat genmake_tla.F | $CPP $DEFINES $INCLUDES > genmake_tla.$FS \ " >> genmake_tla.log
1115                    echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tla.$FS \ " >> genmake_tla.log
1116                    echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS -llapack -lf77blas -lcblas -latlas" >> genmake_tla.log
1117                    cat genmake_tla.F | $CPP $DEFINES $INCLUDES > genmake_tla.$FS 2>/dev/null  \
1118                        &&  $FC $FFLAGS $FOPTIM -c genmake_tla.$FS >> genmake_tla.log 2>&1  \
1119                        &&  $LINK $FFLAGS $FOPTIM -o genmake_tla genmake_tla.o $LIBS -llapack -lf77blas -lcblas -latlas >> genmake_tla.log 2>&1
1120                    RET_COMPILE=$?
1121                    echo >> $LOGFILE
1122                    cat genmake_tla.log >> $LOGFILE
1123                    if test "x$RET_COMPILE" = x0 ; then
1124                        LIBS="$LIBS -llapack -lf77blas -lcblas -latlas"
1125                        HAVE_LAPACK=t
1126                        echo "check_lapack: successful" >> $LOGFILE
1127                    fi
1128                fi
1129            fi
1130        fi
1131        rm -f genmake_tla*
1132        echo " --> set HAVE_LAPACK='$HAVE_LAPACK'" >> $LOGFILE
1133    }
1134    
1135    
1136  ###############################################################################  ###############################################################################
# Line 1068  FOPTIM= Line 1164  FOPTIM=
1164  FEXTRAFLAGS=  FEXTRAFLAGS=
1165  USE_EXTENDED_SRC=  USE_EXTENDED_SRC=
1166  EXTENDED_SRC_FLAG=  EXTENDED_SRC_FLAG=
1167    GET_FC_VERSION=
1168  CFLAGS=  CFLAGS=
1169  KFLAGS1=  KFLAGS1=
1170  KFLAGS2=  KFLAGS2=
# Line 1102  HAVE_STAT= Line 1199  HAVE_STAT=
1199  HAVE_NETCDF=  HAVE_NETCDF=
1200  HAVE_ETIME=  HAVE_ETIME=
1201  IGNORE_TIME=  IGNORE_TIME=
1202    HAVE_LAPACK=
1203    
1204  MODS=  MODS=
1205  TOOLSDIR=  TOOLSDIR=
# Line 1124  MACHINE=`uname -a` Line 1222  MACHINE=`uname -a`
1222  EXECUTABLE=  EXECUTABLE=
1223  EXEHOOK=  EXEHOOK=
1224  EXEDIR=  EXEDIR=
 PACKAGES_CONF=  
1225  IEEE=  IEEE=
1226  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
1227      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
# Line 1146  SVD_TAMC_FLAGS= Line 1243  SVD_TAMC_FLAGS=
1243  TAMC_EXTRA=  TAMC_EXTRA=
1244    
1245  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1246  gm_s1="OPTFILE PKG_DEPEND PKG_GROUPS MAKEFILE MAKEDEPEND PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PKG_DEPEND PKG_GROUPS DISABLE ENABLE MAKEFILE MAKEDEPEND PLATFORM"
1247  gm_s2="FC IEEE USE_R4 TS PAPIS PCLS PAPI PCL HPMT GSL DEVEL MPI OMP DUMPSTATE STANDARDDIRS"  gm_s2="FC CC MPI OMP USE_R4 TS PAPIS PCLS PAPI PCL HPMT IEEE DEVEL GSL FEXTRAFLAGS"
1248    gm_s3="ROOTDIR STANDARDDIRS MODS DUMPSTATE"
1249    
1250  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1251  gm_s3="LN S64 LINK MAKE PACKAGES INCLUDES FFLAGS FOPTIM FEXTRAFLAGS"  gm_s4="LN S64 LINK MAKE PACKAGES INCLUDES FFLAGS FOPTIM"
1252  gm_s4="CFLAGS LIBS KPP KFLAGS1 KFLAGS2 KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s5="CFLAGS LIBS KPP KFLAGS1 KFLAGS2 KPPFILES NOOPTFILES NOOPTFLAGS"
1253  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD THISHOST THISUSER THISDATE THISVER MACHINE"  gm_s6="TOOLSDIR SOURCEDIRS INCLUDEDIRS EXEDIR EXECUTABLE EXEHOOK"
1254  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s7="PWD THISHOST THISUSER THISDATE THISVER MACHINE"
1255  gm_s7="FC_NAMEMANGLE HAVE_NETCDF HAVE_SYSTEM HAVE_FDATE HAVE_ETIME"  gm_s8="FC_NAMEMANGLE HAVE_NETCDF HAVE_SYSTEM HAVE_FDATE HAVE_ETIME HAVE_LAPACK"
1256    
1257  #  The following are all related to adjoint/tangent-linear stuff  #  The following are all related to adjoint/tangent-linear stuff
1258  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"
1259  gm_s11="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS"  gm_s11="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS"
1260  gm_s12="TAF_EXTRA TAMC_EXTRA"  gm_s12="TAF_EXTRA TAMC_EXTRA"
1261    
1262  gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7"  gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7 $gm_s8"
1263  gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"  gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"
1264    
1265  cat <<EOF  cat <<EOF
# Line 1311  for ac_option in "$@" ; do Line 1409  for ac_option in "$@" ; do
1409          -fs90=* | --fs90=*)          -fs90=* | --fs90=*)
1410              FS90=$ac_optarg ;;              FS90=$ac_optarg ;;
1411                    
1412            -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 )
1413                USE_R4=true ;;
1414    
1415          -ieee | --ieee)          -ieee | --ieee)
1416              IEEE=true ;;              IEEE=true ;;
1417          -noieee | --noieee)          -noieee | --noieee)
1418              IEEE= ;;              echo "Warning: ignore option '$ac_option' (default is already without '-ieee')" ;;
1419            -devel | --devel)
1420          -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 )              IEEE=true ; DEVEL=true ;;
1421              USE_R4=true ;;          -gsl | --gsl)
1422                GSL=true ;;
1423    
1424          -ts | --ts)          -ts | --ts)
1425              TS=true ;;              TS=true ;;
# Line 1334  for ac_option in "$@" ; do Line 1436  for ac_option in "$@" ; do
1436          -hpmt | --hpmt)          -hpmt | --hpmt)
1437              HPMT=true ;;              HPMT=true ;;
1438    
         -gsl | --gsl)  
             GSL=true ;;  
   
         -devel | --devel)  
             DEVEL=true ;;  
   
1439          -mpi | --mpi)          -mpi | --mpi)
1440              MPI=true ;;              MPI=true ;;
1441          -mpi=* | --mpi=*)          -mpi=* | --mpi=*)
# Line 1355  for ac_option in "$@" ; do Line 1451  for ac_option in "$@" ; do
1451          -ds | --ds)          -ds | --ds)
1452              DUMPSTATE=t ;;              DUMPSTATE=t ;;
1453                    
1454            -extra_flag | --extra_flag)
1455                ac_prev=FEXTRAFLAGS ;;
1456            -extra_flag=* | --extra_flag=*)
1457                FEXTRAFLAGS=$ac_optarg ;;
1458            
1459          -taf_extra | --taf_extra)          -taf_extra | --taf_extra)
1460              ac_prev=TAF_EXTRA ;;              ac_prev=TAF_EXTRA ;;
1461          -taf_extra=* | --taf_extra=*)          -taf_extra=* | --taf_extra=*)
# Line 1385  for ac_option in "$@" ; do Line 1486  for ac_option in "$@" ; do
1486    
1487  done  done
1488    
   
1489  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1490      echo      echo
1491      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1492      echo "  file.  This file format is no longer supported.  For directions on"      echo "  file.  This file format is no longer supported.  For directions on"
1493      echo "  how to setup and use the new \"genmake2\" script, please see:"      echo "  how to setup and use the new \"genmake2\" script, please see:"
1494      echo "    http://mitgcm.org/devel_HOWTO/"      echo "    http://mitgcm.org/public/devel_HOWTO/"
1495      echo "  and send an email to MITgcm-support@mitgcm.org if you need help."      echo "  and send an email to MITgcm-support@mitgcm.org if you need help."
1496      echo "WARNING: ignore \"./.genmakerc\" and continue."      echo "WARNING: ignore \"./.genmakerc\" and continue."
1497      echo      echo
# Line 1406  if test "x${ROOTDIR}" = x ; then Line 1506  if test "x${ROOTDIR}" = x ; then
1506          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1507              if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then              if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then
1508                  ROOTDIR=$d                  ROOTDIR=$d
1509                  printf "Warning:  ROOTDIR was not specified but there appears to be"                  printf "Warning: ROOTDIR was not specified ;"
1510                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."                  echo " try using a local copy of MITgcm found at \"$ROOTDIR\""
1511                  break                  break
1512              fi              fi
1513          done          done
# Line 1439  if test "x$MAKEFILE" = x ; then Line 1539  if test "x$MAKEFILE" = x ; then
1539      MAKEFILE="Makefile"      MAKEFILE="Makefile"
1540  fi  fi
1541    
1542  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:"
1543  if test "x${OPTFILE}" = x ; then  if test "x${OPTFILE}" = x ; then
1544      if test "x$MITGCM_OF" = x ; then      if test "x$MITGCM_OF" = x ; then
1545          echo "Warning: no OPTFILE specified so we'll look for possible settings"          echo "Warning: no OPTFILE specified so we'll look for possible settings"
1546          printf "\n===  Searching for possible settings for OPTFILE  ===\n"          printf "\n===  Searching for possible settings for OPTFILE  ===\n"
1547          find_possible_configs          find_possible_optfile
1548      else      else
1549          OPTFILE=$MITGCM_OF          OPTFILE=$MITGCM_OF
1550      fi      fi
# Line 1468  if test "x$OPTFILE" != xNONE ; then Line 1568  if test "x$OPTFILE" != xNONE ; then
1568      fi      fi
1569  fi  fi
1570    
1571  echo "  getting AD_OPTFILE information:  "  echo "  getting AD_OPTFILE information:"
1572  if test "x${AD_OPTFILE}" = x ; then  if test "x${AD_OPTFILE}" = x ; then
1573      if test "x$MITGCM_AD_OF" = x ; then      if test "x$MITGCM_AD_OF" = x ; then
1574          AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_default          AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_default
# Line 1514  Error: no Fortran compiler: please speci Line 1614  Error: no Fortran compiler: please speci
1614  EOF  EOF
1615      exit 1      exit 1
1616  fi  fi
1617    if test "x$GET_FC_VERSION" != x ; then
1618      echo "Get compiler version using: $FC $GET_FC_VERSION" >> $LOGFILE
1619      ff=`echo $FC | sed 's/ .*//'` ; xx=`echo $ff | sed 's/^./& /' | sed 's/ .*//'`
1620      if test $xx != '/' ; then which $ff >> $LOGFILE ; fi
1621      $FC $GET_FC_VERSION > genmake_fc_vers1 2> genmake_fc_vers2
1622      if test -s genmake_fc_vers1 ; then
1623        cat genmake_fc_vers1 >> $LOGFILE
1624      else
1625        cat genmake_fc_vers2 >> $LOGFILE
1626      fi
1627      echo "<-- compiler version ----" >> $LOGFILE
1628      rm -f genmake_fc_vers1 genmake_fc_vers2
1629    fi
1630    
1631  if test "x$CC" = x ; then  if test "x$CC" = x ; then
1632      CC=cc      look_for_C_compilers
 #     cat <<EOF 1>&2  
 # Error: no C compiler: please specify using one of the following:  
 #   1) within the options file ("CC=...") as specified by "-of=OPTFILE"  
 #   2) the "-cc=XXX" command-line option  
 #   3) the "./genmake_local" file  
 # EOF  
 #     exit 1  
1633  fi  fi
1634    
1635  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
1636      LINK=$FC      LINK=$FC
1637  fi  fi
# Line 1531  if test "x$MAKE" = x ; then Line 1639  if test "x$MAKE" = x ; then
1639      MAKE="make"      MAKE="make"
1640  fi  fi
1641  if test "x$CPP" = x ; then  if test "x$CPP" = x ; then
1642      CPP=cpp      CPP="cpp -traditional -P"
1643  fi  fi
1644  #EH3 === UGLY ===  #EH3 === UGLY ===
1645  #  The following is an ugly little hack to check for $CPP in /lib/ and  #  The following is an ugly little hack to check for $CPP in /lib/ and
# Line 1558  EOF Line 1666  EOF
1666  else  else
1667      rm -f test_cpp      rm -f test_cpp
1668  fi  fi
1669    
1670  look_for_makedepend  look_for_makedepend
1671    
1672    #  Check that soft-link command is set and usable
1673  if test "x$LN" = x ; then  if test "x$LN" = x ; then
1674      LN="ln -s"      LN="ln -s"
1675  fi  fi
# Line 1568  RETVAL=$? Line 1679  RETVAL=$?
1679  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
1680      cat <<EOF 1>&2      cat <<EOF 1>&2
1681    
1682  Error: The command "ln -s" failed -- please specify a working soft-link  Error: The command "$LN" failed -- please specify a working soft-link
1683    command in the optfile.    command in the optfile.
1684    
1685  EOF  EOF
# Line 1751  rm -f genmake_tcomp* Line 1862  rm -f genmake_tcomp*
1862  printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "  printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "
1863  check_HAVE_CLOC  check_HAVE_CLOC
1864  if test "x$HAVE_CLOC" != x ; then  if test "x$HAVE_CLOC" != x ; then
1865        DEFINES="$DEFINES -DHAVE_CLOC"
1866      echo "yes"      echo "yes"
1867  else  else
1868      echo "no"      echo "no"
# Line 1765  rm -f genmake_t* Line 1877  rm -f genmake_t*
1877  printf "  Can we unlimit the stack size using $FC...  "  printf "  Can we unlimit the stack size using $FC...  "
1878  check_HAVE_SETRLSTK  check_HAVE_SETRLSTK
1879  if test "x$HAVE_SETRLSTK" = xt ; then  if test "x$HAVE_SETRLSTK" = xt ; then
1880        DEFINES="$DEFINES -DHAVE_SETRLSTK"
1881      echo "yes"      echo "yes"
1882  else  else
1883      echo "no"      echo "no"
# Line 1774  rm -f genmake_t* Line 1887  rm -f genmake_t*
1887  printf "  Can we register a signal handler using $FC...  "  printf "  Can we register a signal handler using $FC...  "
1888  check_HAVE_SIGREG  check_HAVE_SIGREG
1889  if test "x$HAVE_SIGREG" = xt ; then  if test "x$HAVE_SIGREG" = xt ; then
1890        DEFINES="$DEFINES -DHAVE_SIGREG"
1891      echo "yes"      echo "yes"
1892  else  else
1893      echo "no"      echo "no"
# Line 1783  rm -f genmake_t* Line 1897  rm -f genmake_t*
1897  printf "  Can we use stat() through C calls...  "  printf "  Can we use stat() through C calls...  "
1898  check_HAVE_STAT  check_HAVE_STAT
1899  if test "x$HAVE_STAT" != x ; then  if test "x$HAVE_STAT" != x ; then
1900        DEFINES="$DEFINES -DHAVE_STAT"
1901      echo "yes"      echo "yes"
1902  else  else
1903      echo "no"      echo "no"
# Line 1792  rm -f genmake_t* Line 1907  rm -f genmake_t*
1907  printf "  Can we create NetCDF-enabled binaries...  "  printf "  Can we create NetCDF-enabled binaries...  "
1908  check_netcdf_libs  check_netcdf_libs
1909  if test "x$HAVE_NETCDF" != x ; then  if test "x$HAVE_NETCDF" != x ; then
1910        DEFINES="$DEFINES -DHAVE_NETCDF"
1911        echo "yes"
1912    else
1913        echo "no"
1914    fi
1915    
1916    printf "  Can we create LAPACK-enabled binaries...  "
1917    check_lapack_libs
1918    if test "x$HAVE_LAPACK" != x ; then
1919        DEFINES="$DEFINES -DHAVE_LAPACK"
1920      echo "yes"      echo "yes"
1921  else  else
1922      echo "no"      echo "no"
# Line 1803  if test "x$EMBED_SRC" = xt ; then Line 1928  if test "x$EMBED_SRC" = xt ; then
1928  fi  fi
1929  if test "x$EMBED_SRC" = xt ; then  if test "x$EMBED_SRC" = xt ; then
1930      ENABLE="$ENABLE embed_files"      ENABLE="$ENABLE embed_files"
1931    #   DEFINES="$DEFINES -DHAVE_EMBED_SRC"
1932  fi  fi
1933    
   
1934  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1935  printf "  Adding MODS directories: "  printf "  Adding MODS directories: "
1936  for d in $MODS ; do  for d in $MODS ; do
# Line 1821  for d in $MODS ; do Line 1946  for d in $MODS ; do
1946  done  done
1947  echo  echo
1948    
1949  if test "x${PLATFORM}" = x ; then  #if test "x${PLATFORM}" = x ; then
1950      PLATFORM=$p_PLATFORM  #    PLATFORM=$p_PLATFORM
1951  fi  #fi
1952    
1953  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1954      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
# Line 2109  EOF Line 2234  EOF
2234      fi      fi
2235  fi  fi
2236    
2237    #  Check for package RADTRANS: if LAPACK is not available,
2238    #  then issue a warning that the direct radtrans solver is not available.
2239    if test "x$HAVE_LAPACK" != xt ; then
2240        echo " $PACKAGES " | grep ' radtrans ' > /dev/null 2>&1
2241        RETVAL=$?
2242        if test "x$RETVAL" = x0 ; then
2243            cat <<EOF
2244    *********************************************************************
2245    WARNING: the "radtrans" package was enabled but tests failed to
2246      compile LAPACK applications.  This means that the direct radtrans
2247      solver is not available and compilation will fail if it is enabled.
2248      If you want to use the direct solver, please check that:
2249    
2250      1) LAPACK is correctly installed for this compiler and
2251      2) the LIBS variable (within the "optfile") specifies the correct
2252         LAPACK library to link against.
2253    *********************************************************************
2254    EOF
2255        fi
2256    fi
2257    
2258  if  test "x${PKG_DEPEND}" != x ; then  if  test "x${PKG_DEPEND}" != x ; then
2259    echo "  applying package dependency rules"    echo "  applying package dependency rules"
2260    ck=    ck=
# Line 2642  NOOPTFILES = ${NOOPTFILES} Line 2788  NOOPTFILES = ${NOOPTFILES}
2788  NOOPTFLAGS = ${NOOPTFLAGS}  NOOPTFLAGS = ${NOOPTFLAGS}
2789  # Flags and libraries needed for linking  # Flags and libraries needed for linking
2790  LIBS = ${LIBS}  LIBS = ${LIBS}
2791  # Name of the Mekfile  # Name of the makefile
2792  MAKEFILE=${MAKEFILE}  MAKEFILE=${MAKEFILE}
2793    
2794  EOF  EOF
# Line 2678  all: \$(EXECUTABLE) Line 2824  all: \$(EXECUTABLE)
2824  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(OBJFILES) \$(EMBEDDED_FILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(OBJFILES) \$(EMBEDDED_FILES)
2825          @echo Creating \$@ ...          @echo Creating \$@ ...
2826          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2827    
2828  depend:  depend:
2829          @make links          @make -f \$(MAKEFILE) links
2830          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)          \$(MAKEDEPEND) -f \$(MAKEFILE) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2831          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2832          -rm -f makedepend.out          -rm -f makedepend.out
2833    
# Line 2690  libmitgcmuv.a: \$(OBJFILES) Line 2837  libmitgcmuv.a: \$(OBJFILES)
2837          ar rcv libmitgcmuv.a \$(OBJFILES)          ar rcv libmitgcmuv.a \$(OBJFILES)
2838          ar d   libmitgcmuv.a main.o          ar d   libmitgcmuv.a main.o
2839    
2840    obj: \$(OBJFILES)
2841    
2842  links: \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(SPECIAL_FILES)  links: \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(SPECIAL_FILES)
2843    
2844  small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES)  small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES)
# Line 2707  clean: Line 2856  clean:
2856    
2857  # remove most of the files that "make" and "make depend" generate  # remove most of the files that "make" and "make depend" generate
2858  Clean:  Clean:
2859          @make clean          @make -f \$(MAKEFILE) clean
2860          @make cleanlinks          @make -f \$(MAKEFILE) cleanlinks
2861          -rm -f \$(SPECIAL_FILES) f90mkdepend.log          -rm -f \$(SPECIAL_FILES) f90mkdepend.log $MAKEFILE.old
2862          -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log          -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log taf_ftl.log
2863          -rm -f genmake_warnings genmake_errors make.log          -rm -f genmake_warnings genmake_errors make.log
2864    
2865  # remove also the executable, files that "genmake2" generates (except Makefile)  # remove also the executable, files that "genmake2" generates (except Makefile)
2866  #         and output from a run (plus log files from testreport)  #         and output from a run (plus log files from testreport)
2867  CLEAN:  CLEAN:
2868          @make Clean          @make -f \$(MAKEFILE) Clean
2869          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.bak $MAKEFILE.old          -rm -f \$(EXECUTABLE) \$(EXE_AD) \$(EXE_FTL) *.bak
2870          -rm -f $LOGFILE genmake_state genmake_*optfile genmake.tr_log make.tr_log          -rm -f $LOGFILE genmake_state genmake_*optfile
2871            -rm -f SIZE.h.mpi genmake.tr_log make.tr_log
2872          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2873          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2874          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
# Line 2737  ${PACKAGES_DOT_H}: Line 2887  ${PACKAGES_DOT_H}:
2887          @$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) > \$@
2888  AD_CONFIG.h:  AD_CONFIG.h:
2889          @echo Creating \$@ ...          @echo Creating \$@ ...
2890          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > \$@          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN > \$@
2891  FC_NAMEMANGLE.h:  FC_NAMEMANGLE.h:
2892          @echo Creating \$@ ...          @echo Creating \$@ ...
2893          echo "$FC_NAMEMANGLE" > \$@          echo "$FC_NAMEMANGLE" > \$@
# Line 2781  cat >>$MAKEFILE <<EOF Line 2931  cat >>$MAKEFILE <<EOF
2931          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2932  .$FS.o:  .$FS.o:
2933          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2934    .F.o:
2935            \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2936  .F90.$FS90:  .F90.$FS90:
2937          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2938  .FF90.f$FS90:  .FF90.f$FS90:
# Line 2849  adtaf: ad_taf_output.$FS Line 3001  adtaf: ad_taf_output.$FS
3001  adtamc: ad_tamc_output.$FS  adtamc: ad_tamc_output.$FS
3002    
3003  ad_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES) \$(AD_FLOW_FILES)  ad_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES) \$(AD_FLOW_FILES)
3004          @$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 > ad_config.template
3005          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
3006          -rm -f ad_config.template          -rm -f ad_config.template
3007          @make \$(F77_PP_SRC_FILES)          @make -f \$(MAKEFILE) \$(F77_PP_SRC_FILES)
3008          @make \$(FLOFILES)          @make -f \$(MAKEFILE) \$(FLOFILES)
3009          cat \$(FLOFILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS          cat \$(FLOFILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS
3010    
3011  ad_taf_output.$FS: ad_input_code.$FS  ad_taf_output.$FS: ad_input_code.$FS
# Line 2882  adonlyfwd: Line 3034  adonlyfwd:
3034  adtrick:  adtrick:
3035          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
3036    
3037    adobj: ad_taf_output.o \$(OBJFILES)
3038    
3039  # ... FTL ...  # ... FTL ...
3040  ftlall: ftl_taf  ftlall: \$(EXE_FTL)
3041  ftltaf: ftl_taf_output.$FS  ftltaf: ftl_taf_output.$FS
3042  ftltamc: ftl_tamc_output.$FS  ftltamc: ftl_tamc_output.$FS
3043    
3044  ftl_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES)  ftl_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES)
3045          @$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 > ftl_config.template
3046          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
3047          -rm -f ftl_config.template          -rm -f ftl_config.template
3048          @make \$(F77_PP_SRC_FILES)          @make -f \$(MAKEFILE) \$(F77_PP_SRC_FILES)
3049          @make \$(AD_FLOW_FILES)          @make -f \$(MAKEFILE) \$(AD_FLOW_FILES)
3050          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS          cat \$(AD_FLOW_FILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ftl_input_code.$FS
3051    
3052  ftl_taf_output.$FS: ftl_input_code.$FS  ftl_taf_output.$FS: ftl_input_code.$FS
3053          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
# Line 2905  ftltafonly: Line 3059  ftltafonly:
3059          ls -l ftl_input_code_ftl.$FS          ls -l ftl_input_code_ftl.$FS
3060          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
3061    
3062  ftl_taf: ftl_taf_output.o \$(OBJFILES)  \${EXE_FTL}: ftl_taf_output.o \$(OBJFILES)
3063          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o \${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
3064    
3065  ftl_tamc_output.$FS: ftl_input_code.$FS  ftl_tamc_output.$FS: ftl_input_code.$FS
3066          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
# Line 2915  ftl_tamc_output.$FS: ftl_input_code.$FS Line 3069  ftl_tamc_output.$FS: ftl_input_code.$FS
3069  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
3070          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
3071    
   
3072  # ... SVD ...  # ... SVD ...
3073  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
3074          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
# Line 2936  svd_touch: Line 3089  svd_touch:
3089          touch ad_taf_output.$FS ftl_taf_output.$FS          touch ad_taf_output.$FS ftl_taf_output.$FS
3090          \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS          \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
3091          \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS          \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
3092          @$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 > ftl_config.template
3093          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
3094          -rm -f ftl_config.template          -rm -f ftl_config.template
3095    
# Line 3013  CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod. Line 3166  CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.
3166    
3167  .PHONY: adDepend  .PHONY: adDepend
3168  adDepend: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(addsuffix _mod.FF90, \$(CB2M_F90_SRC_NAMES)) \$(F77_SRC_FILES:.F=_cb2m.FF90)  adDepend: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(addsuffix _mod.FF90, \$(CB2M_F90_SRC_NAMES)) \$(F77_SRC_FILES:.F=_cb2m.FF90)
3169          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)          \$(MAKEDEPEND) -f \$(MAKEFILE) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
3170          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
3171          -rm -f makedepend.out          -rm -f makedepend.out
3172    
# Line 3152  postProcess.tag: ad_input_code_sf.w2f.pr Line 3305  postProcess.tag: ad_input_code_sf.w2f.pr
3305          # this step also creates the file postProcess.make but we cannot          # this step also creates the file postProcess.make but we cannot
3306          # name it as the target or else make will try to remake it for          # name it as the target or else make will try to remake it for
3307          # the include directive above for any rule, e.g. make clean          # the include directive above for any rule, e.g. make clean
3308          ./postProcess.py --progress --timing --outputFormat=fixed -m r -i ../OAD_support/ad_inline.f --width 4 \$<          ./postProcess.py --progress --timing --infoUnitFile w2f__types.f90 --outputFormat=fixed -m r -i ../OAD_support/ad_inline.f --width 4 \$<
3309    
3310  # setup some links  # setup some links
3311  %.xsd:  %.xsd:
# Line 3236  else Line 3389  else
3389      fi      fi
3390  fi  fi
3391  if test ! -f AD_CONFIG.h ; then  if test ! -f AD_CONFIG.h ; then
3392      $BASH $TOOLSDIR/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > AD_CONFIG.h      $BASH $TOOLSDIR/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN > AD_CONFIG.h
3393  fi  fi
3394    
   
3395  #  Write the "state" for future records  #  Write the "state" for future records
3396  if test "x$DUMPSTATE" = xt ; then  if test "x$DUMPSTATE" = xt ; then
3397      printf "" > genmake_state      printf "" > genmake_state
3398      for i in $gm_state ; do      for i in $gm_state ; do
3399          t1="t2=\$$i"          t1="t2=\$$i"
3400          eval $t1          eval $t1
3401          echo "$i='$t2'" >> genmake_state          echo "$i='$t2'" | sed -e 's/  */ /g' >> genmake_state
3402      done      done
3403  fi  fi

Legend:
Removed from v.1.211  
changed lines
  Added in v.1.234

  ViewVC Help
Powered by ViewVC 1.1.22