--- MITgcm/tools/genmake2 2007/05/25 14:56:36 1.163 +++ MITgcm/tools/genmake2 2008/07/20 18:01:05 1.173 @@ -1,6 +1,6 @@ #! /usr/bin/env bash # -# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/genmake2,v 1.163 2007/05/25 14:56:36 mlosch Exp $ +# $Header: /home/ubuntu/mnt/e9_copy/MITgcm/tools/genmake2,v 1.173 2008/07/20 18:01:05 jmc Exp $ # # Makefile generator for MITgcm UV codes # created by cnh 03/98 @@ -746,7 +746,9 @@ *curtim = *curtim/1.E6; } EOF - make genmake_tc_1.o >> genmake_warnings 2>&1 + COMM="$CC $CFLAGS -c genmake_tc_1.c" + echo $COMM >> genmake_warnings + $COMM >> genmake_warnings 2>&1 RET_C=$? cat < genmake_tc_2.$FS program hello @@ -805,7 +807,9 @@ return; } EOF - make genmake_tc_1.o >> genmake_warnings 2>&1 + COMM="$CC $CFLAGS -c genmake_tc_1.c" + echo $COMM >> genmake_warnings + $COMM >> genmake_warnings 2>&1 RET_C=$? cat < genmake_tc_2.$FS program hello @@ -853,7 +857,9 @@ return; } EOF - make genmake_tc_1.o >> genmake_warnings 2>&1 + COMM="$CC $CFLAGS -c genmake_tc_1.c" + echo $COMM >> genmake_warnings + $COMM >> genmake_warnings 2>&1 RET_C=$? cat < genmake_tc_2.$FS program hello @@ -897,7 +903,9 @@ *nbyte = -1; } EOF - make genmake_tc_1.o >> genmake_tc.log 2>&1 + COMM="$CC $CFLAGS -c genmake_tc_1.c" + echo $COMM >> genmake_warnings + $COMM >> genmake_tc.log 2>&1 RET_C=$? cat < genmake_tc_2.$FS program hello @@ -1037,6 +1045,7 @@ INCLUDES="-I. $INCLUDES" FFLAGS= FOPTIM= +FEXTRAFLAGS= CFLAGS= KFLAGS1= KFLAGS2= @@ -1117,7 +1126,7 @@ 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 " +gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM FEXTRAFLAGS" gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS" gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE" gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF" @@ -1144,12 +1153,6 @@ echo "=== Processing options files and arguments ===" gm_local="genmake_local" -for i in . $MODS ; do - if test -r $i/$gm_local ; then - . $i/$gm_local - break - fi -done printf " getting local config information: " if test -f $gm_local ; then echo "using $gm_local" @@ -1564,6 +1567,7 @@ else DEFINES="$DEFINES -DTIME_PER_TIMESTEP" fi + PACKAGES="$PACKAGES showflops" fi if test ! "x$PAPIS" = x ; then echo " Turning on PAPI flop summary per timestep" @@ -1575,6 +1579,7 @@ fi INCLUDES="$INCLUDES $PAPIINC" LIBS="$LIBS $PAPILIB" + PACKAGES="$PACKAGES showflops" fi if test ! "x$PCLS" = x ; then echo " Turning on PCL counter summary per timestep" @@ -1586,6 +1591,7 @@ fi INCLUDES="$INCLUDES $PCLINC" LIBS="$LIBS $PCLLIB" + PACKAGES="$PACKAGES showflops" fi if test ! "x$PAPI" = x ; then if test ! "x$PAPIS" = x ; then @@ -2355,7 +2361,10 @@ echo "" >> srclinks.tmp echo "# These files are linked from $d" >> srclinks.tmp echo "$deplist :" >> srclinks.tmp - printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp +# We need to make sure that the link isn't already there. +# This may happen when make thinks that a header file has to be "remade" +# because a module it depends on has changed. In this case we do nothing. + printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $d >> srclinks.tmp fi done rm -rf .links.tmp @@ -2458,7 +2467,7 @@ KFLAGS1 = ${KFLAGS1} KFLAGS2 = ${KFLAGS2} # Optim./debug for FC -FFLAGS = ${FFLAGS} +FFLAGS = ${FFLAGS} ${FEXTRAFLAGS} FOPTIM = ${FOPTIM} # Optim./debug for FC F90FLAGS = ${F90FLAGS} @@ -2484,9 +2493,10 @@ echo 'F77FILES = $(SRCFILES:.F=.'$FS')' >> $MAKEFILE echo 'F90FILES = $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE echo 'OBJFILES = $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE +echo 'FLOFILES = $(AD_FLOW_FILES:.flow=.flowdir)' >> $MAKEFILE echo >> $MAKEFILE echo '.SUFFIXES:' >> $MAKEFILE -echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE +echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90 .flowdir .flow' >> $MAKEFILE rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc rm -f ad_flow_files.inc @@ -2519,18 +2529,20 @@ clean: -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template -rm -rf *.o - -rm -rf *.$FS + -rm -rf *.$FS *.flowdir Clean: @make clean @make cleanlinks -rm -f \$(SPECIAL_FILES) - -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak + -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log f90mkdepend.log *.bak + -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log CLEAN: @make Clean -find \$(EXEDIR) -name "*.meta" -exec rm {} \; -find \$(EXEDIR) -name "*.data" -exec rm {} \; -find \$(EXEDIR) -name "fort.*" -exec rm {} \; -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime + -rm -f *_MIT_CE_000.opt0000 costfunction*0000 -rm -rf mnc_test_* #eh3 Makefile: makefile @@ -2589,10 +2601,14 @@ \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ .$FS.o: \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$< +.F.o: + \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$< .F90.o: \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$< .c.o: \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$< +.flow.flowdir: + \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain .F.p: @@ -2645,15 +2661,17 @@ cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h -rm -f ad_config.template @make \$(F77FILES) - @make \$(AD_FLOW_FILES) - cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS + @make \$(FLOFILES) + cat \$(FLOFILES) \$(AD_FILES) > ad_input_code.$FS ad_taf_output.$FS: ad_input_code.$FS \$(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: \$(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 \${EXE_AD}: ad_taf_output.o \$(OBJFILES) @@ -2687,10 +2705,12 @@ ftl_taf_output.$FS: ftl_input_code.$FS \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS + ls -l ftl_input_code_ftl.$FS cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS ftltafonly: \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS + ls -l ftl_input_code_ftl.$FS cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS ftl_taf: ftl_taf_output.o \$(OBJFILES)