/[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.138 by edhill, Sun Dec 4 13:57:08 2005 UTC revision 1.144 by edhill, Sat Mar 11 02:53:48 2006 UTC
# Line 248  build_cyrus_makedepend()  { Line 248  build_cyrus_makedepend()  {
248      fi      fi
249  }  }
250    
251    
252    build_embed_encode()
253    {
254        printf "  building the embed-encode utility...  "
255        if test ! -e "$ROOTDIR/tools/embed_encode/encode_files" ; then
256            if test ! -d "$ROOTDIR/tools/embed_encode" ; then
257                echo
258                echo "    Error: can't locate \"$ROOTDIR/tools/embed_encode\""
259                echo
260                EMBED_SRC=f
261                return 1
262            fi
263            clist="cc gcc c89 $CC"
264            for ic in $clist ; do
265                comm="$ic -o encode_files encode_files.c"
266                ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1
267                RETVAL=$?
268                if test "x$RETVAL" = x0 ; then
269                    echo "OK"
270                    DEFINES="$DEFINES -DHAVE_EMBED_SRC"
271                    return 0
272                fi
273            done
274            echo
275            echo "    Error: unable to build $ROOTDIR/embed_encode/encode_files"
276            echo "      so it has been disabled"
277            echo
278            EMBED_SRC=f
279            return 1
280        fi
281        echo "OK"
282        DEFINES="$DEFINES -DHAVE_EMBED_SRC"
283    }
284    
285    
286  # Guess possible config options for this host  # Guess possible config options for this host
287  find_possible_configs()  {  find_possible_configs()  {
288    
# Line 535  Usage: "$0" [OPTIONS] Line 570  Usage: "$0" [OPTIONS]
570            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
571            is being used.            is being used.
572    
573        -ignoretime | -ignore_time | --ignoretime | --ignore_time
574              Ignore all the "wall clock" routines entirely.  This will
575              not in any way hurt the model results -- it simply means
576              that the code that checks how long the model spends in
577              various routines will give junk values.
578    
579      -ts | --ts      -ts | --ts
580            Produce timing information per timestep            Produce timing information per timestep
581        -papis | --papis
582              Produce summary MFlop/s with PAPI per timestep
583        -foolad | --foolad
584              Fool the AD code generator
585        -papi | --papi
586              Performance analysis with PAPI
587        -hpmt | --hpmt
588              Performance analysis with the HPM Toolkit
589    
590        -gsl | --gsl
591              Use GSL to control floating point rounding and precision
592    
593      -mpi | --mpi      -mpi | --mpi
594            Include MPI header files and link to MPI libraries            Include MPI header files and link to MPI libraries
# Line 545  Usage: "$0" [OPTIONS] Line 597  Usage: "$0" [OPTIONS]
597            set to PATH. i.e. Include files from \$PATH/include, link to libraries            set to PATH. i.e. Include files from \$PATH/include, link to libraries
598            from \$PATH/lib and use binaries from \$PATH/bin.            from \$PATH/lib and use binaries from \$PATH/bin.
599    
600        -es | --es | -embed-source | --embed-source
601              Embed a tarball containing the full source code
602              (including the Makefile, etc.) used to build the
603              executable [off by default]
604    
605      -bash NAME      -bash NAME
606            Explicitly specify the Bourne or BASH shell to use            Explicitly specify the Bourne or BASH shell to use
607    
# Line 950  NOOPTFLAGS= Line 1007  NOOPTFLAGS=
1007  MPI=  MPI=
1008  MPIPATH=  MPIPATH=
1009  TS=  TS=
1010    PAPIS=
1011    FOOLAD=
1012    PAPI=
1013    HPMT=
1014    GSL=
1015  HAVE_TEST_L=  HAVE_TEST_L=
1016    
1017  # DEFINES checked by test compilation or command-line  # DEFINES checked by test compilation or command-line
# Line 974  BASH= Line 1036  BASH=
1036  PWD=`pwd`  PWD=`pwd`
1037  test "x$MAKE" = x  &&  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
1038  test "x$AWK" = x   &&  AWK=awk  test "x$AWK" = x   &&  AWK=awk
1039    EMBED_SRC=
1040  THISHOST=`hostname`  THISHOST=`hostname`
1041  THISCWD=`pwd`  THISCWD=`pwd`
1042  THISDATE=`date`  THISDATE=`date`
# Line 1007  TAMC_EXTRA= Line 1070  TAMC_EXTRA=
1070    
1071  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1072  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
1073  gm_s2="FC CPP IEEE TS MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC CPP IEEE TS PAPIS PAPI HPMT GSL MPI JAM DUMPSTATE STANDARDDIRS"
1074    
1075  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1076  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "
# Line 1189  for ac_option in "$@" ; do Line 1252  for ac_option in "$@" ; do
1252    
1253          -ts | --ts)          -ts | --ts)
1254              TS=true ;;              TS=true ;;
1255            -papis | --papis)
1256                PAPIS=true ;;
1257            -foolad | --foolad)
1258                FOOLAD=true ;;
1259            -papi | --papi)
1260                PAPI=true ;;
1261            -hpmt | --hpmt)
1262                HPMT=true ;;
1263    
1264            -gsl | --gsl)
1265                GSL=true ;;
1266    
1267          -mpi | --mpi)          -mpi | --mpi)
1268              MPI=true ;;              MPI=true ;;
# Line 1217  for ac_option in "$@" ; do Line 1291  for ac_option in "$@" ; do
1291          -ignoretime | -ignore_time | --ignoretime | --ignore_time)          -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1292              IGNORE_TIME="-DIGNORE_TIME" ;;              IGNORE_TIME="-DIGNORE_TIME" ;;
1293    
1294            -es | --es | -embed-source | --embed-source)
1295                EMBED_SRC=t ;;
1296    
1297          -*)          -*)
1298              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
1299              usage              usage
# Line 1432  fi Line 1509  fi
1509    
1510  if test ! "x$TS" = x ; then  if test ! "x$TS" = x ; then
1511        echo "  Turning on timing per timestep"        echo "  Turning on timing per timestep"
1512        DEFINES="$DEFINES -DTIME_PER_TIMESTEP"        if test ! "x$FOOLAD" = x ; then
1513                DEFINES="$DEFINES -DTIME_PER_TIMESTEP_SFP"
1514          else
1515                DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1516          fi
1517    fi
1518    if test ! "x$PAPIS" = x ; then
1519          echo "  Turning on PAPI flop summary per timestep"
1520          echo "  Please make sure PAPIINC, PAPILIB are defined"
1521          if test ! "x$FOOLAD" = x ; then
1522                DEFINES="$DEFINES -DUSE_PAPI_FLOPS_SFP"
1523          else
1524                DEFINES="$DEFINES -DUSE_PAPI_FLOPS"
1525          fi
1526          INCLUDES="$INCLUDES $PAPIINC"
1527          LIBS="$LIBS $PAPILIB"
1528    fi
1529    if test ! "x$PAPI" = x ; then
1530          if test ! "x$PAPIS" = x ; then
1531              echo "  PAPI performance analysis and flop summary per timestep cannot co-exist!"
1532              echo "  Sticking with PAPI flop summary per timestep!"
1533          else
1534              echo "  Turning on performance analysis with PAPI"
1535              echo "  Please make sure PAPIINC, PAPILIB are defined"
1536              DEFINES="$DEFINES -DUSE_PAPI"
1537              INCLUDES="$INCLUDES $PAPIINC"
1538              LIBS="$LIBS $PAPILIB"
1539          fi
1540    fi
1541    if test ! "x$HPMT" = x ; then
1542          if test ! "x$PAPI" = x ; then
1543              echo "  PAPI and the HPM Toolkit cannot co-exist!"
1544              echo "  Sticking with PAPI!"
1545          else
1546              echo "  Turning on performance analysis with the HPM Toolkit"
1547              echo "  Please make sure HPMTINC, HPMTLIB are defined"
1548              DEFINES="$DEFINES -DUSE_LIBHPM"
1549              INCLUDES="$INCLUDES $HPMTINC"
1550              LIBS="$LIBS $HPMTLIB"
1551          fi
1552    fi
1553    if test ! "x$GSL" = x ; then
1554          echo "  Turning on use of GSL to control floating point calculations"
1555          echo "  Please make sure GSLINC, GSLLIB are defined"
1556          DEFINES="$DEFINES -DUSE_GSL_IEEE"
1557          INCLUDES="$INCLUDES $GSLINC"
1558          LIBS="$LIBS $GSLLIB"
1559  fi  fi
1560    
1561  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
# Line 1503  if test "x$HAVE_CLOC" != x ; then Line 1626  if test "x$HAVE_CLOC" != x ; then
1626      echo "yes"      echo "yes"
1627  else  else
1628      echo "no"      echo "no"
1629        if test "x$EMBED_SRC" = xt ; then
1630            echo "    WARNING: you requested file embedding but it has"
1631            echo "      been disabled since C code cannot be called"
1632            EMBED_SRC=
1633        fi
1634  fi  fi
1635  rm -f genmake_t*  rm -f genmake_t*
1636    
# Line 1542  else Line 1670  else
1670  fi  fi
1671  DEFINES="$DEFINES $IGNORE_TIME"  DEFINES="$DEFINES $IGNORE_TIME"
1672    
1673    if test "x$EMBED_SRC" = xt ; then
1674        build_embed_encode
1675    fi
1676    if test "x$EMBED_SRC" = xt ; then
1677        ENABLE="$ENABLE embed_files"
1678    fi
1679    
1680    
1681  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1682  printf "  Adding MODS directories:  "  printf "  Adding MODS directories:  "
1683  for d in $MODS ; do  for d in $MODS ; do
# Line 1993  for i in $INCLUDEDIRS ; do Line 2129  for i in $INCLUDEDIRS ; do
2129      fi      fi
2130  done  done
2131    
2132    if test ! "x$DIVA" = x ; then
2133        echo "  Creating the pseudo-MPI include directory"
2134        INCLUDES="-I./mpi_headers $INCLUDES"
2135        rm -rf ./mpi_headers
2136        mkdir -p ./mpi_headers
2137    
2138        if test "x$MPIINCLUDEDIR" = x ; then
2139            if test "x$MPIHOME" = x ; then
2140                MPIHOME='/usr'
2141            fi
2142            MPIINCLUDEDIR='$MPIHOME/include'
2143        fi
2144        
2145        if test -r $MPIINCLUDEDIR/mpif.h ; then
2146            for i in $MPI_HEADER_FILES; do
2147                cp -p $MPIINCLUDEDIR/$i ./mpi_headers
2148            done
2149    
2150            perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
2151        else
2152            echo " We cannot create a copy of mpif.h!"
2153            exit -1
2154        fi
2155    fi
2156    
2157  echo "  Determining the list of source and include files"  echo "  Determining the list of source and include files"
2158  rm -rf .links.tmp  rm -rf .links.tmp
2159  mkdir .links.tmp  mkdir .links.tmp
2160    touch .links.tmp/foo
2161    if test ! -r ".links.tmp/foo" ; then
2162        echo
2163        echo "ERROR : something is wrong with your directory permissions or"
2164        echo "   your user file-creation mask (\"umask\") since creating a"
2165        echo "   sub-dir, touch-ing a file within it, and then reading it is"
2166        echo "   not working.  Please try setting your umask to something"
2167        echo "   sane such as:"
2168        echo
2169        echo "      umask 0002"
2170        echo
2171        echo "   and please verify that you have the proper permissions for"
2172        echo "   creating sub-directories and then reading files created"
2173        echo "   within them."
2174        echo
2175        exit 1
2176    fi
2177    rm -f .links.tmp/foo
2178  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2179  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2180  printf 'SRCFILES = '    > srclist.inc  printf 'SRCFILES = '    > srclist.inc
# Line 2014  for d in $alldirs ; do Line 2193  for d in $alldirs ; do
2193                  ignore_f=f                  ignore_f=f
2194                  case $d/$sf in                  case $d/$sf in
2195                    ./$PACKAGES_DOT_H)                    ./$PACKAGES_DOT_H)
2196                            ignore_f=t
2197                          ;;                          ;;
2198                    ./AD_CONFIG.h)                    ./AD_CONFIG.h)
2199                            ignore_f=t
2200                          ;;                          ;;
2201                    ./FC_NAMEMANGLE.h)                    ./FC_NAMEMANGLE.h)
2202                            ignore_f=t
2203                          ;;                          ;;
2204                    ./BUILD_INFO.h)                    ./BUILD_INFO.h)
2205                            ignore_f=t
2206                            ;;
2207                      ./EMBEDDED_FILES.h)
2208                            ignore_f=t
2209                          ;;                          ;;
2210                    *)                    *)
2211                          #  For the local directory *ONLY*,                          #  For the local directory *ONLY*,
# Line 2132  DISABLED_PACKAGES = ${DISABLED_PACKAGES} Line 2318  DISABLED_PACKAGES = ${DISABLED_PACKAGES}
2318    
2319  # These files are created by Makefile  # These files are created by Makefile
2320  SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h  SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h
   
2321  EOF  EOF
2322    
2323  #  Note: figure out some way to add Hyades JAM libraries here  if test "x$EMBED_SRC" = xt ; then
2324        echo "EMBEDDED_FILES = EMBEDDED_FILES.h" >>$MAKEFILE
2325    else
2326        echo "EMBEDDED_FILES = " >>$MAKEFILE
2327    fi
2328    
2329    #  Note: figure out some way to add Hyades JAM libraries here
2330  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2331  # Unix ln (link)  # Unix ln (link)
2332  LN = ${LN}  LN = ${LN}
# Line 2198  rm -f ad_flow_files.inc Line 2388  rm -f ad_flow_files.inc
2388  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2389    
2390  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2391  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES) \$(EMBEDDED_FILES)
2392          @echo Creating \$@ ...          @echo Creating \$@ ...
2393          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2394  depend:  depend:
# Line 2226  Clean: Line 2416  Clean:
2416          @make clean          @make clean
2417          @make cleanlinks          @make cleanlinks
2418          -rm -f \$(SPECIAL_FILES)          -rm -f \$(SPECIAL_FILES)
2419          -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak          -rm -f genmake* make.log run.log *.bak
2420  CLEAN:  CLEAN:
2421          @make Clean          @make Clean
2422          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2423          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2424          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2425          -rm -f \$(EXECUTABLE) output.txt STD*          -rm -f \$(EXECUTABLE) *.txt STD* *diagnostics.log datetime
2426            -rm -rf mnc_test_*
2427    
2428  #eh3 Makefile: makefile  #eh3 Makefile: makefile
2429  makefile:  makefile:
# Line 2260  test ! "x$THISUSER" = x && echo "      -echo Line 2451  test ! "x$THISUSER" = x && echo "      -echo
2451  test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE  test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2452  test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE  test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2453    
2454    if test "x$EMBED_SRC" = xt ; then
2455        cat >>$MAKEFILE <<EOF
2456    
2457    decode_files.o : EMBEDDED_FILES.h
2458    
2459    ##  \$(F77FILES)
2460    all_fF.tar.gz : \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile
2461            @echo Creating \$@ ...
2462            -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile
2463            -rm -f all_fF.tar.gz
2464            -gzip all_fF.tar
2465    
2466    EMBEDDED_FILES.h : all_fF.tar.gz
2467            @echo Creating \$@ ...
2468            -\${ROOTDIR}/tools/embed_encode/encode_files EMBEDDED_FILES.h all_fF.tar.gz
2469    
2470    EOF
2471    fi
2472    
2473  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2474    
2475  # The normal chain of rules is (  .F - .$FS - .o  )  # The normal chain of rules is (  .F - .$FS - .o  )
# Line 2276  cat >>$MAKEFILE <<EOF Line 2486  cat >>$MAKEFILE <<EOF
2486  .$FS90.o:  .$FS90.o:
2487          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2488  .c.o:  .c.o:
2489          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2490    
2491  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2492  .F.p:  .F.p:

Legend:
Removed from v.1.138  
changed lines
  Added in v.1.144

  ViewVC Help
Powered by ViewVC 1.1.22