/[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.127 by heimbach, Fri Aug 19 17:59:34 2005 UTC revision 1.150 by edhill, Mon May 22 22:11:11 2006 UTC
# Line 13  Line 13 
13  test_for_package_in_cpp_options() {  test_for_package_in_cpp_options() {
14      cpp_options=$1      cpp_options=$1
15      pkg=$2      pkg=$2
16      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg[ ]"
17      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg[ ]"
18      test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg[ ]"
19      test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg[ ]"
20        test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg$"
21        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg$"
22        test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg$"
23        test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg$"
24  }  }
25    
26  # Search for particular CPP #cmds associated with MPI  # Search for particular CPP #cmds associated with MPI
27  # usage: test_for_mpi_in_cpp_eeoptions CPP_file  # usage: test_for_mpi_in_cpp_eeoptions CPP_file
28  test_for_mpi_in_cpp_eeoptions() {  test_for_mpi_in_cpp_eeoptions() {
29      cpp_options=$1      cpp_options=$1
30      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI[ ]"
31      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI[ ]"
32      test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI[ ]"
33      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI[ ]"
34        test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI$"
35        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI$"
36        test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI$"
37        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI$"
38  }  }
39    
40  # Search for particular string in a file. Return 1 if detected, 0 if not  # Search for particular string in a file. Return 1 if detected, 0 if not
# Line 39  test_for_string_in_file() { Line 47  test_for_string_in_file() {
47      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
48          printf "Error: In $file there is an illegal line: "          printf "Error: In $file there is an illegal line: "
49          grep -i "$strng" $file          grep -i "$strng" $file
50          return 1          exit 99
51      fi      fi
52      return 0      return 0
53  }  }
# Line 248  build_cyrus_makedepend()  { Line 256  build_cyrus_makedepend()  {
256      fi      fi
257  }  }
258    
259    
260    build_embed_encode()
261    {
262        printf "  building the embed-encode utility...  "
263        if test ! -e "$ROOTDIR/tools/embed_encode/encode_files" ; then
264            if test ! -d "$ROOTDIR/tools/embed_encode" ; then
265                echo
266                echo "    Error: can't locate \"$ROOTDIR/tools/embed_encode\""
267                echo
268                EMBED_SRC=f
269                return 1
270            fi
271            clist="cc gcc c89 $CC"
272            for ic in $clist ; do
273                comm="$ic -o encode_files encode_files.c"
274                ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1
275                RETVAL=$?
276                if test "x$RETVAL" = x0 ; then
277                    echo "OK"
278                    DEFINES="$DEFINES -DHAVE_EMBED_SRC"
279                    return 0
280                fi
281            done
282            echo
283            echo "    Error: unable to build $ROOTDIR/embed_encode/encode_files"
284            echo "      so it has been disabled"
285            echo
286            EMBED_SRC=f
287            return 1
288        fi
289        echo "OK"
290        DEFINES="$DEFINES -DHAVE_EMBED_SRC"
291    }
292    
293    
294  # Guess possible config options for this host  # Guess possible config options for this host
295  find_possible_configs()  {  find_possible_configs()  {
296    
# Line 353  EOF Line 396  EOF
396      else      else
397          echo "  The possible FORTRAN compilers found in your path are:"          echo "  The possible FORTRAN compilers found in your path are:"
398          echo "   "$p_FC          echo "   "$p_FC
399          if test "x$FC" = x ; then      fi
400              FC=`echo $p_FC | $AWK '{print $1}'`  
401              echo "  Setting FORTRAN compiler to: "$FC      #  Use the first of the compilers found in the current PATH
402          fi      #  that has a correctly-named optfile
403        if test "x$OPTFILE" = x  -a  "x$FC" = x ; then
404            for i in $p_FC ; do
405                OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
406                if test -r $OPTFILE ; then
407                    echo "  Setting OPTFILE to: "$OPTFILE
408                    break
409                fi
410            done
411      fi      fi
412    
413      if test "x$OPTFILE" = x ; then      if test "x$OPTFILE" = x ; then
# Line 527  Usage: "$0" [OPTIONS] Line 578  Usage: "$0" [OPTIONS]
578            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
579            is being used.            is being used.
580    
581        -ignoretime | -ignore_time | --ignoretime | --ignore_time
582              Ignore all the "wall clock" routines entirely.  This will
583              not in any way hurt the model results -- it simply means
584              that the code that checks how long the model spends in
585              various routines will give junk values.
586    
587      -ts | --ts      -ts | --ts
588            Produce timing information per timestep            Produce timing information per timestep
589        -papis | --papis
590              Produce summary MFlop/s (and IPC) with PAPI per timestep
591        -pcls | --pcls
592              Produce summary MFlop/s etc. with PCL per timestep
593        -foolad | --foolad
594              Fool the AD code generator
595        -papi | --papi
596              Performance analysis with PAPI
597        -pcl | --pcl
598              Performance analysis with PCL
599        -hpmt | --hpmt
600              Performance analysis with the HPM Toolkit
601    
602        -gsl | --gsl
603              Use GSL to control floating point rounding and precision
604    
605      -mpi | --mpi      -mpi | --mpi
606            Include MPI header files and link to MPI libraries            Include MPI header files and link to MPI libraries
# Line 537  Usage: "$0" [OPTIONS] Line 609  Usage: "$0" [OPTIONS]
609            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
610            from \$PATH/lib and use binaries from \$PATH/bin.            from \$PATH/lib and use binaries from \$PATH/bin.
611    
612        -es | --es | -embed-source | --embed-source
613              Embed a tarball containing the full source code
614              (including the Makefile, etc.) used to build the
615              executable [off by default]
616    
617      -bash NAME      -bash NAME
618            Explicitly specify the Bourne or BASH shell to use            Explicitly specify the Bourne or BASH shell to use
619    
# Line 601  EOF Line 678  EOF
678        call tsub( string )        call tsub( string )
679        end        end
680  EOF  EOF
681      $FC $FFLAGS $DEFINES -c genmake_tcomp.$FS >> genmake_warnings 2>&1      $FC $FFLAGS -c genmake_tcomp.$FS >> genmake_warnings 2>&1
682      RETVAL=$?      RETVAL=$?
683      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
684          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 671  EOF Line 748  EOF
748      RET_C=$?      RET_C=$?
749      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
750        program hello        program hello
751        Real*8 wtime        REAL*8 wtime
752        external cloc        external cloc
753        call cloc(wtime)        call cloc(wtime)
754        print *," HELLO WORLD", wtime        print *," HELLO WORLD", wtime
755        end program hello        end
756  EOF  EOF
757      $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1      $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1
758      RET_F=$?      RET_F=$?
# Line 689  EOF Line 766  EOF
766  }  }
767    
768    
769    check_HAVE_SIGREG()  {
770        if test ! "x$HAVE_SIGREG" = x ; then
771            return
772        fi
773        get_fortran_c_namemangling
774        cat <<EOF > genmake_tc_1.c
775    $FC_NAMEMANGLE
776    #include <stdlib.h>
777    #include <stdio.h>
778    #include <signal.h>
779    #include <errno.h>
780    #include <ucontext.h>
781    
782    int * ip;
783    
784    static void killhandler(
785        unsigned int sn, siginfo_t  si, struct ucontext *sc )
786    {
787        *ip = *ip + 1;
788        return;
789    }
790    
791    void FC_NAMEMANGLE(sigreg) (int * aip)
792    {
793        struct sigaction s;
794        ip = aip;
795        s.sa_flags = SA_SIGINFO;
796        s.sa_sigaction = (void *)killhandler;
797        if(sigaction (SIGTERM,&s,(struct sigaction *)NULL)) {
798            printf("Sigaction returned error = %d\n", errno);
799            exit(0);
800        }
801        return;
802    }
803    EOF
804        make genmake_tc_1.o >> genmake_warnings 2>&1
805        RET_C=$?
806        cat <<EOF > genmake_tc_2.$FS
807          program hello
808          integer anint
809          common /iv/ anint
810          external sigreg
811          call sigreg(anint)
812          end
813    EOF
814        echo >> genmake_warnings
815        echo "running: check_HAVE_SIGREG()" >> genmake_warnings
816        cat genmake_tc_2.$FS >> genmake_warnings
817        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
818        echo $COMM >> genmake_warnings
819        $COMM >> genmake_warnings 2>&1
820        RETVAL=$?
821        if test "x$RETVAL" = x0 ; then
822            HAVE_SIGREG=t
823            DEFINES="$DEFINES -DHAVE_SIGREG"
824        fi
825        rm -f genmake_tc*
826    }
827    
828    
829    check_HAVE_SETRLSTK()  {
830        get_fortran_c_namemangling
831        cat <<EOF > genmake_tc_1.c
832    $FC_NAMEMANGLE
833    #include <sys/time.h>
834    #include <sys/resource.h>
835    #include <unistd.h>
836    void FC_NAMEMANGLE(setrlstk) ()
837    {
838        struct rlimit rls;
839        rls.rlim_cur = RLIM_INFINITY;
840        rls.rlim_max = RLIM_INFINITY;
841        setrlimit(RLIMIT_STACK, &rls);
842        return;
843    }
844    EOF
845        make genmake_tc_1.o >> genmake_warnings 2>&1
846        RET_C=$?
847        cat <<EOF > genmake_tc_2.$FS
848          program hello
849          external setrlstk
850          call setrlstk()
851          end
852    EOF
853        echo >> genmake_warnings
854        echo "running: check_HAVE_SETRLSTK()" >> genmake_warnings
855        cat genmake_tc_2.$FS >> genmake_warnings
856        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
857        echo $COMM >> genmake_warnings
858        $COMM >> genmake_warnings 2>&1
859        RETVAL=$?
860        if test "x$RETVAL" = x0 ; then
861            HAVE_SETRLSTK=t
862            DEFINES="$DEFINES -DHAVE_SETRLSTK"
863        fi
864        rm -f genmake_tc*
865    }
866    
867    
868  check_HAVE_STAT()  {  check_HAVE_STAT()  {
869      get_fortran_c_namemangling      get_fortran_c_namemangling
870      cat <<EOF > genmake_tc_1.c      cat <<EOF > genmake_tc_1.c
# Line 717  EOF Line 893  EOF
893        integer nbyte        integer nbyte
894        call tfsize(nbyte)        call tfsize(nbyte)
895        print *," HELLO WORLD", nbyte        print *," HELLO WORLD", nbyte
896        end program hello        end
897  EOF  EOF
898      $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_tc.log 2>&1      echo >> genmake_warnings
899      RET_F=$?      echo "running: check_HAVE_STAT()" >> genmake_warnings
900      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_tc.log 2>&1      cat genmake_tc_2.$FS >> genmake_warnings
901        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
902        echo $COMM >> genmake_warnings
903        $COMM >> genmake_tc.log 2>&1
904      RETVAL=$?      RETVAL=$?
905      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
906          HAVE_STAT=t          HAVE_STAT=t
# Line 735  check_netcdf_libs()  { Line 914  check_netcdf_libs()  {
914      if test ! "x$SKIP_NETCDF_CHECK" = x ; then      if test ! "x$SKIP_NETCDF_CHECK" = x ; then
915          return          return
916      fi      fi
917      echo "" > genmake_tnc.log      echo >> genmake_warnings
918        echo "running: check_netcdf_libs()" >> genmake_warnings
919      cat <<EOF > genmake_tnc.F      cat <<EOF > genmake_tnc.F
920        program fgennc        program fgennc
921  #include "netcdf.inc"  #include "netcdf.inc"
# Line 753  EOF Line 933  EOF
933        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
934        end        end
935  EOF  EOF
936      echo "Executing:" > genmake_tnc.log      echo "===  genmake_tnc.F  ===" > genmake_tnc.log
937      echo "  $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS" \      cat genmake_tnc.F >> genmake_tnc.log
938          > genmake_tnc.log      echo "===  genmake_tnc.F  ===" >> genmake_tnc.log
939      RET_CPP=f      RET_CPP=f
940      $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null  \      COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES"
941          &&  RET_CPP=t      echo "$COMM" >> genmake_tnc.log
942        $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t
943      if test "x$RET_CPP" = xf ; then      if test "x$RET_CPP" = xf ; then
944          echo "  WARNING: CPP failed to pre-process the netcdf test." \          echo "  WARNING: CPP failed to pre-process the netcdf test." \
945              > genmake_tnc.log              >> genmake_tnc.log
946          echo "    Please check that \$INCLUDES is properly set." \          echo "    Please check that \$INCLUDES is properly set." \
947              > genmake_tnc.log              >> genmake_tnc.log
948      fi      fi
949      echo "Executing:" > genmake_tnc.log      echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log
950      echo "  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS" > genmake_tnc.log      echo "  &&  $LINK -o genmake_tnc.o $LIBS" >> genmake_tnc.log
     echo "  $LINK -o genmake_tnc.o $LIBS" > genmake_tnc.log  
951      $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \      $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
952          &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1          &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
953      RET_COMPILE=$?      RET_COMPILE=$?
954        cat genmake_tnc.log >> genmake_warnings
955    
956      #EH3  Remove test program execution for machines that either disallow      #EH3  Remove test program execution for machines that either disallow
957      #EH3  execution or cannot support it (eg. cross-compilers)      #EH3  execution or cannot support it (eg. cross-compilers)
# Line 783  EOF Line 964  EOF
964          HAVE_NETCDF=t          HAVE_NETCDF=t
965      else      else
966          # try again with "-lnetcdf" added to the libs          # try again with "-lnetcdf" added to the libs
967          $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null  \          echo "try again with added '-lnetcdf'" > genmake_tnc.log
968            echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
969            echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
970            echo " &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
971            cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
972              &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \              &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
973              &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1              &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
974          RET_COMPILE=$?          RET_COMPILE=$?
975            cat genmake_tnc.log >> genmake_warnings
976          if test "x$RET_COMPILE" = x0 ; then          if test "x$RET_COMPILE" = x0 ; then
977              LIBS="$LIBS -lnetcdf"              LIBS="$LIBS -lnetcdf"
978              HAVE_NETCDF=t              HAVE_NETCDF=t
         else  
             cat genmake_tnc.log >> genmake_warnings  
979          fi          fi
980      fi      fi
981      rm -f genmake_tnc*      rm -f genmake_tnc*
# Line 838  NOOPTFLAGS= Line 1022  NOOPTFLAGS=
1022  MPI=  MPI=
1023  MPIPATH=  MPIPATH=
1024  TS=  TS=
1025    PAPIS=
1026    PCLS=
1027    FOOLAD=
1028    PAPI=
1029    PCL=
1030    HPMT=
1031    GSL=
1032    HAVE_TEST_L=
1033    
1034  # DEFINES checked by test compilation or command-line  # DEFINES checked by test compilation or command-line
1035  HAVE_SYSTEM=  HAVE_SYSTEM=
1036  HAVE_FDATE=  HAVE_FDATE=
1037  FC_NAMEMANGLE=  FC_NAMEMANGLE=
1038  HAVE_CLOC=  HAVE_CLOC=
1039    HAVE_SETRLSTK=
1040  HAVE_STAT=  HAVE_STAT=
1041  HAVE_NETCDF=  HAVE_NETCDF=
1042  HAVE_ETIME=  HAVE_ETIME=
# Line 860  BASH= Line 1053  BASH=
1053  PWD=`pwd`  PWD=`pwd`
1054  test "x$MAKE" = x  &&  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
1055  test "x$AWK" = x   &&  AWK=awk  test "x$AWK" = x   &&  AWK=awk
1056    EMBED_SRC=
1057  THISHOST=`hostname`  THISHOST=`hostname`
1058  THISCWD=`pwd`  THISCWD=`pwd`
1059  THISDATE=`date`  THISDATE=`date`
# Line 893  TAMC_EXTRA= Line 1087  TAMC_EXTRA=
1087    
1088  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1089  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
1090  gm_s2="FC CPP IEEE TS MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC CPP IEEE TS PAPIS PCLS PAPI PCL HPMT GSL MPI JAM DUMPSTATE STANDARDDIRS"
1091    
1092  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1093  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 1075  for ac_option in "$@" ; do Line 1269  for ac_option in "$@" ; do
1269    
1270          -ts | --ts)          -ts | --ts)
1271              TS=true ;;              TS=true ;;
1272            -papis | --papis)
1273                PAPIS=true ;;
1274            -pcls | --pcls)
1275                PCLS=true ;;
1276            -foolad | --foolad)
1277                FOOLAD=true ;;
1278            -papi | --papi)
1279                PAPI=true ;;
1280            -pcl | --pcl)
1281                PCL=true ;;
1282            -hpmt | --hpmt)
1283                HPMT=true ;;
1284    
1285            -gsl | --gsl)
1286                GSL=true ;;
1287    
1288          -mpi | --mpi)          -mpi | --mpi)
1289              MPI=true ;;              MPI=true ;;
# Line 1103  for ac_option in "$@" ; do Line 1312  for ac_option in "$@" ; do
1312          -ignoretime | -ignore_time | --ignoretime | --ignore_time)          -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1313              IGNORE_TIME="-DIGNORE_TIME" ;;              IGNORE_TIME="-DIGNORE_TIME" ;;
1314    
1315            -es | --es | -embed-source | --embed-source)
1316                EMBED_SRC=t ;;
1317    
1318          -*)          -*)
1319              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
1320              usage              usage
# Line 1301  Error: The command "ln -s" failed -- ple Line 1513  Error: The command "ln -s" failed -- ple
1513  EOF  EOF
1514      exit 1      exit 1
1515  fi  fi
1516    test -L genmake_tlink > /dev/null 2>&1
1517    RETVAL=$?
1518    if test "x$RETVAL" = x0 ; then
1519        HAVE_TEST_L=t
1520    fi
1521  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
1522    
1523  #  Check for broken *.F/*.f handling and fix if possible  #  Check for broken *.F/*.f handling and fix if possible
# Line 1313  fi Line 1530  fi
1530    
1531  if test ! "x$TS" = x ; then  if test ! "x$TS" = x ; then
1532        echo "  Turning on timing per timestep"        echo "  Turning on timing per timestep"
1533        DEFINES="$DEFINES -DTIME_PER_TIMESTEP"        if test ! "x$FOOLAD" = x ; then
1534                DEFINES="$DEFINES -DTIME_PER_TIMESTEP_SFP"
1535          else
1536                DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1537          fi
1538    fi
1539    if test ! "x$PAPIS" = x ; then
1540          echo "  Turning on PAPI flop summary per timestep"
1541          echo "  Please make sure PAPIINC, PAPILIB are defined"
1542          if test ! "x$FOOLAD" = x ; then
1543                DEFINES="$DEFINES -DUSE_PAPI_FLOPS_SFP"
1544          else
1545                DEFINES="$DEFINES -DUSE_PAPI_FLOPS"
1546          fi
1547          INCLUDES="$INCLUDES $PAPIINC"
1548          LIBS="$LIBS $PAPILIB"
1549    fi
1550    if test ! "x$PCLS" = x ; then
1551          echo "  Turning on PCL counter summary per timestep"
1552          echo "  Please make sure PCLINC, PCLLIB are defined"
1553          if test ! "x$FOOLAD" = x ; then
1554                DEFINES="$DEFINES -DUSE_PCL_FLOPS_SFP"
1555          else
1556                DEFINES="$DEFINES -DUSE_PCL_FLOPS"
1557          fi
1558          INCLUDES="$INCLUDES $PCLINC"
1559          LIBS="$LIBS $PCLLIB"
1560    fi
1561    if test ! "x$PAPI" = x ; then
1562          if test ! "x$PAPIS" = x ; then
1563              echo "  PAPI performance analysis and flop summary per timestep cannot co-exist!"
1564              echo "  Sticking with PAPI flop summary per timestep!"
1565          else
1566              echo "  Turning on performance analysis with PAPI"
1567              echo "  Please make sure PAPIINC, PAPILIB are defined"
1568              DEFINES="$DEFINES -DUSE_PAPI"
1569              INCLUDES="$INCLUDES $PAPIINC"
1570              LIBS="$LIBS $PAPILIB"
1571          fi
1572    fi
1573    if test ! "x$PCL" = x ; then
1574          if test ! "x$PCLS" = x ; then
1575              echo "  PCL performance analysis and flop summary per timestep cannot co-exist!"
1576              echo "  Sticking with PCL flop summary per timestep!"
1577          else
1578              echo "  Turning on performance analysis with PCL"
1579              echo "  Please make sure PCLINC, PCLLIB are defined"
1580              DEFINES="$DEFINES -DUSE_PCL"
1581              INCLUDES="$INCLUDES $PCLINC"
1582              LIBS="$LIBS $PCLLIB"
1583          fi
1584    fi
1585    if test ! "x$HPMT" = x ; then
1586          if test ! "x$PAPI" = x ; then
1587              echo "  PAPI and the HPM Toolkit cannot co-exist!"
1588              echo "  Sticking with PAPI!"
1589          else if test ! "x$PCL" = x ; then
1590              echo "  PCL and the HPM Toolkit cannot co-exist!"
1591              echo "  Sticking with PCL!"
1592          else
1593              echo "  Turning on performance analysis with the HPM Toolkit"
1594              echo "  Please make sure HPMTINC, HPMTLIB are defined"
1595              DEFINES="$DEFINES -DUSE_LIBHPM"
1596              INCLUDES="$INCLUDES $HPMTINC"
1597              LIBS="$LIBS $HPMTLIB"
1598          fi
1599          fi
1600    fi
1601    if test ! "x$GSL" = x ; then
1602          echo "  Turning on use of GSL to control floating point calculations"
1603          echo "  Please make sure GSLINC, GSLLIB are defined"
1604          DEFINES="$DEFINES -DUSE_GSL_IEEE"
1605          INCLUDES="$INCLUDES $GSLINC"
1606          LIBS="$LIBS $GSLLIB"
1607  fi  fi
1608    
1609  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
# Line 1323  cat > genmake_tcomp.$FS <<EOF Line 1613  cat > genmake_tcomp.$FS <<EOF
1613        call system('echo hi')        call system('echo hi')
1614        end        end
1615  EOF  EOF
1616  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1  $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1617  RETVAL=$?  RETVAL=$?
1618  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1619      HAVE_SYSTEM=t      HAVE_SYSTEM=t
# Line 1338  rm -f genmake_tcomp* Line 1628  rm -f genmake_tcomp*
1628  printf "  Do we have the fdate() command using $FC...  "  printf "  Do we have the fdate() command using $FC...  "
1629  cat > genmake_tcomp.$FS <<EOF  cat > genmake_tcomp.$FS <<EOF
1630        program hello        program hello
1631        CHARACTER(128) string        CHARACTER*(128) string
1632        string = ' '        string = ' '
1633        call fdate( string )        call fdate( string )
1634        print *, string        print *, string
1635        end        end
1636  EOF  EOF
1637  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1  $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1638  RETVAL=$?  RETVAL=$?
1639  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1640      HAVE_FDATE=t      HAVE_FDATE=t
# Line 1366  cat > genmake_tcomp.$FS <<EOF Line 1656  cat > genmake_tcomp.$FS <<EOF
1656        print *, tarray        print *, tarray
1657        end        end
1658  EOF  EOF
1659  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1  $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1660  RETVAL=$?  RETVAL=$?
1661  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1662      HAVE_ETIME=t      HAVE_ETIME=t
# Line 1384  if test "x$HAVE_CLOC" != x ; then Line 1674  if test "x$HAVE_CLOC" != x ; then
1674      echo "yes"      echo "yes"
1675  else  else
1676      echo "no"      echo "no"
1677        if test "x$EMBED_SRC" = xt ; then
1678            echo "    WARNING: you requested file embedding but it has"
1679            echo "      been disabled since C code cannot be called"
1680            EMBED_SRC=
1681        fi
1682    fi
1683    rm -f genmake_t*
1684    
1685    printf "  Can we unlimit the stack size using $FC...  "
1686    check_HAVE_SETRLSTK
1687    if test "x$HAVE_SETRLSTK" != x ; then
1688        echo "yes"
1689    else
1690        echo "no"
1691    fi
1692    rm -f genmake_t*
1693    
1694    printf "  Can we register a signal handler using $FC...  "
1695    check_HAVE_SIGREG
1696    if test "x$HAVE_SIGREG" = xt ; then
1697        echo "yes"
1698    else
1699        echo "no"
1700  fi  fi
1701  rm -f genmake_t*  rm -f genmake_t*
1702    
# Line 1405  else Line 1718  else
1718  fi  fi
1719  DEFINES="$DEFINES $IGNORE_TIME"  DEFINES="$DEFINES $IGNORE_TIME"
1720    
1721    if test "x$EMBED_SRC" = xt ; then
1722        build_embed_encode
1723    fi
1724    if test "x$EMBED_SRC" = xt ; then
1725        ENABLE="$ENABLE embed_files"
1726    fi
1727    
1728    
1729  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1730  printf "  Adding MODS directories:  "  printf "  Adding MODS directories:  "
1731  for d in $MODS ; do  for d in $MODS ; do
# Line 1856  for i in $INCLUDEDIRS ; do Line 2177  for i in $INCLUDEDIRS ; do
2177      fi      fi
2178  done  done
2179    
2180    if test ! "x$DIVA" = x ; then
2181        echo "  Creating the pseudo-MPI include directory"
2182        INCLUDES="-I./mpi_headers $INCLUDES"
2183        rm -rf ./mpi_headers
2184        mkdir -p ./mpi_headers
2185    
2186        if test "x$MPIINCLUDEDIR" = x ; then
2187            if test "x$MPIHOME" = x ; then
2188                MPIHOME='/usr'
2189            fi
2190            MPIINCLUDEDIR='$MPIHOME/include'
2191        fi
2192        
2193        if test -r $MPIINCLUDEDIR/mpif.h ; then
2194            for i in $MPI_HEADER_FILES; do
2195                cp -p $MPIINCLUDEDIR/$i ./mpi_headers
2196            done
2197    
2198            perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
2199        else
2200            echo " We cannot create a copy of mpif.h!"
2201            exit -1
2202        fi
2203    fi
2204    
2205  echo "  Determining the list of source and include files"  echo "  Determining the list of source and include files"
2206  rm -rf .links.tmp  rm -rf .links.tmp
2207  mkdir .links.tmp  mkdir .links.tmp
2208    touch .links.tmp/foo
2209    if test ! -r ".links.tmp/foo" ; then
2210        echo
2211        echo "ERROR : something is wrong with your directory permissions or"
2212        echo "   your user file-creation mask (\"umask\") since creating a"
2213        echo "   sub-dir, touch-ing a file within it, and then reading it is"
2214        echo "   not working.  Please try setting your umask to something"
2215        echo "   sane such as:"
2216        echo
2217        echo "      umask 0002"
2218        echo
2219        echo "   and please verify that you have the proper permissions for"
2220        echo "   creating sub-directories and then reading files created"
2221        echo "   within them."
2222        echo
2223        exit 1
2224    fi
2225    rm -f .links.tmp/foo
2226  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2227  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2228  printf 'SRCFILES = '    > srclist.inc  printf 'SRCFILES = '    > srclist.inc
# Line 1874  for d in $alldirs ; do Line 2238  for d in $alldirs ; do
2238      for sf in $sfiles ; do      for sf in $sfiles ; do
2239          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2240              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
2241                    ignore_f=f
2242                  case $d/$sf in                  case $d/$sf in
2243                    ./$PACKAGES_DOT_H)                    ./$PACKAGES_DOT_H)
2244                            ignore_f=t
2245                          ;;                          ;;
2246                    ./AD_CONFIG.h)                    ./AD_CONFIG.h)
2247                            ignore_f=t
2248                          ;;                          ;;
2249                    ./FC_NAMEMANGLE.h)                    ./FC_NAMEMANGLE.h)
2250                            ignore_f=t
2251                          ;;                          ;;
2252                    ./BUILD_INFO.h)                    ./BUILD_INFO.h)
2253                            ignore_f=t
2254                            ;;
2255                      ./EMBEDDED_FILES.h)
2256                            ignore_f=t
2257                          ;;                          ;;
2258                    *)                    *)
2259                          touch .links.tmp/$sf                          #  For the local directory *ONLY*,
2260                          deplist="$deplist $sf"                          #  ignore all soft-links
2261                            if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then
2262                                ignore_f=t
2263                            else
2264                                touch .links.tmp/$sf
2265                                deplist="$deplist $sf"
2266                            fi
2267                          ;;                          ;;
2268                  esac                  esac
2269                  extn=`echo $sf | $AWK -F. '{print $NF}'`                  if test "x$ignore_f" = xf ; then
2270                  case $extn in                      extn=`echo $sf | $AWK -F. '{print $NF}'`
2271                      F)                      case $extn in
2272                          echo    " \\"  >> srclist.inc                          F)
2273                          printf " $sf" >> srclist.inc                              echo    " \\"  >> srclist.inc
2274                          ;;                              printf " $sf" >> srclist.inc
2275                      F90)                              ;;
2276                          echo    " \\"  >> f90srclist.inc                          F90)
2277                          printf " $sf" >> f90srclist.inc                              echo    " \\"  >> f90srclist.inc
2278                          ;;                              printf " $sf" >> f90srclist.inc
2279                      c)                              ;;
2280                          echo    " \\"  >> csrclist.inc                          c)
2281                          printf " $sf" >> csrclist.inc                              echo    " \\"  >> csrclist.inc
2282                          ;;                              printf " $sf" >> csrclist.inc
2283                      h)                              ;;
2284                          echo    " \\"  >> hlist.inc                          h)
2285                          printf " $sf" >> hlist.inc                              echo    " \\"  >> hlist.inc
2286                          ;;                              printf " $sf" >> hlist.inc
2287                      flow)                              ;;
2288                          echo    " \\"  >> ad_flow_files.inc                          flow)
2289                          printf " $sf" >> ad_flow_files.inc                              echo    " \\"  >> ad_flow_files.inc
2290                          ;;                              printf " $sf" >> ad_flow_files.inc
2291                  esac                              ;;
2292                        esac
2293                    fi
2294              fi              fi
2295          fi          fi
2296      done      done
# Line 1986  DISABLED_PACKAGES = ${DISABLED_PACKAGES} Line 2366  DISABLED_PACKAGES = ${DISABLED_PACKAGES}
2366    
2367  # These files are created by Makefile  # These files are created by Makefile
2368  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
   
2369  EOF  EOF
2370    
2371  #  Note: figure out some way to add Hyades JAM libraries here  if test "x$EMBED_SRC" = xt ; then
2372        echo "EMBEDDED_FILES = EMBEDDED_FILES.h" >>$MAKEFILE
2373    else
2374        echo "EMBEDDED_FILES = " >>$MAKEFILE
2375    fi
2376    
2377    #  Note: figure out some way to add Hyades JAM libraries here
2378  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2379  # Unix ln (link)  # Unix ln (link)
2380  LN = ${LN}  LN = ${LN}
# Line 2052  rm -f ad_flow_files.inc Line 2436  rm -f ad_flow_files.inc
2436  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2437    
2438  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2439  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES) \$(EMBEDDED_FILES)
2440          @echo Creating \$@ ...          @echo Creating \$@ ...
2441          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2442  depend:  depend:
# Line 2061  depend: Line 2445  depend:
2445          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2446          -rm -f makedepend.out          -rm -f makedepend.out
2447    
2448    lib: libmitgcmuv.a
2449    
2450    libmitgcmuv.a: \$(OBJFILES)
2451            ar rcv libmitgcmuv.a \$(OBJFILES)
2452    
2453  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
2454    
2455  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77FILES) \$(F90FILES)
# Line 2081  CLEAN: Line 2470  CLEAN:
2470          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2471          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2472          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2473          -rm -f \$(EXECUTABLE) output.txt STD*          -rm -f \$(EXECUTABLE) *.txt STD* *diagnostics.log datetime
2474            -rm -rf mnc_test_*
2475    
2476  #eh3 Makefile: makefile  #eh3 Makefile: makefile
2477  makefile:  makefile:
# Line 2109  test ! "x$THISUSER" = x && echo "      -echo Line 2499  test ! "x$THISUSER" = x && echo "      -echo
2499  test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE  test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2500  test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE  test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2501    
2502    if test "x$EMBED_SRC" = xt ; then
2503        cat >>$MAKEFILE <<EOF
2504    
2505    decode_files.o : EMBEDDED_FILES.h
2506    
2507    ##  \$(F77FILES)
2508    all_fF.tar.gz : \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile
2509            @echo Creating \$@ ...
2510            -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile
2511            -rm -f all_fF.tar.gz
2512            -gzip all_fF.tar
2513    
2514    EMBEDDED_FILES.h : all_fF.tar.gz
2515            @echo Creating \$@ ...
2516            -\${ROOTDIR}/tools/embed_encode/encode_files EMBEDDED_FILES.h all_fF.tar.gz
2517    
2518    EOF
2519    fi
2520    
2521  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2522    
2523  # The normal chain of rules is (  .F - .$FS - .o  )  # The normal chain of rules is (  .F - .$FS - .o  )
# Line 2125  cat >>$MAKEFILE <<EOF Line 2534  cat >>$MAKEFILE <<EOF
2534  .$FS90.o:  .$FS90.o:
2535          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2536  .c.o:  .c.o:
2537          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2538    
2539  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2540  .F.p:  .F.p:

Legend:
Removed from v.1.127  
changed lines
  Added in v.1.150

  ViewVC Help
Powered by ViewVC 1.1.22