/[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.213 by jmc, Fri Nov 5 16:28:59 2010 UTC revision 1.220 by jmc, Fri Jun 3 19:53:45 2011 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 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=${MAKEDEPEND}" >> $LOGFILE
362            fi
363        fi
364      if test "x${MAKEDEPEND}" = x ; then      if test "x${MAKEDEPEND}" = x ; then
365          which makedepend > /dev/null 2>&1          which makedepend > /dev/null 2>&1
366          RV0=$?          RV0=$?
# Line 209  EOF Line 385  EOF
385          test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE          test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
386          if test "x${RV0}${RV1}" = x00 ; then          if test "x${RV0}${RV1}" = x00 ; then
387              MAKEDEPEND=makedepend              MAKEDEPEND=makedepend
388                echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
389          else          else
390              echo "    a system-default makedepend was not found."              echo "    system-default makedepend not found. Try to build cyrus-makedepend"
   
391              #  Try to build the cyrus implementation              #  Try to build the cyrus implementation
392              build_cyrus_makedepend              build_cyrus_makedepend
393              RETVAL=$?              RETVAL=$?
394              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
395                    echo "WARNING: unable to build cyrus-makedepend. Use local xmakedepend"
396                  MAKEDEPEND='$(TOOLSDIR)/xmakedepend'                  MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
397                    echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
398              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  
399          fi          fi
400      fi      fi
401  }  }
402    
   
403  build_cyrus_makedepend()  {  build_cyrus_makedepend()  {
404        echo >> $LOGFILE
405        echo "running: build_cyrus_makedepend()" >> $LOGFILE
406      rm -f ./genmake_cy_md      rm -f ./genmake_cy_md
407      (      (
408          cd $ROOTDIR/tools/cyrus-imapd-makedepend  \          cd $ROOTDIR/tools/cyrus-imapd-makedepend  \
# Line 248  build_cyrus_makedepend()  { Line 419  build_cyrus_makedepend()  {
419      rm -f ./genmake_cy_md      rm -f ./genmake_cy_md
420      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
421          MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'          MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
422            echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
423          return 0          return 0
424      else      else
425          echo "WARNING: unable to build cyrus-imapd-makedepend"          echo "WARNING: fail to build cyrus-imapd-makedepend" >> $LOGFILE
426          return 1          return 1
427      fi      fi
428  }  }
429    
   
430  build_embed_encode()  build_embed_encode()
431  {  {
432      printf "  building the embed-encode utility...  "      printf "  building the embed-encode utility...  "
# Line 289  build_embed_encode() Line 460  build_embed_encode()
460      DEFINES="$DEFINES -DHAVE_EMBED_SRC"      DEFINES="$DEFINES -DHAVE_EMBED_SRC"
461  }  }
462    
   
463  #  look for possible C compilers  #  look for possible C compilers
464  look_for_C_compilers() {  look_for_C_compilers() {
465      echo >> $LOGFILE      echo >> $LOGFILE
# Line 338  EOF Line 508  EOF
508  # Guess possible config options for this host  # Guess possible config options for this host
509  find_possible_optfile()  {  find_possible_optfile()  {
510    
511        echo >> $LOGFILE
512        echo "running: find_possible_optfile()" >> $LOGFILE
513      tmp1=`uname`"_"`uname -m`      tmp1=`uname`"_"`uname -m`
514      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`      tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
515      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
# Line 347  find_possible_optfile()  { Line 519  find_possible_optfile()  {
519      PLATFORM=$tmp3      PLATFORM=$tmp3
520      echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32      echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
521      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
522      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM" | tee -a $LOGFILE
   
 #    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_C_compilers  
523    
524      #================================================================      #================================================================
525      #  look for possible FORTRAN compilers      #  look for possible FORTRAN compilers
526      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
527        tmp="$MITGCM_FC $FC efc gfortran g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 g95"
528      p_FC=      p_FC=
529      for c in $tmp ; do      rm -f ./genmake_hello.f
530          rm -f ./hello.f ./hello      cat >> genmake_hello.f <<EOF
         cat >> hello.f <<EOF  
531        program hello        program hello
532        do i=1,3        do i=1,3
533          print *, 'hello world : ', i          print *, 'hello world : ', i
534        enddo        enddo
535        end        end
536  EOF  EOF
537          $c -o hello hello.f > /dev/null 2>&1      for f in $tmp ; do
538            COMM="$f -o genmake_hello genmake_hello.f"
539            echo $COMM >> $LOGFILE
540            $COMM >> $LOGFILE 2>&1
541          RETVAL=$?          RETVAL=$?
542          if test "x${RETVAL}" = x0 ; then          if test "x${RETVAL}" = x0 ; then
543              p_FC="$p_FC $c"              echo " $f test successful" >> $LOGFILE
544                p_FC="$p_FC $f"
545          fi          fi
546      done      done
547      rm -f ./hello.f ./hello      rm -f ./genmake_hello.f ./genmake_hello
548      if test "x${p_FC}" = x ; then      if test "x${p_FC}" = x ; then
549          cat 1>&2 <<EOF          cat 1>&2 <<EOF
550    
# Line 401  Error: No Fortran compilers were found i Line 557  Error: No Fortran compilers were found i
557  EOF  EOF
558          exit 1          exit 1
559      else      else
560          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  
561      fi      fi
562    
563      #  Use the first of the compilers found in the current PATH      #  Use the first of the compilers found in the current PATH
# Line 411  EOF Line 566  EOF
566          for i in $p_FC ; do          for i in $p_FC ; do
567              OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i              OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
568              if test -r $OPTFILE ; then              if test -r $OPTFILE ; then
569                  echo "  Setting OPTFILE to: "$OPTFILE                  echo "  Setting OPTFILE to: "$OPTFILE | tee -a $LOGFILE
570                  break                  break
571              fi              fi
572          done          done
# Line 468  EOF Line 623  EOF
623  #       fi  #       fi
624  #       rm -f test.f out  #       rm -f test.f out
625  #     fi  #     fi
   
626  }  }
627    
628  #  Parse the package dependency information  #  Parse the package dependency information
# Line 486  get_pdepend_list()  { Line 640  get_pdepend_list()  {
640      fi      fi
641      . ./.pd_tmp      . ./.pd_tmp
642      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  
643  }  }
644    
645  #  Build a CPP macro to automate calling C routines from FORTRAN  #  Build a CPP macro to automate calling C routines from FORTRAN
# Line 661  get_fortran_c_namemangling()  { Line 656  get_fortran_c_namemangling()  {
656      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
657  void tcall( char * string ) { tsub( string ); }  void tcall( char * string ) { tsub( string ); }
658  EOF  EOF
 #   $MAKE genmake_test.o >> $LOGFILE 2>&1  
659      COMM="$CC $CFLAGS -c genmake_test.c"      COMM="$CC $CFLAGS -c genmake_test.c"
660      echo ' '$COMM >> $LOGFILE      echo ' '$COMM >> $LOGFILE
661      $COMM >> $LOGFILE 2>&1      $COMM >> $LOGFILE 2>&1
# Line 746  EOF Line 740  EOF
740      echo " --> set FC_NAMEMANGLE='$FC_NAMEMANGLE'" >> $LOGFILE      echo " --> set FC_NAMEMANGLE='$FC_NAMEMANGLE'" >> $LOGFILE
741  }  }
742    
   
743  check_HAVE_CLOC()  {  check_HAVE_CLOC()  {
744      echo >> $LOGFILE      echo >> $LOGFILE
745      echo "running: check_HAVE_CLOC()" >> $LOGFILE      echo "running: check_HAVE_CLOC()" >> $LOGFILE
# Line 792  EOF Line 785  EOF
785      echo " --> set HAVE_CLOC='$HAVE_CLOC'" >> $LOGFILE      echo " --> set HAVE_CLOC='$HAVE_CLOC'" >> $LOGFILE
786  }  }
787    
   
788  check_HAVE_SIGREG()  {  check_HAVE_SIGREG()  {
789      if test ! "x$HAVE_SIGREG" = x ; then      if test ! "x$HAVE_SIGREG" = x ; then
790          return          return
# Line 855  EOF Line 847  EOF
847      echo " --> set HAVE_SIGREG='$HAVE_SIGREG'" >> $LOGFILE      echo " --> set HAVE_SIGREG='$HAVE_SIGREG'" >> $LOGFILE
848  }  }
849    
   
850  check_HAVE_SETRLSTK()  {  check_HAVE_SETRLSTK()  {
851      if test "x$HAVE_SETRLSTK" = xt ; then      if test "x$HAVE_SETRLSTK" = xt ; then
852          DEFINES="$DEFINES -DHAVE_SETRLSTK"          DEFINES="$DEFINES -DHAVE_SETRLSTK"
# Line 904  EOF Line 895  EOF
895      echo " --> set HAVE_SETRLSTK='$HAVE_SETRLSTK'" >> $LOGFILE      echo " --> set HAVE_SETRLSTK='$HAVE_SETRLSTK'" >> $LOGFILE
896  }  }
897    
   
898  check_HAVE_STAT()  {  check_HAVE_STAT()  {
899      echo >> $LOGFILE      echo >> $LOGFILE
900      echo "running: check_HAVE_STAT()" >> $LOGFILE      echo "running: check_HAVE_STAT()" >> $LOGFILE
# Line 952  EOF Line 942  EOF
942      echo " --> set HAVE_STAT='$HAVE_STAT'" >> $LOGFILE      echo " --> set HAVE_STAT='$HAVE_STAT'" >> $LOGFILE
943  }  }
944    
   
945  check_netcdf_libs()  {  check_netcdf_libs()  {
946      if test ! "x$SKIP_NETCDF_CHECK" = x ; then      if test ! "x$SKIP_NETCDF_CHECK" = x ; then
947          return          return
# Line 1046  EOF Line 1035  EOF
1035  }  }
1036    
1037    
   
1038  ###############################################################################  ###############################################################################
1039  #   Sequential part of script starts here  #   Sequential part of script starts here
1040  ###############################################################################  ###############################################################################
# Line 1078  FOPTIM= Line 1066  FOPTIM=
1066  FEXTRAFLAGS=  FEXTRAFLAGS=
1067  USE_EXTENDED_SRC=  USE_EXTENDED_SRC=
1068  EXTENDED_SRC_FLAG=  EXTENDED_SRC_FLAG=
1069    GET_FC_VERSION=
1070  CFLAGS=  CFLAGS=
1071  KFLAGS1=  KFLAGS1=
1072  KFLAGS2=  KFLAGS2=
# Line 1157  TAMC_EXTRA= Line 1146  TAMC_EXTRA=
1146    
1147  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1148  gm_s1="OPTFILE PKG_DEPEND PKG_GROUPS MAKEFILE MAKEDEPEND PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PKG_DEPEND PKG_GROUPS MAKEFILE MAKEDEPEND PLATFORM ROOTDIR MODS DISABLE ENABLE"
1149  gm_s2="FC IEEE USE_R4 TS PAPIS PCLS PAPI PCL HPMT GSL DEVEL MPI OMP DUMPSTATE STANDARDDIRS"  gm_s2="FC CC USE_R4 TS PAPIS PCLS PAPI PCL HPMT IEEE DEVEL GSL MPI OMP DUMPSTATE STANDARDDIRS"
1150    
1151  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1152  gm_s3="LN S64 LINK MAKE PACKAGES INCLUDES FFLAGS FOPTIM FEXTRAFLAGS"  gm_s3="LN S64 LINK MAKE PACKAGES INCLUDES FFLAGS FOPTIM FEXTRAFLAGS"
# Line 1321  for ac_option in "$@" ; do Line 1310  for ac_option in "$@" ; do
1310          -fs90=* | --fs90=*)          -fs90=* | --fs90=*)
1311              FS90=$ac_optarg ;;              FS90=$ac_optarg ;;
1312                    
1313            -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 )
1314                USE_R4=true ;;
1315    
1316          -ieee | --ieee)          -ieee | --ieee)
1317              IEEE=true ;;              IEEE=true ;;
1318          -noieee | --noieee)          -noieee | --noieee)
1319              IEEE= ;;              echo "Warning: ignore option '$ac_option' (default is already without '-ieee')" ;;
1320            -devel | --devel)
1321          -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 )              IEEE=true ; DEVEL=true ;;
1322              USE_R4=true ;;          -gsl | --gsl)
1323                GSL=true ;;
1324    
1325          -ts | --ts)          -ts | --ts)
1326              TS=true ;;              TS=true ;;
# Line 1344  for ac_option in "$@" ; do Line 1337  for ac_option in "$@" ; do
1337          -hpmt | --hpmt)          -hpmt | --hpmt)
1338              HPMT=true ;;              HPMT=true ;;
1339    
         -gsl | --gsl)  
             GSL=true ;;  
   
         -devel | --devel)  
             DEVEL=true ;;  
   
1340          -mpi | --mpi)          -mpi | --mpi)
1341              MPI=true ;;              MPI=true ;;
1342          -mpi=* | --mpi=*)          -mpi=* | --mpi=*)
# Line 1395  for ac_option in "$@" ; do Line 1382  for ac_option in "$@" ; do
1382    
1383  done  done
1384    
   
1385  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1386      echo      echo
1387      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1388      echo "  file.  This file format is no longer supported.  For directions on"      echo "  file.  This file format is no longer supported.  For directions on"
1389      echo "  how to setup and use the new \"genmake2\" script, please see:"      echo "  how to setup and use the new \"genmake2\" script, please see:"
1390      echo "    http://mitgcm.org/devel_HOWTO/"      echo "    http://mitgcm.org/public/devel_HOWTO/"
1391      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."
1392      echo "WARNING: ignore \"./.genmakerc\" and continue."      echo "WARNING: ignore \"./.genmakerc\" and continue."
1393      echo      echo
# Line 1416  if test "x${ROOTDIR}" = x ; then Line 1402  if test "x${ROOTDIR}" = x ; then
1402          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1403              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
1404                  ROOTDIR=$d                  ROOTDIR=$d
1405                  printf "Warning:  ROOTDIR was not specified but there appears to be"                  printf "Warning: ROOTDIR was not specified ;"
1406                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."                  echo " try using a local copy of MITgcm found at \"$ROOTDIR\""
1407                  break                  break
1408              fi              fi
1409          done          done
# Line 1524  Error: no Fortran compiler: please speci Line 1510  Error: no Fortran compiler: please speci
1510  EOF  EOF
1511      exit 1      exit 1
1512  fi  fi
1513    if test "x$GET_FC_VERSION" != x ; then
1514      echo "Get compiler version using: $FC $GET_FC_VERSION" >> $LOGFILE
1515      $FC $GET_FC_VERSION >> $LOGFILE 2>&1
1516      echo "<-- compiler version ----" >> $LOGFILE
1517    fi
1518    
1519  if test "x$CC" = x ; then  if test "x$CC" = x ; then
1520      look_for_C_compilers      look_for_C_compilers
 #   CC=cc  
 #     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  
1521  fi  fi
1522    
1523  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
# Line 1821  if test "x$EMBED_SRC" = xt ; then Line 1804  if test "x$EMBED_SRC" = xt ; then
1804      ENABLE="$ENABLE embed_files"      ENABLE="$ENABLE embed_files"
1805  fi  fi
1806    
   
1807  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1808  printf "  Adding MODS directories: "  printf "  Adding MODS directories: "
1809  for d in $MODS ; do  for d in $MODS ; do
# Line 2725  clean: Line 2707  clean:
2707  Clean:  Clean:
2708          @make clean          @make clean
2709          @make cleanlinks          @make cleanlinks
2710          -rm -f \$(SPECIAL_FILES) f90mkdepend.log          -rm -f \$(SPECIAL_FILES) f90mkdepend.log $MAKEFILE.old
2711          -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
2712          -rm -f genmake_warnings genmake_errors make.log          -rm -f genmake_warnings genmake_errors make.log
2713    
# Line 2733  Clean: Line 2715  Clean:
2715  #         and output from a run (plus log files from testreport)  #         and output from a run (plus log files from testreport)
2716  CLEAN:  CLEAN:
2717          @make Clean          @make Clean
2718          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.bak $MAKEFILE.old          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.bak
2719          -rm -f $LOGFILE genmake_state genmake_*optfile genmake.tr_log make.tr_log          -rm -f $LOGFILE genmake_state genmake_*optfile
2720            -rm -f SIZE.h.mpi genmake.tr_log make.tr_log
2721          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2722          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2723          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
# Line 2797  cat >>$MAKEFILE <<EOF Line 2780  cat >>$MAKEFILE <<EOF
2780          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2781  .$FS.o:  .$FS.o:
2782          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2783    .F.o:
2784            \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2785  .F90.$FS90:  .F90.$FS90:
2786          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2787  .FF90.f$FS90:  .FF90.f$FS90:
# Line 2931  ftl_tamc_output.$FS: ftl_input_code.$FS Line 2916  ftl_tamc_output.$FS: ftl_input_code.$FS
2916  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2917          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2918    
   
2919  # ... SVD ...  # ... SVD ...
2920  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
2921          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
# Line 3255  if test ! -f AD_CONFIG.h ; then Line 3239  if test ! -f AD_CONFIG.h ; then
3239      $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 -UALLOW_ECCO_OPTIMIZATION > AD_CONFIG.h
3240  fi  fi
3241    
   
3242  #  Write the "state" for future records  #  Write the "state" for future records
3243  if test "x$DUMPSTATE" = xt ; then  if test "x$DUMPSTATE" = xt ; then
3244      printf "" > genmake_state      printf "" > genmake_state

Legend:
Removed from v.1.213  
changed lines
  Added in v.1.220

  ViewVC Help
Powered by ViewVC 1.1.22