--- MITgcm/tools/genmake2 2014/08/10 16:46:04 1.268 +++ MITgcm/tools/genmake2 2016/01/15 22:08:17 1.278 @@ -1,6 +1,6 @@ #! /usr/bin/env bash # -# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/genmake2,v 1.268 2014/08/10 16:46:04 jmc Exp $ +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/genmake2,v 1.278 2016/01/15 22:08:17 jmc Exp $ # $Name: $ # # Makefile generator for MITgcm UV codes @@ -22,14 +22,17 @@ -oad | --oad Generate a Makefile for an OpenAD built + -nocat4ad | -dog4ad | -ncad | -dad + do not concatenate (cat) source code sent to TAF + resulting in compilation of multiple files + -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_oad" (for OpenAD built) or "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 -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 @@ -1329,6 +1332,7 @@ AUTODIFF_PKG_USED=f OPENAD= AD_OPTFILE= +CAT_SRC_FOR_TAF=1 TAF= AD_TAF_FLAGS= FTL_TAF_FLAGS= @@ -1403,8 +1407,6 @@ -help | --help | -h | --h) usage ;; - -nooptfile | --nooptfile) - OPTFILE="NONE" ;; -optfile | --optfile | -of | --of) ac_prev=OPTFILE ;; -optfile=* | --optfile=* | -of=* | --of=*) @@ -1412,6 +1414,8 @@ -oad | --oad) OPENAD="true" ; ALWAYS_USE_F90=1 ;; + -nocat4ad | -dog4ad | -ncad | -dad) + CAT_SRC_FOR_TAF=0 ;; -adoptfile | --adoptfile | -adof | --adof) ac_prev=AD_OPTFILE ;; -adoptfile=* | --adoptfile=* | -adof=* | --adof=*) @@ -1583,7 +1587,7 @@ #TMP=./genmk_$$ #- try to put temporary files in system-local /tmp dir -TMP=/tmp/genmk_$$ +TMP=/tmp/genmk_${USER}_$$ touch $TMP ; retVal=$? if [ $retVal -eq 0 ] ; then if test ! -r $TMP ; then TMP=./genmk_$$ ; fi @@ -1957,26 +1961,56 @@ fi rm -f genmake_tcomp* -printf " Do we have the etime() command using $FC... " -cat > genmake_tcomp.$FS < genmake_tcomp_1.$FS < genmake_tcomp.log 2>&1 +$FC $FFLAGS -o genmake_tcomp_1 genmake_tcomp_1.$FS > genmake_tcomp.log 2>&1 RETVAL=$? if test "x$RETVAL" = x0 ; then - HAVE_ETIME=t - DEFINES="$DEFINES -DHAVE_ETIME" - echo "yes" + HAVE_ETIME='Fct' + DEFINES="$DEFINES -DHAVE_ETIME_FCT" + echo " yes (${HAVE_ETIME})" else + cat > genmake_tcomp_2.$FS <> genmake_tcomp.log 2>&1 + RETVAL=$? + if test "x$RETVAL" = x0 ; then + echo -n 'c,' + ./genmake_tcomp_2 > genmake_tcomp_2.out 2>&1 + RETVAL=$? + fi + if test "x$RETVAL" = x0 ; then + echo -n 'r:' + RETVAL=`cat genmake_tcomp_2.out | $AWK '{print $1}'` + fi + if test "x$RETVAL" = x0 ; then + HAVE_ETIME='SbR' + DEFINES="$DEFINES -DHAVE_ETIME_SBR" + echo " yes (${HAVE_ETIME})" + else HAVE_ETIME= - echo "no" + echo " no" + fi fi +#mkdir chk_etime ; cp -p -f genmake_tcomp* chk_etime rm -f genmake_tcomp* printf " Can we call simple C routines (here, \"cloc()\") using $FC... " @@ -2894,8 +2928,8 @@ KFLAGS1 = ${KFLAGS1} KFLAGS2 = ${KFLAGS2} # Optim./debug for FC -FFLAGS = ${FFLAGS} ${FEXTRAFLAGS} -FOPTIM = ${FOPTIM} +FFLAGS = ${FFLAGS} +FOPTIM = ${FOPTIM} ${FEXTRAFLAGS} # Optim./debug for FC F90FLAGS = ${F90FLAGS} F90OPTIM = ${F90OPTIM} @@ -3122,6 +3156,24 @@ echo >> $MAKEFILE rm -f $TMP.adSrcFiles +if test $CAT_SRC_FOR_TAF = 0 ; then +cat >>$MAKEFILE <>$MAKEFILE < ad_input_code.$FS -ad_taf_output.$FS: ad_input_code.$FS - @-rm -f ad_input_code_ad.$FS ; echo '' +adtafonly: \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS ls -l ad_input_code_ad.$FS cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS -adtafonly: +EOF + +if test $CAT_SRC_FOR_TAF = 1 ; then +cat >>$MAKEFILE < ad_taf_output.$FS @@ -3158,20 +3215,48 @@ \$(EXE_AD): \$(SPECIAL_FILES) \$(H_SRC_FILES) ad_taf_output.o \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES) \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) ad_taf_output.o \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) \$(LIBS) -ad_tamc_output.$FS: ad_input_code.$FS - \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS - cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS +adobj: ad_taf_output.o \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) -ad_tamc: ad_tamc_output.o \$(OBJFILES) - \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS) +EOF + +else +cat >>$MAKEFILE < ad_config.template + cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h + @-rm -f ad_config.template + @\$(MAKE) -f \$(MAKEFILE) \$(F77_PP_SRC_FILES) + @\$(MAKE) -f \$(MAKEFILE) \$(FLOWFILES) + @-rm -f \$(AD_FILES:.$FS=_ad.$FS) \$(AD_FILES:.$FS=_ad.o); echo '' + \$(MAKE) -f \$(MAKEFILE) remove_comments + \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) \$(FLOWFILES) \$(AD_FILES) + \$(MAKE) -f \$(MAKEFILE) adj_sed + cat \$(AD_FILES:.$FS=_ad.$FS) > ad_taf_output.$FS + +\$(EXE_AD): \$(SPECIAL_FILES) \$(H_SRC_FILES) ad_taf_output.$FS \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES) + \$(MAKE) -f \$(MAKEFILE) adobjfiles + \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(AD_FILES:.$FS=_ad.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) \$(LIBS) + +adobj: ad_taf_output.$FS \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) + \$(MAKE) -f \$(MAKEFILE) adobjfiles +EOF +fi + +cat >>$MAKEFILE < ad_tamc_output.$FS + +ad_tamc: ad_tamc_output.o \$(OBJFILES) + \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS) # ... FTL ... ftlall: ftl_exe_target @@ -3193,13 +3278,18 @@ @\$(MAKE) -f \$(MAKEFILE) \$(AD_FLOW_FILES) cat \$(AD_FLOW_FILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ftl_input_code.$FS -ftl_taf_output.$FS: ftl_input_code.$FS - @-rm -f ftl_input_code_tl.$FS ; echo '' +ftltafonly: \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS ls -l ftl_input_code_tl.$FS cat ftl_input_code_tl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS -ftltafonly: +EOF + +if test $CAT_SRC_FOR_TAF = 1 ; then +cat >>$MAKEFILE < ftl_taf_output.$FS @@ -3207,6 +3297,31 @@ \$(EXE_FTL): \$(SPECIAL_FILES) \$(H_SRC_FILES) ftl_taf_output.o \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES) \$(LINK) -o \${EXE_FTL} \$(FFLAGS) \$(FOPTIM) ftl_taf_output.o \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) \$(LIBS) +EOF + +else +cat >>$MAKEFILE < ad_config.template + cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h + @-rm -f ad_config.template + @\$(MAKE) -f \$(MAKEFILE) \$(F77_PP_SRC_FILES) + @\$(MAKE) -f \$(MAKEFILE) \$(AD_FLOW_FILES) + @-rm -f \$(AD_FILES:.$FS=_tl.$FS) \$(AD_FILES:.$FS=_tl.o); echo '' + \$(MAKE) -f \$(MAKEFILE) remove_comments + \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) \$(AD_FLOW_FILES) \$(AD_FILES) + \$(MAKE) -f \$(MAKEFILE) ftl_sed + cat \$(AD_FILES:.$FS=_tl.$FS) > ftl_taf_output.$FS + +\$(EXE_FTL): \$(SPECIAL_FILES) \$(H_SRC_FILES) ftl_taf_output.$FS \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES) + \$(MAKE) -f \$(MAKEFILE) ftlobjfiles + \$(LINK) -o \${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(AD_FILES:.$FS=_tl.o) \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) \$(LIBS) + +EOF +fi + +cat >>$MAKEFILE < ftl_tamc_output.$FS @@ -3329,6 +3444,7 @@ OAD_cp.F90 \ OAD_rev.F90 \ OAD_tape.F90 \ +OAD_regular_cp.F90 \ revolve.F90 OPENAD_SUPPORT_C_SRC_FILES = \