--- MITgcm/tools/genmake2 2006/04/07 02:53:55 1.146 +++ MITgcm/tools/genmake2 2007/01/31 21:28:10 1.160 @@ -1,6 +1,6 @@ #! /usr/bin/env bash # -# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/genmake2,v 1.146 2006/04/07 02:53:55 edhill Exp $ +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/genmake2,v 1.160 2007/01/31 21:28:10 ce107 Exp $ # # Makefile generator for MITgcm UV codes # created by cnh 03/98 @@ -325,7 +325,7 @@ #================================================================ # look for possible C compilers - tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc" + tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc" p_CC= for c in $tmp ; do rm -f ./genmake_hello.c ./genmake_hello @@ -364,7 +364,7 @@ #================================================================ # look for possible FORTRAN compilers - tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95 gfortran" + tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 gfortran g95" p_FC= for c in $tmp ; do rm -f ./hello.f ./hello @@ -587,16 +587,22 @@ -ts | --ts Produce timing information per timestep -papis | --papis - Produce summary MFlop/s with PAPI per timestep + 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 @@ -763,6 +769,9 @@ check_HAVE_SIGREG() { + if test ! "x$HAVE_SIGREG" = x ; then + return + fi get_fortran_c_namemangling cat < genmake_tc_1.c $FC_NAMEMANGLE @@ -820,6 +829,13 @@ check_HAVE_SETRLSTK() { + if test "x$HAVE_SETRLSTK" = xt ; then + DEFINES="$DEFINES -DHAVE_SETRLSTK" + return + fi + if test ! "x$HAVE_SETRLSTK" = x ; then + return + fi get_fortran_c_namemangling cat < genmake_tc_1.c $FC_NAMEMANGLE @@ -930,9 +946,9 @@ cat genmake_tnc.F >> genmake_tnc.log echo "=== genmake_tnc.F ===" >> genmake_tnc.log RET_CPP=f - COMM="$CPP $DEFINES $INCLUDES genmake_tnc.F" + COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES" echo "$COMM" >> genmake_tnc.log - $COMM > genmake_tnc.$FS 2>/dev/null && RET_CPP=t + eval $COMM > genmake_tnc.$FS 2>/dev/null && RET_CPP=t if test "x$RET_CPP" = xf ; then echo " WARNING: CPP failed to pre-process the netcdf test." \ >> genmake_tnc.log @@ -940,9 +956,9 @@ >> genmake_tnc.log fi echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log - echo " && $LINK -o genmake_tnc.o $LIBS" >> genmake_tnc.log + echo " && $LINK $FFLAGS $FOPTIM -o genmake_tnc.o $LIBS" >> genmake_tnc.log $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \ - && $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1 + && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1 RET_COMPILE=$? cat genmake_tnc.log >> genmake_warnings @@ -958,17 +974,32 @@ else # try again with "-lnetcdf" added to the libs echo "try again with added '-lnetcdf'" > genmake_tnc.log - echo "$CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS \ " >> genmake_tnc.log + echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log echo " && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log - echo " && $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log - $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null \ + echo " && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log + cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null \ && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \ - && $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1 + && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1 RET_COMPILE=$? cat genmake_tnc.log >> genmake_warnings if test "x$RET_COMPILE" = x0 ; then LIBS="$LIBS -lnetcdf" HAVE_NETCDF=t + else + # try again with "-lnetcdff" added to the libs + echo "try again with added '-lnetcdff -lnetcdf'" > genmake_tnc.log + echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log + echo " && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log + echo " && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log + cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null \ + && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \ + && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdff -lnetcdf >> genmake_tnc.log 2>&1 + RET_COMPILE=$? + cat genmake_tnc.log >> genmake_warnings + if test "x$RET_COMPILE" = x0 ; then + LIBS="$LIBS -lnetcdff -lnetcdf" + HAVE_NETCDF=t + fi fi fi rm -f genmake_tnc* @@ -1016,10 +1047,13 @@ MPIPATH= TS= PAPIS= +PCLS= FOOLAD= PAPI= +PCL= HPMT= GSL= +DEVEL= HAVE_TEST_L= # DEFINES checked by test compilation or command-line @@ -1027,7 +1061,7 @@ HAVE_FDATE= FC_NAMEMANGLE= HAVE_CLOC= -HAVE_SETRLSTK= +# HAVE_SETRLSTK= HAVE_STAT= HAVE_NETCDF= HAVE_ETIME= @@ -1078,7 +1112,7 @@ # The following state can be set directly by command-line switches gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE" -gm_s2="FC CPP IEEE TS PAPIS PAPI HPMT GSL MPI JAM DUMPSTATE STANDARDDIRS" +gm_s2="FC CPP IEEE TS PAPIS PCLS PAPI PCL HPMT GSL DEVEL MPI JAM DUMPSTATE STANDARDDIRS" # The following state is not directly set by command-line switches gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM " @@ -1262,16 +1296,23 @@ TS=true ;; -papis | --papis) PAPIS=true ;; + -pcls | --pcls) + PCLS=true ;; -foolad | --foolad) FOOLAD=true ;; -papi | --papi) PAPI=true ;; + -pcl | --pcl) + PCL=true ;; -hpmt | --hpmt) HPMT=true ;; -gsl | --gsl) GSL=true ;; + -devel | --devel) + DEVEL=true ;; + -mpi | --mpi) MPI=true ;; -mpi=* | --mpi=*) @@ -1332,7 +1373,7 @@ # Find the MITgcm ${ROOTDIR} if test "x${ROOTDIR}" = x ; then tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'` - if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then + if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesupp -a -d ../pkg ; then ROOTDIR=".." else for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do @@ -1534,6 +1575,17 @@ INCLUDES="$INCLUDES $PAPIINC" LIBS="$LIBS $PAPILIB" fi +if test ! "x$PCLS" = x ; then + echo " Turning on PCL counter summary per timestep" + echo " Please make sure PCLINC, PCLLIB are defined" + if test ! "x$FOOLAD" = x ; then + DEFINES="$DEFINES -DUSE_PCL_FLOPS_SFP" + else + DEFINES="$DEFINES -DUSE_PCL_FLOPS" + fi + INCLUDES="$INCLUDES $PCLINC" + LIBS="$LIBS $PCLLIB" +fi if test ! "x$PAPI" = x ; then if test ! "x$PAPIS" = x ; then echo " PAPI performance analysis and flop summary per timestep cannot co-exist!" @@ -1546,10 +1598,25 @@ LIBS="$LIBS $PAPILIB" fi fi +if test ! "x$PCL" = x ; then + if test ! "x$PCLS" = x ; then + echo " PCL performance analysis and flop summary per timestep cannot co-exist!" + echo " Sticking with PCL flop summary per timestep!" + else + echo " Turning on performance analysis with PCL" + echo " Please make sure PCLINC, PCLLIB are defined" + DEFINES="$DEFINES -DUSE_PCL" + INCLUDES="$INCLUDES $PCLINC" + LIBS="$LIBS $PCLLIB" + fi +fi if test ! "x$HPMT" = x ; then if test ! "x$PAPI" = x ; then echo " PAPI and the HPM Toolkit cannot co-exist!" echo " Sticking with PAPI!" + else if test ! "x$PCL" = x ; then + echo " PCL and the HPM Toolkit cannot co-exist!" + echo " Sticking with PCL!" else echo " Turning on performance analysis with the HPM Toolkit" echo " Please make sure HPMTINC, HPMTLIB are defined" @@ -1557,6 +1624,7 @@ INCLUDES="$INCLUDES $HPMTINC" LIBS="$LIBS $HPMTLIB" fi + fi fi if test ! "x$GSL" = x ; then echo " Turning on use of GSL to control floating point calculations" @@ -1644,7 +1712,7 @@ printf " Can we unlimit the stack size using $FC... " check_HAVE_SETRLSTK -if test "x$HAVE_SETRLSTK" != x ; then +if test "x$HAVE_SETRLSTK" = xt ; then echo "yes" else echo "no" @@ -1653,7 +1721,7 @@ printf " Can we register a signal handler using $FC... " check_HAVE_SIGREG -if test "x$HAVE_SIGREG" != x ; then +if test "x$HAVE_SIGREG" = xt ; then echo "yes" else echo "no" @@ -1771,19 +1839,21 @@ fi fi -#same for exch2 -if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then - echo " Making source files in exch2 from templates" - ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1 - RETVAL=$? - if test "x${RETVAL}" = x0 ; then - rm -f make_exch2.errors - else - echo "Error: problem encountered while building source files in exch2:" - cat make_exch2.errors 1>&2 - exit 1 +#same for pkg/exch2 and pkg/regrid +for pdir in exch2 regrid ; do + if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then + echo " Making source files in pkg/${pdir} from templates" + ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE ) > make_${pdir}.errors 2>&1 + RETVAL=$? + if test "x${RETVAL}" = x0 ; then + rm -f make_${pdir}.errors + else + echo "Error: problem encountered while building source files in pkg/${pdir}:" + cat make_${pdir}.errors 1>&2 + exit 1 + fi fi -fi +done printf "\n=== Determining package settings ===\n" if test "x${PDEPEND}" = x ; then @@ -2158,7 +2228,7 @@ perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h else echo " We cannot create a copy of mpif.h!" - exit -1 +# exit -1 fi fi @@ -2409,6 +2479,7 @@ libmitgcmuv.a: \$(OBJFILES) ar rcv libmitgcmuv.a \$(OBJFILES) + ar d libmitgcmuv.a main.o links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES) @@ -2419,7 +2490,9 @@ @\$(EXECUTABLE) > \$@ clean: - -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template + -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template + -rm -rf *.o + -rm -rf *.$FS Clean: @make clean @make cleanlinks @@ -2430,7 +2503,7 @@ -find \$(EXEDIR) -name "*.meta" -exec rm {} \; -find \$(EXEDIR) -name "*.data" -exec rm {} \; -find \$(EXEDIR) -name "fort.*" -exec rm {} \; - -rm -f \$(EXECUTABLE) *.txt STD* *diagnostics.log datetime + -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime -rm -rf mnc_test_* #eh3 Makefile: makefile @@ -2489,9 +2562,7 @@ \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ .$FS.o: \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$< -.F90.$FS90: - \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ -.$FS90.o: +.F90.o: \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$< .c.o: \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$< @@ -2518,10 +2589,10 @@ ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS" for i in $ad_vars ; do name=$i - t1="t2=\$"`echo $i` + t1="t2=\$"`echo "$i"` eval $t1 printf "%-20s = " $name >> $MAKEFILE - echo $t2 >> $MAKEFILE + echo "$t2" | sed -e 's| \+| |g' >> $MAKEFILE done echo " Add the source list for AD code generation" @@ -2538,7 +2609,7 @@ cat >>$MAKEFILE < ad_taf_output.$FS -ad_taf: ad_taf_output.o \$(OBJFILES) - \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS) +\${EXE_AD}: ad_taf_output.o \$(OBJFILES) + \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS) ad_tamc_output.$FS: ad_input_code.$FS \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS