Parent Directory
|
Revision Log
|
Revision Graph
|
Patch
revision 1.165 by mlosch, Mon Oct 8 07:33:28 2007 UTC | revision 1.228 by jmc, Tue Jan 17 22:55:39 2012 UTC | |
---|---|---|
# | Line 1 | Line 1 |
1 | #! /usr/bin/env bash | #! /usr/bin/env bash |
2 | # | # |
3 | # $Header$ | # $Header$ |
4 | # $Name$ | |
5 | # | # |
6 | # Makefile generator for MITgcm UV codes | # Makefile generator for MITgcm UV codes |
7 | # created by cnh 03/98 | # created by cnh 03/98 |
# | Line 8 | Line 9 |
9 | # modified by aja 01/00 | # modified by aja 01/00 |
10 | # rewritten in bash by eh3 08/03 | # rewritten in bash by eh3 08/03 |
11 | ||
12 | # Explain usage | |
13 | usage() { | |
14 | cat <<EOF | |
15 | ||
16 | Usage: "$0" [OPTIONS] | |
17 | where [OPTIONS] can be: | |
18 | ||
19 | -help | --help | -h | --h | |
20 | Print this help message and exit. | |
21 | ||
22 | -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME | |
23 | -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME | |
24 | Use "NAME" as the adoptfile. By default, the file at | |
25 | "tools/adjoint_options/adjoint_default" will be used. | |
26 | ||
27 | -nooptfile | --nooptfile | |
28 | -optfile NAME | --optfile NAME | -of NAME | --of NAME | |
29 | -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME | |
30 | Use "NAME" as the optfile. By default, an attempt will be | |
31 | made to find an appropriate "standard" optfile in the | |
32 | tools/build_options/ directory. | |
33 | ||
34 | -pdepend NAME | --pdepend NAME | |
35 | -pdepend=NAME | --pdepend=NAME | |
36 | Get package dependency information from "NAME". | |
37 | ||
38 | -pgroups NAME | --pgroups NAME | |
39 | -pgroups=NAME | --pgroups=NAME | |
40 | Get the package groups information from "NAME". | |
41 | ||
42 | -bash NAME | |
43 | Explicitly specify the Bourne or BASH shell to use | |
44 | ||
45 | -make NAME | -m NAME | |
46 | --make=NAME | -m=NAME | |
47 | Use "NAME" for the MAKE program. The default is "make" but | |
48 | many platforms, "gmake" is the preferred choice. | |
49 | ||
50 | -makefile NAME | -mf NAME | |
51 | --makefile=NAME | -mf=NAME | |
52 | Call the makefile "NAME". The default is "Makefile". | |
53 | ||
54 | -makedepend NAME | -md NAME | |
55 | --makedepend=NAME | -md=NAME | |
56 | Use "NAME" for the MAKEDEPEND program. | |
57 | ||
58 | -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME | |
59 | -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME | |
60 | Specify the location of the MITgcm ROOTDIR as "NAME". | |
61 | By default, genamke will try to find the location by | |
62 | looking in parent directories (up to the 5th parent). | |
63 | ||
64 | -mods NAME | --mods NAME | -mo NAME | --mo NAME | |
65 | -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME | |
66 | Here, "NAME" specifies a list of directories that are | |
67 | used for additional source code. Files found in the | |
68 | "mods list" are given preference over files of the same | |
69 | name found elsewhere. | |
70 | ||
71 | -disable NAME | --disable NAME | |
72 | -disable=NAME | --disable=NAME | |
73 | Here "NAME" specifies a list of packages that we don't | |
74 | want to use. If this violates package dependencies, | |
75 | genamke will exit with an error message. | |
76 | ||
77 | -enable NAME | --enable NAME | |
78 | -enable=NAME | --enable=NAME | |
79 | Here "NAME" specifies a list of packages that we wish | |
80 | to specifically enable. If this violates package | |
81 | dependencies, genamke will exit with an error message. | |
82 | ||
83 | -standarddirs NAME | --standarddirs NAME | |
84 | -standarddirs=NAME | --standarddirs=NAME | |
85 | Here, "NAME" specifies a list of directories to be | |
86 | used as the "standard" code. | |
87 | ||
88 | -fortran NAME | --fortran NAME | -fc NAME | --fc NAME | |
89 | -fc=NAME | --fc=NAME | |
90 | Use "NAME" as the fortran compiler. By default, genmake | |
91 | will search for a working compiler by trying a list of | |
92 | "usual suspects" such as g77, f77, etc. | |
93 | ||
94 | -cc NAME | --cc NAME | -cc=NAME | --cc=NAME | |
95 | Use "NAME" as the C compiler. By default, genmake | |
96 | will search for a working compiler by trying a list of | |
97 | "usual suspects" such as gcc, c89, cc, etc. | |
98 | ||
99 | -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 | |
100 | Use "real*4" type for _RS variable (#undef REAL4_IS_SLOW) | |
101 | *only* works if CPP_EEOPTIONS.h allows this. | |
102 | ||
103 | -ignoretime | -ignore_time | --ignoretime | --ignore_time | |
104 | Ignore all the "wall clock" routines entirely. This will | |
105 | not in any way hurt the model results -- it simply means | |
106 | that the code that checks how long the model spends in | |
107 | various routines will give junk values. | |
108 | ||
109 | -ts | --ts | |
110 | Produce timing information per timestep | |
111 | -papis | --papis | |
112 | Produce summary MFlop/s (and IPC) with PAPI per timestep | |
113 | -pcls | --pcls | |
114 | Produce summary MFlop/s etc. with PCL per timestep | |
115 | -foolad | --foolad | |
116 | Fool the AD code generator | |
117 | -papi | --papi | |
118 | Performance analysis with PAPI | |
119 | -pcl | --pcl | |
120 | Performance analysis with PCL | |
121 | -hpmt | --hpmt | |
122 | Performance analysis with the HPM Toolkit | |
123 | ||
124 | -ieee | --ieee | |
125 | use IEEE numerics. Note that this option *only* works | |
126 | if it is supported by the OPTFILE that is being used. | |
127 | -devel | --devel | |
128 | Add additional warning and debugging flags for development | |
129 | (if supported by the OPTFILE); also switch to IEEE numerics. | |
130 | -gsl | --gsl | |
131 | Use GSL to control floating point rounding and precision | |
132 | ||
133 | -mpi | --mpi | |
134 | Include MPI header files and link to MPI libraries | |
135 | -mpi=PATH | --mpi=PATH | |
136 | Include MPI header files and link to MPI libraries using MPI_ROOT | |
137 | set to PATH. i.e. Include files from \$PATH/include, link to libraries | |
138 | from \$PATH/lib and use binaries from \$PATH/bin. | |
139 | ||
140 | -omp | --omp | |
141 | Activate OpenMP code + use Compiler option OMPFLAG | |
142 | -omp=OMPFLAG | --omp=OMPFLAG | |
143 | Activate OpenMP code + use Compiler option OMPFLAG | |
144 | ||
145 | -es | --es | -embed-source | --embed-source | |
146 | Embed a tarball containing the full source code | |
147 | (including the Makefile, etc.) used to build the | |
148 | executable [off by default] | |
149 | ||
150 | -ds | --ds | |
151 | Report genmake internal variables status (DUMPSTATE) | |
152 | to file "genmake_state" (for debug purpose) | |
153 | ||
154 | While it is most often a single word, the "NAME" variables specified | |
155 | above can in many cases be a space-delimited string such as: | |
156 | ||
157 | --enable pkg1 --enable 'pkg1 pkg2' --enable 'pkg1 pkg2 pkg3' | |
158 | -mods=dir1 -mods='dir1' -mods='dir1 dir2 dir3' | |
159 | -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32' | |
160 | ||
161 | which, depending upon your shell, may need to be single-quoted. | |
162 | ||
163 | For more detailed genmake documentation, please see: | |
164 | ||
165 | http://mitgcm.org/public/devel_HOWTO/ | |
166 | ||
167 | EOF | |
168 | ||
169 | exit 1 | |
170 | } | |
171 | ||
172 | # Search for particular CPP #cmds associated with packages | # Search for particular CPP #cmds associated with packages |
173 | # usage: test_for_package_in_cpp_options CPP_file package_name | # usage: test_for_package_in_cpp_options CPP_file package_name |
174 | test_for_package_in_cpp_options() { | test_for_package_in_cpp_options() { |
# | Line 56 test_for_string_in_file() { | Line 217 test_for_string_in_file() { |
217 | # the package list. | # the package list. |
218 | expand_pkg_groups() { | expand_pkg_groups() { |
219 | new_packages= | new_packages= |
PKG_GROUPS=$ROOTDIR"/pkg/pkg_groups" | ||
220 | if test -r $PKG_GROUPS ; then | if test -r $PKG_GROUPS ; then |
221 | cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > ./p1.tmp | cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > ./p1.tmp |
222 | cat ./p1.tmp | $AWK '(NF>2 && $2==":"){ print $0 }' > ./p2.tmp | cat ./p1.tmp | $AWK '(NF>2 && $2==":"){ print $0 }' > ./p2.tmp |
# | Line 67 expand_pkg_groups() { | Line 227 expand_pkg_groups() { |
227 | if test "x$RETVAL" = x0 ; then | if test "x$RETVAL" = x0 ; then |
228 | matched=1 | matched=1 |
229 | replace=`echo $line | $AWK '{ $1=""; $2=""; print $0 }'` | replace=`echo $line | $AWK '{ $1=""; $2=""; print $0 }'` |
230 | echo " replacing \"$i\" with: $replace" | echo " replacing \"$i\" with:$replace" |
231 | new_packages="$new_packages $replace" | new_packages="$new_packages $replace" |
232 | else | else |
233 | new_packages="$new_packages $i" | new_packages="$new_packages $i" |
# | Line 110 EOF | Line 270 EOF |
270 | check_for_broken_Ff | check_for_broken_Ff |
271 | else | else |
272 | cat <<EOF 2>&1 | cat <<EOF 2>&1 |
273 | ERROR: Your file system cannot distinguish between *.F and *.f files | ERROR: Your file system cannot distinguish between *.F and *.f files |
274 | (fails the "cp" test) and this program cannot find a suitable | (fails the "cp" test) and this program cannot find a suitable |
275 | replacement extension. Please try a different build environment or | replacement extension. Please try a different build environment or |
276 | contact the <MITgcm-support@mitgcm.org> list for help. | contact the <MITgcm-support@mitgcm.org> list for help. |
277 | ||
278 | EOF | EOF |
# | Line 137 EOF | Line 297 EOF |
297 | .F.$tfs: | .F.$tfs: |
298 | $LN \$< \$@ | $LN \$< \$@ |
299 | EOF | EOF |
300 | $MAKE "genmake_hello."$tfs > /dev/null 2>&1 | $MAKE -f $MAKEFILE "genmake_hello."$tfs > /dev/null 2>&1 |
301 | RETVAL=$? | RETVAL=$? |
302 | if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then | if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then |
303 | if test "x$FS" = x ; then | if test "x$FS" = x ; then |
# | Line 146 EOF | Line 306 EOF |
306 | check_for_broken_Ff | check_for_broken_Ff |
307 | else | else |
308 | cat <<EOF 2>&1 | cat <<EOF 2>&1 |
309 | ERROR: Your file system cannot distinguish between *.F and *.f files | ERROR: Your file system cannot distinguish between *.F and *.f files |
310 | (fails the "make/ln" test) and this program cannot find a suitable | (fails the "make/ln" test) and this program cannot find a suitable |
311 | replacement extension. Please try a different build environment or | replacement extension. Please try a different build environment or |
312 | contact the <MITgcm-support@mitgcm.org> list for help. | contact the <MITgcm-support@mitgcm.org> list for help. |
313 | ||
314 | EOF | EOF |
# | Line 165 EOF | Line 325 EOF |
325 | return | return |
326 | } | } |
327 | ||
328 | look_for_makedepend() { | look_for_makedepend() { |
329 | ||
330 | # The "original" makedepend is part of the Imake system that is | # The "original" makedepend is part of the Imake system that is |
# | Line 186 look_for_makedepend() { | Line 345 look_for_makedepend() { |
345 | # 3) locally build and use the cyrus implementation | # 3) locally build and use the cyrus implementation |
346 | # 4) fall back to the buggy local xmakedpend script | # 4) fall back to the buggy local xmakedpend script |
347 | # | # |
348 | echo >> $LOGFILE | |
349 | echo "running: look_for_makedepend()" >> $LOGFILE | |
350 | if test "x${MAKEDEPEND}" != x ; then | |
351 | echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1 | |
352 | RETVAL=$? | |
353 | if test x"$RETVAL" = x0 ; then | |
354 | build_cyrus_makedepend | |
355 | RETVAL=$? | |
356 | if test "x$RETVAL" != x0 ; then | |
357 | echo "WARNING: unable to build cyrus-makedepend. Try 'makedepend'" | |
358 | MAKEDEPEND= | |
359 | fi | |
360 | else | |
361 | echo "${MAKEDEPEND}" | grep 'tools.xmakedepend' > /dev/null 2>&1 | |
362 | RETVAL=$? | |
363 | if test "x$RETVAL" = x0 ; then | |
364 | MAKEDEPEND='$(TOOLSDIR)/xmakedepend' | |
365 | fi | |
366 | echo " --> MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE | |
367 | fi | |
368 | fi | |
369 | if test "x${MAKEDEPEND}" = x ; then | if test "x${MAKEDEPEND}" = x ; then |
370 | which makedepend > /dev/null 2>&1 | which makedepend > /dev/null 2>&1 |
371 | RV0=$? | RV0=$? |
# | Line 194 look_for_makedepend() { | Line 374 look_for_makedepend() { |
374 | cat <<EOF >> $MAKEFILE | cat <<EOF >> $MAKEFILE |
375 | # THIS IS A TEST MAKEFILE GENERATED BY "genmake2" | # THIS IS A TEST MAKEFILE GENERATED BY "genmake2" |
376 | # | # |
377 | # Some "makedepend" implementations will die if they cannot | # Some "makedepend" implementations will die if they cannot |
378 | # find a Makefile -- so this file is here to gives them an | # find a Makefile -- so this file is here to gives them an |
379 | # empty one to find and parse. | # empty one to find and parse. |
380 | EOF | EOF |
381 | cat <<EOF >> genmake_tc.f | cat <<EOF >> genmake_tc.f |
# | Line 210 EOF | Line 390 EOF |
390 | test -f $MAKEFILE".tst" && mv -f $MAKEFILE".tst" $MAKEFILE | test -f $MAKEFILE".tst" && mv -f $MAKEFILE".tst" $MAKEFILE |
391 | if test "x${RV0}${RV1}" = x00 ; then | if test "x${RV0}${RV1}" = x00 ; then |
392 | MAKEDEPEND=makedepend | MAKEDEPEND=makedepend |
393 | echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE | |
394 | else | else |
395 | echo " a system-default makedepend was not found." | echo " system-default makedepend not found. Try to build cyrus-makedepend" |
396 | # Try to build the cyrus implementation | # Try to build the cyrus implementation |
397 | build_cyrus_makedepend | build_cyrus_makedepend |
398 | RETVAL=$? | RETVAL=$? |
399 | if test "x$RETVAL" != x0 ; then | if test "x$RETVAL" != x0 ; then |
400 | echo "WARNING: unable to build cyrus-makedepend. Use local xmakedepend" | |
401 | MAKEDEPEND='$(TOOLSDIR)/xmakedepend' | MAKEDEPEND='$(TOOLSDIR)/xmakedepend' |
402 | echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE | |
403 | fi | fi |
rm -f ./genmake_cy_md | ||
fi | ||
else | ||
# echo "MAKEDEPEND=${MAKEDEPEND}" | ||
echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1 | ||
RETVAL=$? | ||
if test x"$RETVAL" = x0 ; then | ||
build_cyrus_makedepend | ||
404 | fi | fi |
405 | fi | fi |
406 | } | } |
407 | ||
408 | build_cyrus_makedepend() { | build_cyrus_makedepend() { |
409 | echo >> $LOGFILE | |
410 | echo "running: build_cyrus_makedepend()" >> $LOGFILE | |
411 | rm -f ./genmake_cy_md | rm -f ./genmake_cy_md |
412 | ( | ( |
413 | cd $ROOTDIR/tools/cyrus-imapd-makedepend \ | cd $ROOTDIR/tools/cyrus-imapd-makedepend \ |
# | Line 249 build_cyrus_makedepend() { | Line 424 build_cyrus_makedepend() { |
424 | rm -f ./genmake_cy_md | rm -f ./genmake_cy_md |
425 | if test "x$RETVAL" = x0 ; then | if test "x$RETVAL" = x0 ; then |
426 | MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend' | MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend' |
427 | echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE | |
428 | return 0 | return 0 |
429 | else | else |
430 | echo "WARNING: unable to build cyrus-imapd-makedepend" | echo "WARNING: fail to build cyrus-imapd-makedepend" >> $LOGFILE |
431 | return 1 | return 1 |
432 | fi | fi |
433 | } | } |
434 | ||
435 | build_embed_encode() | build_embed_encode() |
436 | { | { |
437 | printf " building the embed-encode utility... " | printf " building the embed-encode utility... " |
# | Line 269 build_embed_encode() | Line 444 build_embed_encode() |
444 | return 1 | return 1 |
445 | fi | fi |
446 | clist="cc gcc c89 $CC" | clist="cc gcc c89 $CC" |
447 | for ic in $clist ; do | for ic in $clist ; do |
448 | comm="$ic -o encode_files encode_files.c" | comm="$ic -o encode_files encode_files.c" |
449 | ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1 | ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1 |
450 | RETVAL=$? | RETVAL=$? |
# | Line 290 build_embed_encode() | Line 465 build_embed_encode() |
465 | DEFINES="$DEFINES -DHAVE_EMBED_SRC" | DEFINES="$DEFINES -DHAVE_EMBED_SRC" |
466 | } | } |
467 | ||
468 | # look for possible C compilers | |
469 | # Guess possible config options for this host | look_for_C_compilers() { |
470 | find_possible_configs() { | echo >> $LOGFILE |
471 | echo "running: look_for_C_compilers()" >> $LOGFILE | |
472 | tmp1=`uname`"_"`uname -m` | rm -f ./genmake_hello.c ./genmake_hello |
473 | tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` | cat >> genmake_hello.c << EOF |
tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'` | ||
tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'` | ||
tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'` | ||
tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'` | ||
PLATFORM=$tmp3 | ||
echo $PLATFORM | grep cygwin > /dev/null 2>&1 && PLATFORM=cygwin_ia32 | ||
OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")` | ||
echo " The platform appears to be: $PLATFORM" | ||
echo "test" > test | ||
ln -s ./test link | ||
RETVAL=$? | ||
if test "x${RETVAL}" = x0 ; then | ||
LN="ln -s" | ||
else | ||
echo "Error: \"ln -s\" does not appear to work on this system!" | ||
echo " For help, please contact <MITgcm-support@mitgcm.org>." | ||
exit 1 | ||
fi | ||
rm -f test link | ||
if test "x$CPP" = x ; then | ||
CPP="cpp -traditional -P" | ||
fi | ||
look_for_makedepend | ||
#================================================================ | ||
# look for possible C compilers | ||
tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc" | ||
p_CC= | ||
for c in $tmp ; do | ||
rm -f ./genmake_hello.c ./genmake_hello | ||
cat >> genmake_hello.c << EOF | ||
474 | #include <stdio.h> | #include <stdio.h> |
475 | int main(int argc, char **argv) { | int main(int argc, char **argv) { |
476 | printf("Hello!\n"); | printf("Hello!\n"); |
477 | return 0; | return 0; |
478 | } | } |
479 | EOF | EOF |
480 | $c -o genmake_hello genmake_hello.c > /dev/null 2>&1 | tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc" |
481 | p_CC= | |
482 | for c in $tmp ; do | |
483 | COMM="$c $CFLAGS -o genmake_hello genmake_hello.c" | |
484 | echo $COMM >> $LOGFILE | |
485 | $COMM >> $LOGFILE 2>&1 | |
486 | RETVAL=$? | RETVAL=$? |
487 | if test "x${RETVAL}" = x0 ; then | if test "x${RETVAL}" = x0 ; then |
488 | echo " $c test successful" >> $LOGFILE | |
489 | p_CC="$p_CC $c" | p_CC="$p_CC $c" |
490 | fi | fi |
491 | done | done |
# | Line 354 Error: No C compilers were found in your | Line 501 Error: No C compilers were found in your |
501 | EOF | EOF |
502 | exit 1 | exit 1 |
503 | else | else |
504 | echo " The possible C compilers found in your path are:" | echo " The possible C compilers found in your path are: $p_CC" | tee -a $LOGFILE |
echo " "$p_CC | ||
505 | if test "x$CC" = x ; then | if test "x$CC" = x ; then |
506 | CC=`echo $p_CC | $AWK '{print $1}'` | CC=`echo $p_CC | $AWK '{print $1}'` |
507 | echo " Setting C compiler to: "$CC | echo " Setting C compiler to: "$CC |
508 | fi | fi |
509 | fi | fi |
510 | echo " --> set CC='$CC'" >> $LOGFILE | |
511 | } | |
512 | ||
513 | # Guess possible config options for this host | |
514 | find_possible_optfile() { | |
515 | ||
516 | echo >> $LOGFILE | |
517 | echo "running: find_possible_optfile()" >> $LOGFILE | |
518 | tmp1=`uname`"_"`uname -m` | |
519 | tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` | |
520 | tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'` | |
521 | tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'` | |
522 | tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'` | |
523 | tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'` | |
524 | PLATFORM=$tmp3 | |
525 | echo $PLATFORM | grep cygwin > /dev/null 2>&1 && PLATFORM=cygwin_ia32 | |
526 | OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")` | |
527 | echo " The platform appears to be: $PLATFORM" | tee -a $LOGFILE | |
528 | ||
529 | #================================================================ | #================================================================ |
530 | # look for possible FORTRAN compilers | # look for possible FORTRAN compilers |
531 | tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 gfortran g95" | echo " look for possible FORTRAN compilers" >> $LOGFILE |
532 | tmp="$MITGCM_FC $FC efc gfortran g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 g95" | |
533 | p_FC= | p_FC= |
534 | for c in $tmp ; do | rm -f ./genmake_hello.f |
535 | rm -f ./hello.f ./hello | cat >> genmake_hello.f <<EOF |
cat >> hello.f <<EOF | ||
536 | program hello | program hello |
537 | do i=1,3 | do i=1,3 |
538 | print *, 'hello world : ', i | print *, 'hello world : ', i |
539 | enddo | enddo |
540 | end | end |
541 | EOF | EOF |
542 | $c -o hello hello.f > /dev/null 2>&1 | for f in $tmp ; do |
543 | COMM="$f -o genmake_hello genmake_hello.f" | |
544 | echo $COMM >> $LOGFILE | |
545 | $COMM >> $LOGFILE 2>&1 | |
546 | RETVAL=$? | RETVAL=$? |
547 | if test "x${RETVAL}" = x0 ; then | if test "x${RETVAL}" = x0 ; then |
548 | p_FC="$p_FC $c" | echo " $f test successful" >> $LOGFILE |
549 | p_FC="$p_FC $f" | |
550 | fi | fi |
551 | done | done |
552 | rm -f ./hello.f ./hello | rm -f ./genmake_hello.f ./genmake_hello |
553 | if test "x${p_FC}" = x ; then | if test "x${p_FC}" = x ; then |
554 | cat 1>&2 <<EOF | cat 1>&2 <<EOF |
555 | ||
# | Line 394 Error: No Fortran compilers were found i | Line 562 Error: No Fortran compilers were found i |
562 | EOF | EOF |
563 | exit 1 | exit 1 |
564 | else | else |
565 | echo " The possible FORTRAN compilers found in your path are:" | echo " The possible FORTRAN compilers found in your path are: $p_FC" | tee -a $LOGFILE |
echo " "$p_FC | ||
566 | fi | fi |
567 | ||
568 | # Use the first of the compilers found in the current PATH | # Use the first of the compilers found in the current PATH |
# | Line 404 EOF | Line 571 EOF |
571 | for i in $p_FC ; do | for i in $p_FC ; do |
572 | OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i | OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i |
573 | if test -r $OPTFILE ; then | if test -r $OPTFILE ; then |
574 | echo " Setting OPTFILE to: "$OPTFILE | echo " Setting OPTFILE to: "$OPTFILE | tee -a $LOGFILE |
575 | break | break |
576 | fi | fi |
577 | done | done |
# | Line 416 EOF | Line 583 EOF |
583 | echo " I looked for the file "$OPTFILE" but did not find it" | echo " I looked for the file "$OPTFILE" but did not find it" |
584 | fi | fi |
585 | fi | fi |
586 | # echo " The options file: $p_OF" | |
# echo " appears to match so we'll use it." | ||
# for i in $p_FC ; do | ||
#p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i | ||
#if test -r $p_OF ; then | ||
# OPTFILE=$p_OF | ||
# echo " The options file: $p_OF" | ||
# echo " appears to match so we'll use it." | ||
# break | ||
#fi | ||
# done | ||
587 | if test "x$OPTFILE" = x ; then | if test "x$OPTFILE" = x ; then |
588 | cat 1>&2 <<EOF | cat 1>&2 <<EOF |
589 | ||
# | Line 442 Error: No options file was found in: $R | Line 599 Error: No options file was found in: $R |
599 | EOF | EOF |
600 | exit 1 | exit 1 |
601 | fi | fi |
602 | ||
603 | # # look for possible MPI libraries | # # look for possible MPI libraries |
604 | # mpi_libs= | # mpi_libs= |
605 | # mpi_fort=`which mpif77 2>/dev/null` | # mpi_fort=`which mpif77 2>/dev/null` |
# | Line 461 EOF | Line 618 EOF |
618 | # if test "x${RETVAL}" = x0 ; then | # if test "x${RETVAL}" = x0 ; then |
619 | # a=`cat out` | # a=`cat out` |
620 | # for i in $a ; do | # for i in $a ; do |
621 | # case $i in | # case $i in |
622 | # -*) | # -*) |
623 | # mpi_libs="$mpi_libs $i" ;; | # mpi_libs="$mpi_libs $i" ;; |
624 | # esac | # esac |
# | Line 471 EOF | Line 628 EOF |
628 | # fi | # fi |
629 | # rm -f test.f out | # rm -f test.f out |
630 | # fi | # fi |
631 | } | } |
632 | ||
633 | # Parse the package dependency information | # Parse the package dependency information |
# | Line 480 get_pdepend_list() { | Line 636 get_pdepend_list() { |
636 | # strip the comments and then convert the dependency file into | # strip the comments and then convert the dependency file into |
637 | # two arrays: PNAME, DNAME | # two arrays: PNAME, DNAME |
638 | cat $1 | sed -e 's/#.*$//g' \ | cat $1 | sed -e 's/#.*$//g' \ |
639 | | $AWK 'BEGIN{nn=0;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \ | | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \ |
640 | > ./.pd_tmp | > ./.pd_tmp |
641 | RETVAL=$? | |
642 | if test ! "x${RETVAL}" = x0 ; then | |
643 | echo "Error: unable to parse package dependencies -- please check PKG_DEPEND=\"$1\"" | |
644 | exit 1 | |
645 | fi | |
646 | . ./.pd_tmp | . ./.pd_tmp |
647 | rm -f ./.pd_tmp | rm -f ./.pd_tmp |
printf "PNAME = "${} | ||
} | ||
# Explain usage | ||
usage() { | ||
cat <<EOF | ||
Usage: "$0" [OPTIONS] | ||
where [OPTIONS] can be: | ||
-help | --help | -h | --h | ||
Print this help message and exit. | ||
-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_default" will be used. | ||
-nooptfile | --nooptfile | ||
-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 | ||
tools/build_options/ directory. | ||
-pdepend NAME | --pdepend NAME | ||
-pdepend=NAME | --pdepend=NAME | ||
Get package dependency information from "NAME". | ||
-pdefault NAME | --pdefault NAME | ||
-pdefault=NAME | --pdefault=NAME | ||
Get the default package list from "NAME". | ||
-make NAME | -m NAME | ||
--make=NAME | -m=NAME | ||
Use "NAME" for the MAKE program. The default is "make" but | ||
many platforms, "gmake" is the preferred choice. | ||
-makefile NAME | -mf NAME | ||
--makefile=NAME | -mf=NAME | ||
Call the makefile "NAME". The default is "Makefile". | ||
-makedepend NAME | -md NAME | ||
--makedepend=NAME | -md=NAME | ||
Use "NAME" for the MAKEDEPEND program. | ||
-rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME | ||
-rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME | ||
Specify the location of the MITgcm ROOTDIR as "NAME". | ||
By default, genamke will try to find the location by | ||
looking in parent directories (up to the 5th parent). | ||
-mods NAME | --mods NAME | -mo NAME | --mo NAME | ||
-mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME | ||
Here, "NAME" specifies a list of directories that are | ||
used for additional source code. Files found in the | ||
"mods list" are given preference over files of the same | ||
name found elsewhere. | ||
-disable NAME | --disable NAME | ||
-disable=NAME | --disable=NAME | ||
Here "NAME" specifies a list of packages that we don't | ||
want to use. If this violates package dependencies, | ||
genamke will exit with an error message. | ||
-enable NAME | --enable NAME | ||
-enable=NAME | --enable=NAME | ||
Here "NAME" specifies a list of packages that we wish | ||
to specifically enable. If this violates package | ||
dependencies, genamke will exit with an error message. | ||
-standarddirs NAME | --standarddirs NAME | ||
-standarddirs=NAME | --standarddirs=NAME | ||
Here, "NAME" specifies a list of directories to be | ||
used as the "standard" code. | ||
-fortran NAME | --fortran NAME | -fc NAME | --fc NAME | ||
-fc=NAME | --fc=NAME | ||
Use "NAME" as the fortran compiler. By default, genmake | ||
will search for a working compiler by trying a list of | ||
"usual suspects" such as g77, f77, etc. | ||
-cc NAME | --cc NAME | -cc=NAME | --cc=NAME | ||
Use "NAME" as the C compiler. By default, genmake | ||
will search for a working compiler by trying a list of | ||
"usual suspects" such as gcc, c89, cc, etc. | ||
-[no]ieee | --[no]ieee | ||
Do or don't use IEEE numerics. Note that this option | ||
*only* works if it is supported by the OPTFILE that | ||
is being used. | ||
-ignoretime | -ignore_time | --ignoretime | --ignore_time | ||
Ignore all the "wall clock" routines entirely. This will | ||
not in any way hurt the model results -- it simply means | ||
that the code that checks how long the model spends in | ||
various routines will give junk values. | ||
-ts | --ts | ||
Produce timing information per timestep | ||
-papis | --papis | ||
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 | ||
-mpi=PATH | --mpi=PATH | ||
Include MPI header files and link to MPI libraries using MPI_ROOT | ||
set to PATH. i.e. Include files from \$PATH/include, link to libraries | ||
from \$PATH/lib and use binaries from \$PATH/bin. | ||
-es | --es | -embed-source | --embed-source | ||
Embed a tarball containing the full source code | ||
(including the Makefile, etc.) used to build the | ||
executable [off by default] | ||
-bash NAME | ||
Explicitly specify the Bourne or BASH shell to use | ||
While it is most often a single word, the "NAME" variables specified | ||
above can in many cases be a space-delimited string such as: | ||
--enable pkg1 --enable 'pkg1 pkg2' --enable 'pkg1 pkg2 pkg3' | ||
-mods=dir1 -mods='dir1' -mods='dir1 dir2 dir3' | ||
-foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32' | ||
which, depending upon your shell, may need to be single-quoted. | ||
For more detailed genmake documentation, please see: | ||
http://mitgcm.org/devel_HOWTO/ | ||
EOF | ||
exit 1 | ||
648 | } | } |
649 | ||
650 | # Build a CPP macro to automate calling C routines from FORTRAN | # Build a CPP macro to automate calling C routines from FORTRAN |
# | Line 644 get_fortran_c_namemangling() { | Line 654 get_fortran_c_namemangling() { |
654 | if test ! "x$FC_NAMEMANGLE" = x ; then | if test ! "x$FC_NAMEMANGLE" = x ; then |
655 | return 0 | return 0 |
656 | fi | fi |
657 | echo " running: get_fortran_c_namemangling()" >> $LOGFILE | |
658 | ||
659 | default_nm="#define FC_NAMEMANGLE(X) X ## _" | default_nm="#define FC_NAMEMANGLE(X) X ## _" |
660 | ||
661 | cat > genmake_test.c <<EOF | cat > genmake_test.c <<EOF |
662 | void tcall( char * string ) { tsub( string ); } | void tcall( char * string ) { tsub( string ); } |
663 | EOF | EOF |
664 | $MAKE genmake_test.o >> genmake_warnings 2>&1 | COMM="$CC $CFLAGS -c genmake_test.c" |
665 | echo ' '$COMM >> $LOGFILE | |
666 | $COMM >> $LOGFILE 2>&1 | |
667 | RETVAL=$? | RETVAL=$? |
668 | if test "x$RETVAL" != x0 ; then | if test "x$RETVAL" != x0 ; then |
669 | FC_NAMEMANGLE=$default_nm | FC_NAMEMANGLE=$default_nm |
670 | cat <<EOF>> genmake_errors | cat <<EOF>> $LOGFILE |
671 | ||
672 | WARNING: C test compile fails | WARNING: C test compile fails |
673 | WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE' | WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE' |
674 | WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here | WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here |
675 | EOF | EOF |
676 | return 1 | return 1 |
677 | fi | fi |
# | Line 666 EOF | Line 679 EOF |
679 | RETVAL=$? | RETVAL=$? |
680 | if test "x$RETVAL" != x0 ; then | if test "x$RETVAL" != x0 ; then |
681 | FC_NAMEMANGLE=$default_nm | FC_NAMEMANGLE=$default_nm |
682 | cat <<EOF>> genmake_warnings | cat <<EOF>> $LOGFILE |
683 | ||
684 | WARNING: The "nm" command failed. | WARNING: The "nm" command failed. |
685 | WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE' | WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE' |
686 | WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here | WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here |
687 | EOF | EOF |
688 | return 1 | return 1 |
689 | fi | fi |
# | Line 680 EOF | Line 693 EOF |
693 | call tsub( string ) | call tsub( string ) |
694 | end | end |
695 | EOF | EOF |
696 | $FC $FFLAGS -c genmake_tcomp.$FS >> genmake_warnings 2>&1 | COMM="$FC $FFLAGS -c genmake_tcomp.$FS" |
697 | echo ' '$COMM >> $LOGFILE | |
698 | $COMM >> $LOGFILE 2>&1 | |
699 | RETVAL=$? | RETVAL=$? |
700 | if test "x$RETVAL" != x0 ; then | if test "x$RETVAL" != x0 ; then |
701 | FC_NAMEMANGLE=$default_nm | FC_NAMEMANGLE=$default_nm |
702 | cat <<EOF>> genmake_warnings | cat <<EOF>> $LOGFILE |
703 | ||
704 | WARNING: FORTRAN test compile fails -- please see "genmake_errors" | WARNING: FORTRAN test compile fails -- please see '$LOGFILE' |
705 | WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE' | WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE' |
706 | WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here. | WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here. |
707 | EOF | EOF |
708 | return 1 | return 1 |
709 | fi | fi |
# | Line 696 EOF | Line 711 EOF |
711 | RETVAL=$? | RETVAL=$? |
712 | if test "x$RETVAL" != x0 ; then | if test "x$RETVAL" != x0 ; then |
713 | FC_NAMEMANGLE=$default_nm | FC_NAMEMANGLE=$default_nm |
714 | cat <<EOF>> genmake_warnings | cat <<EOF>> $LOGFILE |
715 | ||
716 | WARNING: The "nm" command failed. | WARNING: The "nm" command failed. |
717 | WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE' | WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE' |
718 | WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here. | WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here. |
719 | EOF | EOF |
720 | return 1 | return 1 |
721 | fi | fi |
# | Line 726 EOF | Line 741 EOF |
741 | ||
742 | # cleanup the testing files | # cleanup the testing files |
743 | rm -f genmake_tcomp.* genmake_test.* | rm -f genmake_tcomp.* genmake_test.* |
} | ||
744 | ||
745 | echo " --> set FC_NAMEMANGLE='$FC_NAMEMANGLE'" >> $LOGFILE | |
746 | } | |
747 | ||
748 | check_HAVE_CLOC() { | check_HAVE_CLOC() { |
749 | echo >> $LOGFILE | |
750 | echo "running: check_HAVE_CLOC()" >> $LOGFILE | |
751 | get_fortran_c_namemangling | get_fortran_c_namemangling |
752 | cat <<EOF > genmake_tc_1.c | cat <<EOF > genmake_tc_1.c |
753 | $FC_NAMEMANGLE | $FC_NAMEMANGLE |
# | Line 746 void FC_NAMEMANGLE(cloc) ( double *curti | Line 764 void FC_NAMEMANGLE(cloc) ( double *curti |
764 | *curtim = *curtim/1.E6; | *curtim = *curtim/1.E6; |
765 | } | } |
766 | EOF | EOF |
767 | make genmake_tc_1.o >> genmake_warnings 2>&1 | COMM="$CC $CFLAGS -c genmake_tc_1.c" |
768 | echo $COMM >> $LOGFILE | |
769 | $COMM >> $LOGFILE 2>&1 | |
770 | RET_C=$? | RET_C=$? |
771 | cat <<EOF > genmake_tc_2.$FS | cat <<EOF > genmake_tc_2.$FS |
772 | program hello | program hello |
# | Line 757 EOF | Line 777 EOF |
777 | end | end |
778 | EOF | EOF |
779 | COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o" | COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o" |
780 | echo $COMM >> genmake_warnings | echo $COMM >> $LOGFILE |
781 | $COMM >> genmake_warnings 2>&1 | $COMM >> $LOGFILE 2>&1 |
782 | RET_F=$? | RET_F=$? |
783 | test -x ./genmake_tc && ./genmake_tc >> genmake_warnings 2>&1 | test -x ./genmake_tc && ./genmake_tc >> $LOGFILE 2>&1 |
784 | RETVAL=$? | RETVAL=$? |
785 | if test "x$RETVAL" = x0 ; then | if test "x$RETVAL" = x0 ; then |
786 | HAVE_CLOC=t | HAVE_CLOC=t |
787 | DEFINES="$DEFINES -DHAVE_CLOC" | DEFINES="$DEFINES -DHAVE_CLOC" |
788 | fi | fi |
789 | rm -f genmake_tc* | rm -f genmake_tc* |
790 | echo " --> set HAVE_CLOC='$HAVE_CLOC'" >> $LOGFILE | |
791 | } | } |
792 | ||
793 | check_HAVE_SIGREG() { | check_HAVE_SIGREG() { |
794 | if test ! "x$HAVE_SIGREG" = x ; then | if test ! "x$HAVE_SIGREG" = x ; then |
795 | return | return |
796 | fi | fi |
797 | echo >> $LOGFILE | |
798 | echo "running: check_HAVE_SIGREG()" >> $LOGFILE | |
799 | get_fortran_c_namemangling | get_fortran_c_namemangling |
800 | cat <<EOF > genmake_tc_1.c | cat <<EOF > genmake_tc_1.c |
801 | $FC_NAMEMANGLE | $FC_NAMEMANGLE |
# | Line 805 void FC_NAMEMANGLE(sigreg) (int * aip) | Line 827 void FC_NAMEMANGLE(sigreg) (int * aip) |
827 | return; | return; |
828 | } | } |
829 | EOF | EOF |
830 | make genmake_tc_1.o >> genmake_warnings 2>&1 | COMM="$CC $CFLAGS -c genmake_tc_1.c" |
831 | echo $COMM >> $LOGFILE | |
832 | $COMM >> $LOGFILE 2>&1 | |
833 | RET_C=$? | RET_C=$? |
834 | cat <<EOF > genmake_tc_2.$FS | cat <<EOF > genmake_tc_2.$FS |
835 | program hello | program hello |
# | Line 815 EOF | Line 839 EOF |
839 | call sigreg(anint) | call sigreg(anint) |
840 | end | end |
841 | EOF | EOF |
842 | echo >> genmake_warnings | cat genmake_tc_2.$FS >> $LOGFILE |
echo "running: check_HAVE_SIGREG()" >> genmake_warnings | ||
cat genmake_tc_2.$FS >> genmake_warnings | ||
843 | COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o" | COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o" |
844 | echo $COMM >> genmake_warnings | echo $COMM >> $LOGFILE |
845 | $COMM >> genmake_warnings 2>&1 | $COMM >> $LOGFILE 2>&1 |
846 | RETVAL=$? | RETVAL=$? |
847 | if test "x$RETVAL" = x0 ; then | if test "x$RETVAL" = x0 ; then |
848 | HAVE_SIGREG=t | HAVE_SIGREG=t |
849 | DEFINES="$DEFINES -DHAVE_SIGREG" | DEFINES="$DEFINES -DHAVE_SIGREG" |
850 | fi | fi |
851 | rm -f genmake_tc* | rm -f genmake_tc* |
852 | echo " --> set HAVE_SIGREG='$HAVE_SIGREG'" >> $LOGFILE | |
853 | } | } |
854 | ||
855 | check_HAVE_SETRLSTK() { | check_HAVE_SETRLSTK() { |
856 | if test "x$HAVE_SETRLSTK" = xt ; then | if test "x$HAVE_SETRLSTK" = xt ; then |
857 | DEFINES="$DEFINES -DHAVE_SETRLSTK" | DEFINES="$DEFINES -DHAVE_SETRLSTK" |
# | Line 838 check_HAVE_SETRLSTK() { | Line 860 check_HAVE_SETRLSTK() { |
860 | if test ! "x$HAVE_SETRLSTK" = x ; then | if test ! "x$HAVE_SETRLSTK" = x ; then |
861 | return | return |
862 | fi | fi |
863 | echo >> $LOGFILE | |
864 | echo "running: check_HAVE_SETRLSTK()" >> $LOGFILE | |
865 | get_fortran_c_namemangling | get_fortran_c_namemangling |
866 | cat <<EOF > genmake_tc_1.c | cat <<EOF > genmake_tc_1.c |
867 | $FC_NAMEMANGLE | $FC_NAMEMANGLE |
# | Line 853 void FC_NAMEMANGLE(setrlstk) () | Line 877 void FC_NAMEMANGLE(setrlstk) () |
877 | return; | return; |
878 | } | } |
879 | EOF | EOF |
880 | make genmake_tc_1.o >> genmake_warnings 2>&1 | COMM="$CC $CFLAGS -c genmake_tc_1.c" |
881 | echo $COMM >> $LOGFILE | |
882 | $COMM >> $LOGFILE 2>&1 | |
883 | RET_C=$? | RET_C=$? |
884 | cat <<EOF > genmake_tc_2.$FS | cat <<EOF > genmake_tc_2.$FS |
885 | program hello | program hello |
# | Line 861 EOF | Line 887 EOF |
887 | call setrlstk() | call setrlstk() |
888 | end | end |
889 | EOF | EOF |
890 | echo >> genmake_warnings | cat genmake_tc_2.$FS >> $LOGFILE |
echo "running: check_HAVE_SETRLSTK()" >> genmake_warnings | ||
cat genmake_tc_2.$FS >> genmake_warnings | ||
891 | COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o" | COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o" |
892 | echo $COMM >> genmake_warnings | echo $COMM >> $LOGFILE |
893 | $COMM >> genmake_warnings 2>&1 | $COMM >> $LOGFILE 2>&1 |
894 | RETVAL=$? | RETVAL=$? |
895 | if test "x$RETVAL" = x0 ; then | if test "x$RETVAL" = x0 ; then |
896 | HAVE_SETRLSTK=t | HAVE_SETRLSTK=t |
897 | DEFINES="$DEFINES -DHAVE_SETRLSTK" | DEFINES="$DEFINES -DHAVE_SETRLSTK" |
898 | fi | fi |
899 | rm -f genmake_tc* | rm -f genmake_tc* |
900 | echo " --> set HAVE_SETRLSTK='$HAVE_SETRLSTK'" >> $LOGFILE | |
901 | } | } |
902 | ||
903 | check_HAVE_STAT() { | check_HAVE_STAT() { |
904 | echo >> $LOGFILE | |
905 | echo "running: check_HAVE_STAT()" >> $LOGFILE | |
906 | get_fortran_c_namemangling | get_fortran_c_namemangling |
907 | cat <<EOF > genmake_tc_1.c | cat <<EOF > genmake_tc_1.c |
908 | $FC_NAMEMANGLE | $FC_NAMEMANGLE |
# | Line 897 void FC_NAMEMANGLE(tfsize) ( int *nbyte | Line 923 void FC_NAMEMANGLE(tfsize) ( int *nbyte |
923 | *nbyte = -1; | *nbyte = -1; |
924 | } | } |
925 | EOF | EOF |
926 | make genmake_tc_1.o >> genmake_tc.log 2>&1 | COMM="$CC $CFLAGS -c genmake_tc_1.c" |
927 | echo $COMM >> $LOGFILE | |
928 | $COMM >> genmake_tc.log 2>&1 | |
929 | RET_C=$? | RET_C=$? |
930 | cat <<EOF > genmake_tc_2.$FS | cat <<EOF > genmake_tc_2.$FS |
931 | program hello | program hello |
# | Line 906 EOF | Line 934 EOF |
934 | print *," HELLO WORLD", nbyte | print *," HELLO WORLD", nbyte |
935 | end | end |
936 | EOF | EOF |
937 | echo >> genmake_warnings | cat genmake_tc_2.$FS >> $LOGFILE |
echo "running: check_HAVE_STAT()" >> genmake_warnings | ||
cat genmake_tc_2.$FS >> genmake_warnings | ||
938 | COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o" | COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o" |
939 | echo $COMM >> genmake_warnings | echo $COMM >> $LOGFILE |
940 | $COMM >> genmake_tc.log 2>&1 | $COMM >> genmake_tc.log 2>&1 |
941 | RETVAL=$? | RETVAL=$? |
942 | if test "x$RETVAL" = x0 ; then | if test "x$RETVAL" = x0 ; then |
# | Line 918 EOF | Line 944 EOF |
944 | DEFINES="$DEFINES -DHAVE_STAT" | DEFINES="$DEFINES -DHAVE_STAT" |
945 | fi | fi |
946 | rm -f genmake_tc* | rm -f genmake_tc* |
947 | echo " --> set HAVE_STAT='$HAVE_STAT'" >> $LOGFILE | |
948 | } | } |
949 | ||
950 | check_netcdf_libs() { | check_netcdf_libs() { |
951 | if test ! "x$SKIP_NETCDF_CHECK" = x ; then | if test ! "x$SKIP_NETCDF_CHECK" = x ; then |
952 | return | return |
953 | fi | fi |
954 | echo >> genmake_warnings | echo >> $LOGFILE |
955 | echo "running: check_netcdf_libs()" >> genmake_warnings | echo "running: check_netcdf_libs()" >> $LOGFILE |
956 | cat <<EOF > genmake_tnc.F | cat <<EOF > genmake_tnc.F |
957 | program fgennc | program fgennc |
958 | #include "netcdf.inc" | #include "netcdf.inc" |
# | Line 944 EOF | Line 970 EOF |
970 | IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret) | IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret) |
971 | end | end |
972 | EOF | EOF |
973 | echo "=== genmake_tnc.F ===" > genmake_tnc.log | echo "=== genmake_tnc.F >>>" > genmake_tnc.log |
974 | cat genmake_tnc.F >> genmake_tnc.log | cat genmake_tnc.F >> genmake_tnc.log |
975 | echo "=== genmake_tnc.F ===" >> genmake_tnc.log | echo "<<< genmake_tnc.F ===" >> genmake_tnc.log |
976 | RET_CPP=f | RET_CPP=f |
977 | COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES" | COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES" |
978 | echo "$COMM" >> genmake_tnc.log | echo "$COMM" >> genmake_tnc.log |
# | Line 962 EOF | Line 988 EOF |
988 | $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \ | $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \ |
989 | && $LINK $FFLAGS $FOPTIM -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 |
990 | RET_COMPILE=$? | RET_COMPILE=$? |
991 | cat genmake_tnc.log >> genmake_warnings | cat genmake_tnc.log >> $LOGFILE |
992 | ||
993 | #EH3 Remove test program execution for machines that either disallow | #EH3 Remove test program execution for machines that either disallow |
994 | #EH3 execution or cannot support it (eg. cross-compilers) | #EH3 execution or cannot support it (eg. cross-compilers) |
# | Line 973 EOF | Line 999 EOF |
999 | ||
1000 | if test "x$RET_COMPILE" = x0 ; then | if test "x$RET_COMPILE" = x0 ; then |
1001 | HAVE_NETCDF=t | HAVE_NETCDF=t |
1002 | echo "check_netcdf: successful" >> $LOGFILE | |
1003 | else | else |
1004 | # try again with "-lnetcdf" added to the libs | # try again with "-lnetcdf" added to the libs |
1005 | echo "try again with added '-lnetcdf'" > genmake_tnc.log | echo "==> try again with added '-lnetcdf'" > genmake_tnc.log |
1006 | echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log | echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log |
1007 | echo " && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log | echo " && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log |
1008 | echo " && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log | echo " && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log |
# | Line 983 EOF | Line 1010 EOF |
1010 | && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \ | && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \ |
1011 | && $LINK $FFLAGS $FOPTIM -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 |
1012 | RET_COMPILE=$? | RET_COMPILE=$? |
1013 | cat genmake_tnc.log >> genmake_warnings | echo >> $LOGFILE |
1014 | cat genmake_tnc.log >> $LOGFILE | |
1015 | if test "x$RET_COMPILE" = x0 ; then | if test "x$RET_COMPILE" = x0 ; then |
1016 | LIBS="$LIBS -lnetcdf" | LIBS="$LIBS -lnetcdf" |
1017 | HAVE_NETCDF=t | HAVE_NETCDF=t |
1018 | echo "check_netcdf: successful" >> $LOGFILE | |
1019 | else | else |
1020 | # try again with "-lnetcdff" added to the libs | # try again with "-lnetcdff" added to the libs |
1021 | echo "try again with added '-lnetcdff -lnetcdf'" > genmake_tnc.log | echo "==> try again with added '-lnetcdff -lnetcdf'" > genmake_tnc.log |
1022 | echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log | echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log |
1023 | echo " && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log | echo " && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log |
1024 | echo " && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log | echo " && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log |
# | Line 997 EOF | Line 1026 EOF |
1026 | && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \ | && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \ |
1027 | && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdff -lnetcdf >> genmake_tnc.log 2>&1 | && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdff -lnetcdf >> genmake_tnc.log 2>&1 |
1028 | RET_COMPILE=$? | RET_COMPILE=$? |
1029 | cat genmake_tnc.log >> genmake_warnings | echo >> $LOGFILE |
1030 | cat genmake_tnc.log >> $LOGFILE | |
1031 | if test "x$RET_COMPILE" = x0 ; then | if test "x$RET_COMPILE" = x0 ; then |
1032 | LIBS="$LIBS -lnetcdff -lnetcdf" | LIBS="$LIBS -lnetcdff -lnetcdf" |
1033 | HAVE_NETCDF=t | HAVE_NETCDF=t |
1034 | echo "check_netcdf: successful" >> $LOGFILE | |
1035 | fi | fi |
1036 | fi | fi |
1037 | fi | fi |
1038 | rm -f genmake_tnc* | rm -f genmake_tnc* |
1039 | echo " --> set HAVE_NETCDF='$HAVE_NETCDF'" >> $LOGFILE | |
1040 | } | } |
1041 | ||
1042 | ||
1043 | ############################################################################### | ############################################################################### |
1044 | # Sequential part of script starts here | # Sequential part of script starts here |
1045 | ############################################################################### | ############################################################################### |
# | Line 1030 ENABLE= | Line 1061 ENABLE= |
1061 | DISABLE= | DISABLE= |
1062 | # MAKEFILE= | # MAKEFILE= |
1063 | # MAKEDEPEND= | # MAKEDEPEND= |
1064 | PDEPEND= | PKG_DEPEND= |
1065 | DUMPSTATE=t | PKG_GROUPS= |
1066 | PDEFAULT= | DUMPSTATE=f |
1067 | OPTFILE= | OPTFILE= |
1068 | INCLUDES="-I. $INCLUDES" | INCLUDES="-I. $INCLUDES" |
1069 | FFLAGS= | FFLAGS= |
1070 | FOPTIM= | FOPTIM= |
1071 | FEXTRAFLAGS= | FEXTRAFLAGS= |
1072 | USE_EXTENDED_SRC= | |
1073 | EXTENDED_SRC_FLAG= | |
1074 | GET_FC_VERSION= | |
1075 | CFLAGS= | CFLAGS= |
1076 | KFLAGS1= | KFLAGS1= |
1077 | KFLAGS2= | KFLAGS2= |
# | Line 1048 NOOPTFILES= | Line 1082 NOOPTFILES= |
1082 | NOOPTFLAGS= | NOOPTFLAGS= |
1083 | MPI= | MPI= |
1084 | MPIPATH= | MPIPATH= |
1085 | OMP= | |
1086 | OMPFLAG= | |
1087 | USE_R4= | |
1088 | TS= | TS= |
1089 | PAPIS= | PAPIS= |
1090 | PCLS= | PCLS= |
# | Line 1091 MACHINE=`uname -a` | Line 1128 MACHINE=`uname -a` |
1128 | EXECUTABLE= | EXECUTABLE= |
1129 | EXEHOOK= | EXEHOOK= |
1130 | EXEDIR= | EXEDIR= |
PACKAGES_CONF= | ||
1131 | IEEE= | IEEE= |
1132 | if test "x$MITGCM_IEEE" != x ; then | if test "x$MITGCM_IEEE" != x ; then |
1133 | IEEE=$MITGCM_IEEE | IEEE=$MITGCM_IEEE |
# | Line 1112 FTL_TAF_FLAGS= | Line 1148 FTL_TAF_FLAGS= |
1148 | SVD_TAMC_FLAGS= | SVD_TAMC_FLAGS= |
1149 | TAMC_EXTRA= | TAMC_EXTRA= |
1150 | ||
1151 | # The following state can be set directly by command-line switches | # The following state can be set directly by command-line switches |
1152 | gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE" | gm_s1="OPTFILE PKG_DEPEND PKG_GROUPS DISABLE ENABLE MAKEFILE MAKEDEPEND PLATFORM" |
1153 | gm_s2="FC CPP IEEE TS PAPIS PCLS PAPI PCL HPMT GSL DEVEL MPI JAM DUMPSTATE STANDARDDIRS" | gm_s2="FC CC MPI OMP USE_R4 TS PAPIS PCLS PAPI PCL HPMT IEEE DEVEL GSL FEXTRAFLAGS" |
1154 | gm_s3="ROOTDIR STANDARDDIRS MODS DUMPSTATE" | |
1155 | ||
1156 | # The following state is not directly set by command-line switches | # The following state is not directly set by command-line switches |
1157 | gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM FEXTRAFLAGS" | gm_s4="LN S64 LINK MAKE PACKAGES INCLUDES FFLAGS FOPTIM" |
1158 | gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS" | gm_s5="CFLAGS LIBS KPP KFLAGS1 KFLAGS2 KPPFILES NOOPTFILES NOOPTFLAGS" |
1159 | gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE" | gm_s6="TOOLSDIR SOURCEDIRS INCLUDEDIRS EXEDIR EXECUTABLE EXEHOOK" |
1160 | gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF" | gm_s7="PWD THISHOST THISUSER THISDATE THISVER MACHINE" |
1161 | gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME" | gm_s8="FC_NAMEMANGLE HAVE_NETCDF HAVE_SYSTEM HAVE_FDATE HAVE_ETIME" |
1162 | ||
1163 | # The following are all related to adjoint/tangent-linear stuff | # The following are all related to adjoint/tangent-linear stuff |
1164 | gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS" | gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS" |
1165 | gm_s11="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS" | gm_s11="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS" |
1166 | gm_s12="TAF_EXTRA TAMC_EXTRA" | gm_s12="TAF_EXTRA TAMC_EXTRA" |
1167 | ||
1168 | gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7" | gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7 $gm_s8" |
1169 | gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12" | gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12" |
1170 | ||
1171 | cat <<EOF | cat <<EOF |
1172 | ||
1173 | GENMAKE : | GENMAKE : |
1174 | ||
1175 | A program for GENerating MAKEfiles for the MITgcm project. For a | A program for GENerating MAKEfiles for the MITgcm project. |
1176 | quick list of options, use "genmake -h" or for more detail see: | For a quick list of options, use "genmake2 -h" |
1177 | or for more detail see the Developer's HOWTO manual at: | |
1178 | http://mitgcm.org/devel_HOWTO/ | http://mitgcm.org/public/docs.html |
1179 | ||
1180 | EOF | EOF |
1181 | ||
1182 | LOGFILE="genmake.log" | |
1183 | #- clean-up previous genmake logfiles: | |
1184 | rm -f genmake_state genmake_*optfile $LOGFILE | |
1185 | ||
1186 | echo "=== Processing options files and arguments ===" | echo "=== Processing options files and arguments ===" |
1187 | gm_local="genmake_local" | gm_local="genmake_local" |
for i in . $MODS ; do | ||
if test -r $i/$gm_local ; then | ||
. $i/$gm_local | ||
break | ||
fi | ||
done | ||
1188 | printf " getting local config information: " | printf " getting local config information: " |
1189 | if test -f $gm_local ; then | if test -f $gm_local ; then |
1190 | echo "using $gm_local" | echo "using $gm_local" |
# | Line 1162 else | Line 1196 else |
1196 | fi | fi |
1197 | ||
1198 | #echo "$0::$1:$2:$3:$4:$5:$6:$7:" | #echo "$0::$1:$2:$3:$4:$5:$6:$7:" |
#OPTIONS= | ||
#n=0 | ||
#for i ; do | ||
# echo "$i $n" | ||
# setvar="OPTIONS[$n]='$i'" | ||
# # echo " $setvar" | ||
# eval "$setvar" | ||
# n=$(( $n + 1 )) | ||
#done | ||
1199 | #parse_options | #parse_options |
1200 | ac_prev= | ac_prev= |
1201 | for ac_option in "$@" ; do | for ac_option in "$@" ; do |
# | Line 1183 for ac_option in "$@" ; do | Line 1208 for ac_option in "$@" ; do |
1208 | ac_prev= | ac_prev= |
1209 | continue | continue |
1210 | fi | fi |
1211 | ||
1212 | ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` | ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` |
1213 | ||
1214 | case $ac_option in | case $ac_option in |
1215 | ||
1216 | -help | --help | -h | --h) | -help | --help | -h | --h) |
# | Line 1204 for ac_option in "$@" ; do | Line 1229 for ac_option in "$@" ; do |
1229 | AD_OPTFILE=$ac_optarg ;; | AD_OPTFILE=$ac_optarg ;; |
1230 | ||
1231 | -pdepend | --pdepend) | -pdepend | --pdepend) |
1232 | ac_prev=PDEPEND ;; | ac_prev=PKG_DEPEND ;; |
1233 | -pdepend=* | --pdepend=*) | -pdepend=* | --pdepend=*) |
1234 | PDEPEND=$ac_optarg ;; | PKG_DEPEND=$ac_optarg ;; |
1235 | ||
1236 | -pdefault | --pdefault) | -pgroups | --pgroups) |
1237 | ac_prev=PDEFAULT ;; | ac_prev=PKG_GROUPS ;; |
1238 | -pdefault=* | --pdefault=*) | -pgroups=* | --pgroups=*) |
1239 | PDEFAULT=$ac_optarg ;; | PKG_GROUPS=$ac_optarg ;; |
1240 | ||
1241 | -make | --make | -m | --m) | -make | --make | -m | --m) |
1242 | ac_prev=MAKE ;; | ac_prev=MAKE ;; |
# | Line 1290 for ac_option in "$@" ; do | Line 1315 for ac_option in "$@" ; do |
1315 | -fs90=* | --fs90=*) | -fs90=* | --fs90=*) |
1316 | FS90=$ac_optarg ;; | FS90=$ac_optarg ;; |
1317 | ||
1318 | -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 ) | |
1319 | USE_R4=true ;; | |
1320 | ||
1321 | -ieee | --ieee) | -ieee | --ieee) |
1322 | IEEE=true ;; | IEEE=true ;; |
1323 | -noieee | --noieee) | -noieee | --noieee) |
1324 | IEEE= ;; | echo "Warning: ignore option '$ac_option' (default is already without '-ieee')" ;; |
1325 | -devel | --devel) | |
1326 | IEEE=true ; DEVEL=true ;; | |
1327 | -gsl | --gsl) | |
1328 | GSL=true ;; | |
1329 | ||
1330 | -ts | --ts) | -ts | --ts) |
1331 | TS=true ;; | TS=true ;; |
# | Line 1310 for ac_option in "$@" ; do | Line 1342 for ac_option in "$@" ; do |
1342 | -hpmt | --hpmt) | -hpmt | --hpmt) |
1343 | HPMT=true ;; | HPMT=true ;; |
1344 | ||
-gsl | --gsl) | ||
GSL=true ;; | ||
-devel | --devel) | ||
DEVEL=true ;; | ||
1345 | -mpi | --mpi) | -mpi | --mpi) |
1346 | MPI=true ;; | MPI=true ;; |
1347 | -mpi=* | --mpi=*) | -mpi=* | --mpi=*) |
1348 | MPIPATH=$ac_optarg | MPIPATH=$ac_optarg |
1349 | MPI=true ;; | MPI=true ;; |
1350 | ||
1351 | # -jam | --jam) | -omp | --omp) |
1352 | # JAM=1 ;; | OMP=true ;; |
1353 | # -nojam | --nojam) | -omp=* | --omp=*) |
1354 | # JAM=0 ;; | OMPFLAG=$ac_optarg |
1355 | OMP=true ;; | |
1356 | ||
1357 | -ds | --ds) | -ds | --ds) |
1358 | DUMPSTATE=t ;; | DUMPSTATE=t ;; |
1359 | ||
1360 | -extra_flag | --extra_flag) | |
1361 | ac_prev=FEXTRAFLAGS ;; | |
1362 | -extra_flag=* | --extra_flag=*) | |
1363 | FEXTRAFLAGS=$ac_optarg ;; | |
1364 | ||
1365 | -taf_extra | --taf_extra) | -taf_extra | --taf_extra) |
1366 | ac_prev=TAF_EXTRA ;; | ac_prev=TAF_EXTRA ;; |
1367 | -taf_extra=* | --taf_extra=*) | -taf_extra=* | --taf_extra=*) |
# | Line 1357 for ac_option in "$@" ; do | Line 1389 for ac_option in "$@" ; do |
1389 | ;; | ;; |
1390 | ||
1391 | esac | esac |
done | ||
1392 | ||
1393 | done | |
1394 | ||
1395 | if test -f ./.genmakerc ; then | if test -f ./.genmakerc ; then |
1396 | echo | echo |
1397 | echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\"" | echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\"" |
1398 | echo " file. This file format is no longer supported. For directions on" | echo " file. This file format is no longer supported. For directions on" |
1399 | echo " how to setup and use the new \"genmake2\" script, please see:" | echo " how to setup and use the new \"genmake2\" script, please see:" |
1400 | echo " http://mitgcm.org/devel_HOWTO/" | echo " http://mitgcm.org/public/devel_HOWTO/" |
1401 | echo " and send an email to MITgcm-support@mitgcm.org if you need help." | echo " and send an email to MITgcm-support@mitgcm.org if you need help." |
1402 | echo "WARNING: ignore \"./.genmakerc\" and continue." | echo "WARNING: ignore \"./.genmakerc\" and continue." |
1403 | echo | echo |
1404 | fi | fi |
1405 | ||
1406 | # Find the MITgcm ${ROOTDIR} | # Find the MITgcm ${ROOTDIR} |
# | Line 1381 if test "x${ROOTDIR}" = x ; then | Line 1412 if test "x${ROOTDIR}" = x ; then |
1412 | for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do | for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do |
1413 | if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then | if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then |
1414 | ROOTDIR=$d | ROOTDIR=$d |
1415 | printf "Warning: ROOTDIR was not specified but there appears to be" | printf "Warning: ROOTDIR was not specified ;" |
1416 | echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it." | echo " try using a local copy of MITgcm found at \"$ROOTDIR\"" |
1417 | break | break |
1418 | fi | fi |
1419 | done | done |
# | Line 1400 if test ! -d ${ROOTDIR} ; then | Line 1431 if test ! -d ${ROOTDIR} ; then |
1431 | fi | fi |
1432 | ||
1433 | # Find the MITgcm ${THISVER} | # Find the MITgcm ${THISVER} |
1434 | if test -f "${ROOTDIR}/doc/tag-index" ; then | version_file="${ROOTDIR}/doc/tag-index" |
1435 | THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1` | if test -f $version_file ; then |
1436 | THISVER=`$AWK '/^checkpoint/{print $1; exit}' $version_file` | |
1437 | #- remove ./BUILD_INFO.h file if older than version_file | |
1438 | if test -f ./BUILD_INFO.h -a ./BUILD_INFO.h -ot $version_file ; then | |
1439 | echo " remove ./BUILD_INFO.h (older than ${version_file})" | |
1440 | rm -f ./BUILD_INFO.h | |
1441 | fi | |
1442 | fi | fi |
1443 | ||
1444 | if test "x$MAKEFILE" = x ; then | if test "x$MAKEFILE" = x ; then |
1445 | MAKEFILE="Makefile" | MAKEFILE="Makefile" |
1446 | fi | fi |
1447 | ||
1448 | echo " getting OPTFILE information: " | echo " getting OPTFILE information:" |
1449 | if test "x${OPTFILE}" = x ; then | if test "x${OPTFILE}" = x ; then |
1450 | if test "x$MITGCM_OF" = x ; then | if test "x$MITGCM_OF" = x ; then |
1451 | echo "Warning: no OPTFILE specified so we'll look for possible settings" | echo "Warning: no OPTFILE specified so we'll look for possible settings" |
1452 | printf "\n=== Searching for possible settings for OPTFILE ===\n" | printf "\n=== Searching for possible settings for OPTFILE ===\n" |
1453 | find_possible_configs | find_possible_optfile |
1454 | else | else |
1455 | OPTFILE=$MITGCM_OF | OPTFILE=$MITGCM_OF |
1456 | fi | fi |
# | Line 1428 if test "x$OPTFILE" != xNONE ; then | Line 1465 if test "x$OPTFILE" != xNONE ; then |
1465 | echo "--please check that variable syntax is bash-compatible" | echo "--please check that variable syntax is bash-compatible" |
1466 | exit 1 | exit 1 |
1467 | fi | fi |
1468 | if test "x$DUMPSTATE" != xf ; then | if test "x$DUMPSTATE" = xt ; then |
1469 | cp -f $OPTFILE "genmake_optfile" | cp -f $OPTFILE "genmake_optfile" |
1470 | fi | fi |
1471 | else | else |
# | Line 1437 if test "x$OPTFILE" != xNONE ; then | Line 1474 if test "x$OPTFILE" != xNONE ; then |
1474 | fi | fi |
1475 | fi | fi |
1476 | ||
1477 | echo " getting AD_OPTFILE information: " | echo " getting AD_OPTFILE information:" |
1478 | if test "x${AD_OPTFILE}" = x ; then | if test "x${AD_OPTFILE}" = x ; then |
1479 | if test "x$MITGCM_AD_OF" = x ; then | if test "x$MITGCM_AD_OF" = x ; then |
1480 | AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_default | AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_default |
# | Line 1455 if test "x${AD_OPTFILE}" != xNONE ; then | Line 1492 if test "x${AD_OPTFILE}" != xNONE ; then |
1492 | echo "--please check that variable syntax is bash-compatible" | echo "--please check that variable syntax is bash-compatible" |
1493 | exit 1 | exit 1 |
1494 | fi | fi |
1495 | if test "x$DUMPSTATE" != xf ; then | if test "x$DUMPSTATE" = xt ; then |
1496 | cp -f $AD_OPTFILE "genmake_ad_optfile" | cp -f $AD_OPTFILE "genmake_ad_optfile" |
1497 | fi | fi |
1498 | else | else |
# | Line 1483 Error: no Fortran compiler: please speci | Line 1520 Error: no Fortran compiler: please speci |
1520 | EOF | EOF |
1521 | exit 1 | exit 1 |
1522 | fi | fi |
1523 | if test "x$GET_FC_VERSION" != x ; then | |
1524 | echo "Get compiler version using: $FC $GET_FC_VERSION" >> $LOGFILE | |
1525 | ff=`echo $FC | sed 's/ .*//'` ; xx=`echo $ff | sed 's/^./& /' | sed 's/ .*//'` | |
1526 | if test $xx != '/' ; then which $ff >> $LOGFILE ; fi | |
1527 | $FC $GET_FC_VERSION > genmake_fc_vers1 2> genmake_fc_vers2 | |
1528 | if test -s genmake_fc_vers1 ; then | |
1529 | cat genmake_fc_vers1 >> $LOGFILE | |
1530 | else | |
1531 | cat genmake_fc_vers2 >> $LOGFILE | |
1532 | fi | |
1533 | echo "<-- compiler version ----" >> $LOGFILE | |
1534 | rm -f genmake_fc_vers1 genmake_fc_vers2 | |
1535 | fi | |
1536 | ||
1537 | if test "x$CC" = x ; then | if test "x$CC" = x ; then |
1538 | CC=cc | look_for_C_compilers |
# cat <<EOF 1>&2 | ||
# Error: no C compiler: please specify using one of the following: | ||
# 1) within the options file ("CC=...") as specified by "-of=OPTFILE" | ||
# 2) the "-cc=XXX" command-line option | ||
# 3) the "./genmake_local" file | ||
# EOF | ||
# exit 1 | ||
1539 | fi | fi |
1540 | ||
1541 | if test "x$LINK" = x ; then | if test "x$LINK" = x ; then |
1542 | LINK=$FC | LINK=$FC |
1543 | fi | fi |
# | Line 1500 if test "x$MAKE" = x ; then | Line 1545 if test "x$MAKE" = x ; then |
1545 | MAKE="make" | MAKE="make" |
1546 | fi | fi |
1547 | if test "x$CPP" = x ; then | if test "x$CPP" = x ; then |
1548 | CPP=cpp | CPP="cpp -traditional -P" |
1549 | fi | fi |
1550 | #EH3 === UGLY === | #EH3 === UGLY === |
1551 | # The following is an ugly little hack to check for $CPP in /lib/ and | # The following is an ugly little hack to check for $CPP in /lib/ and |
# | Line 1527 EOF | Line 1572 EOF |
1572 | else | else |
1573 | rm -f test_cpp | rm -f test_cpp |
1574 | fi | fi |
1575 | ||
1576 | look_for_makedepend | look_for_makedepend |
1577 | ||
1578 | # Check that soft-link command is set and usable | |
1579 | if test "x$LN" = x ; then | if test "x$LN" = x ; then |
1580 | LN="ln -s" | LN="ln -s" |
1581 | fi | fi |
# | Line 1537 RETVAL=$? | Line 1585 RETVAL=$? |
1585 | if test "x$RETVAL" != x0 ; then | if test "x$RETVAL" != x0 ; then |
1586 | cat <<EOF 1>&2 | cat <<EOF 1>&2 |
1587 | ||
1588 | Error: The command "ln -s" failed -- please specify a working soft-link | Error: The command "$LN" failed -- please specify a working soft-link |
1589 | command in the optfile. | command in the optfile. |
1590 | ||
1591 | EOF | EOF |
# | Line 1557 if test ! "x$MPI" = x ; then | Line 1605 if test ! "x$MPI" = x ; then |
1605 | echo " Turning on MPI cpp macros" | echo " Turning on MPI cpp macros" |
1606 | DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI" | DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI" |
1607 | fi | fi |
1608 | if test ! "x$OMP" = x ; then | |
1609 | echo " Add OMPFLAG and turn on OpenMP cpp macros" | |
1610 | FFLAGS="$FFLAGS $OMPFLAG" | |
1611 | F90FLAGS="$F90FLAGS $OMPFLAG" | |
1612 | DEFINES="$DEFINES -DUSE_OMP_THREADING" | |
1613 | fi | |
1614 | ||
1615 | if test ! "x$USE_R4" = x ; then | |
1616 | echo " Turning on LET_RS_BE_REAL4 cpp flag" | |
1617 | DEFINES="$DEFINES -DLET_RS_BE_REAL4" | |
1618 | fi | |
1619 | ||
1620 | if test ! "x$TS" = x ; then | if test ! "x$TS" = x ; then |
1621 | echo " Turning on timing per timestep" | echo " Turning on timing per timestep" |
# | Line 1638 if test ! "x$GSL" = x ; then | Line 1697 if test ! "x$GSL" = x ; then |
1697 | INCLUDES="$INCLUDES $GSLINC" | INCLUDES="$INCLUDES $GSLINC" |
1698 | LIBS="$LIBS $GSLLIB" | LIBS="$LIBS $GSLLIB" |
1699 | fi | fi |
1700 | #- if USE_EXTENDED_SRC is set, add EXTENDED_SRC_FLAG to FFLAGS : | |
1701 | if test ! "x$USE_EXTENDED_SRC" = x ; then | |
1702 | FFLAGS="$FFLAGS $EXTENDED_SRC_FLAG" | |
1703 | F90FIXEDFORMAT="$F90FIXEDFORMAT $EXTENDED_SRC_FLAG" | |
1704 | fi | |
1705 | ||
1706 | printf "\n=== Checking system libraries ===\n" | printf "\n=== Checking system libraries ===\n" |
1707 | printf " Do we have the system() command using $FC... " | printf " Do we have the system() command using $FC... " |
# | Line 1758 if test "x$EMBED_SRC" = xt ; then | Line 1822 if test "x$EMBED_SRC" = xt ; then |
1822 | ENABLE="$ENABLE embed_files" | ENABLE="$ENABLE embed_files" |
1823 | fi | fi |
1824 | ||
1825 | printf "\n=== Setting defaults ===\n" | printf "\n=== Setting defaults ===\n" |
1826 | printf " Adding MODS directories: " | printf " Adding MODS directories: " |
1827 | for d in $MODS ; do | for d in $MODS ; do |
1828 | if test ! -d $d ; then | if test ! -d $d ; then |
1829 | echo | echo |
1830 | echo "Error: MODS directory \"$d\" not found!" | echo "Error: MODS directory \"$d\" not found!" |
1831 | exit 1 | exit 1 |
1832 | else | else |
1833 | printf " $d" | printf "$d " |
1834 | SOURCEDIRS="$SOURCEDIRS $d" | SOURCEDIRS="$SOURCEDIRS $d" |
1835 | INCLUDEDIRS="$INCLUDEDIRS $d" | INCLUDEDIRS="$INCLUDEDIRS $d" |
1836 | fi | fi |
1837 | done | done |
1838 | echo | echo |
1839 | ||
1840 | if test "x${PLATFORM}" = x ; then | #if test "x${PLATFORM}" = x ; then |
1841 | PLATFORM=$p_PLATFORM | # PLATFORM=$p_PLATFORM |
1842 | fi | #fi |
1843 | ||
1844 | if test "x${EXEDIR}" = x ; then | if test "x${EXEDIR}" = x ; then |
1845 | tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'` | tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'` |
# | Line 1816 ERROR: neither of the two default script | Line 1879 ERROR: neither of the two default script |
1879 | ${TOOLSDIR}/set64bitConst.sh | ${TOOLSDIR}/set64bitConst.sh |
1880 | ${TOOLSDIR}/set64bitConst.csh | ${TOOLSDIR}/set64bitConst.csh |
1881 | ||
1882 | are working so please check paths or specify (with \$S64) a | are working so please check paths or specify (with \$S64) a |
1883 | working version of this script. | working version of this script. |
1884 | ||
1885 | EOF | EOF |
# | Line 1828 THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSD | Line 1891 THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSD |
1891 | ||
1892 | EXECUTABLE=${EXECUTABLE:-mitgcmuv} | EXECUTABLE=${EXECUTABLE:-mitgcmuv} |
1893 | ||
1894 | # Set Standard Code Directories: | |
1895 | if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then | |
1896 | STANDARDDIRS="eesupp model" | |
1897 | fi | |
1898 | # if model in Standard-Code-Dir, add eesupp (needed to compile model) | |
1899 | echo " $STANDARDDIRS " | grep ' model ' > /dev/null 2>&1 | |
1900 | ckM=$? | |
1901 | echo " $STANDARDDIRS " | grep ' eesupp ' > /dev/null 2>&1 | |
1902 | ckE=$? | |
1903 | if test $ckM = 0 -a $ckE = 1 ; then | |
1904 | STANDARDDIRS="$STANDARDDIRS eesupp" | |
1905 | fi | |
1906 | ||
1907 | # We have a special set of source files in eesupp/src which are | # We have a special set of source files in eesupp/src which are |
1908 | # generated from some template source files. We'll make them first so | # generated from some template source files. We'll make them first so |
1909 | # they appear as regular source code | # they appear as regular source code |
1910 | if test -r $ROOTDIR"/eesupp/src/Makefile" ; then | if test -r $ROOTDIR"/eesupp/src/Makefile" ; then |
1911 | echo " Making source files in eesupp from templates" | echo " Making source files in eesupp from templates" |
1912 | ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1 | ( cd $ROOTDIR"/eesupp/src/" && $MAKE clean_old && $MAKE \ |
1913 | ) > make_eesupp.errors 2>&1 | |
1914 | RETVAL=$? | RETVAL=$? |
1915 | if test "x${RETVAL}" = x0 ; then | if test "x${RETVAL}" = x0 ; then |
1916 | rm -f make_eesupp.errors | rm -f make_eesupp.errors |
# | Line 1848 fi | Line 1925 fi |
1925 | for pdir in exch2 regrid ; do | for pdir in exch2 regrid ; do |
1926 | if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then | if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then |
1927 | echo " Making source files in pkg/${pdir} from templates" | echo " Making source files in pkg/${pdir} from templates" |
1928 | ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE ) > make_${pdir}.errors 2>&1 | ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE clean_old && $MAKE \ |
1929 | ) > make_${pdir}.errors 2>&1 | |
1930 | RETVAL=$? | RETVAL=$? |
1931 | if test "x${RETVAL}" = x0 ; then | if test "x${RETVAL}" = x0 ; then |
1932 | rm -f make_${pdir}.errors | rm -f make_${pdir}.errors |
# | Line 1861 for pdir in exch2 regrid ; do | Line 1939 for pdir in exch2 regrid ; do |
1939 | done | done |
1940 | ||
1941 | printf "\n=== Determining package settings ===\n" | printf "\n=== Determining package settings ===\n" |
1942 | if test "x${PDEPEND}" = x ; then | if test "x${PKG_DEPEND}" = x ; then |
1943 | tmp=$ROOTDIR"/pkg/pkg_depend" | tmp=$ROOTDIR"/pkg/pkg_depend" |
1944 | if test -r $tmp ; then | if test -r $tmp ; then PKG_DEPEND=$tmp ; fi |
1945 | PDEPEND=$tmp | fi |
1946 | else | if test "x${PKG_DEPEND}" = x ; then |
1947 | echo "Warning: No package dependency information was specified." | echo "Warning: No package dependency information was specified." |
1948 | echo " Please check that ROOTDIR/pkg/pkg_depend exists." | echo " Please check that ROOTDIR/pkg/pkg_depend exists." |
fi | ||
1949 | else | else |
1950 | if test ! -r ${PDEPEND} ; then | if test ! -r ${PKG_DEPEND} ; then |
1951 | echo "Error: can't read package dependency info from PDEPEND=\"$PDEPEND\"" | echo "Error: can't read package dependency info from PKG_DEPEND=\"$PKG_DEPEND\"" |
1952 | exit 1 | exit 1 |
1953 | fi | fi |
1954 | echo " getting package dependency info from $PKG_DEPEND" | |
1955 | # Strip the comments and then convert the dependency file into arrays: PNAME, DNAME | |
1956 | get_pdepend_list $PKG_DEPEND | |
1957 | fi | fi |
1958 | echo " getting package dependency info from $PDEPEND" | |
1959 | # Strip the comments and then convert the dependency file into | # A default package groups file "$ROOTDIR/pkg/pkg_groups" is provided |
1960 | # two arrays: PNAME, DNAME | # to define the "default_pkg_list" and package groups (for convenience, one |
1961 | cat $PDEPEND | sed -e 's/#.*$//g' \ | # can specify a group of packages using names like "ocean" and "atmosphere"). |
1962 | | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \ | if test "x${PKG_GROUPS}" = x ; then |
1963 | > ./.pd_tmp | tmp=$ROOTDIR"/pkg/pkg_groups" |
1964 | RETVAL=$? | if test -r $tmp ; then PKG_GROUPS=$tmp ; fi |
1965 | if test ! "x${RETVAL}" = x0 ; then | fi |
1966 | echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\"" | if test "x${PKG_GROUPS}" = x ; then |
1967 | exit 1 | echo "Warning: No package groups information was specified." |
1968 | echo " Please check that ROOTDIR/pkg/pkg_groups exists." | |
1969 | else | |
1970 | if test ! -r ${PKG_GROUPS} ; then | |
1971 | echo "Error: can't read package groups info from PKG_GROUPS=\"$PKG_GROUPS\"" | |
1972 | exit 1 | |
1973 | fi | |
1974 | echo " getting package groups info from $PKG_GROUPS" | |
1975 | fi | fi |
. ./.pd_tmp | ||
rm -f ./.pd_tmp | ||
1976 | ||
1977 | # Search for default packages. Note that a "$ROOTDIR/pkg/pkg_groups" | # Search for packages to compile. |
1978 | # file should eventually be added so that, for convenience, one can | echo " checking list of packages to compile:" |
1979 | # specify groups of packages using names like "ocean" and "atmosphere". | PKG_LIST= |
1980 | echo " checking default package list: " | if test "x${PKG_LIST}" = x ; then |
if test "x${PDEFAULT}" = x ; then | ||
1981 | for i in "." $MODS ; do | for i in "." $MODS ; do |
1982 | if test -r $i"/packages.conf" ; then | if test -r $i"/packages.conf" ; then |
1983 | PDEFAULT=$i"/packages.conf" | PKG_LIST=$i"/packages.conf" |
1984 | break | break |
1985 | fi | fi |
1986 | done | done |
1987 | fi | fi |
1988 | if test "x${PDEFAULT}" = x ; then | if test "x${PKG_LIST}" = x ; then |
1989 | PDEFAULT="$ROOTDIR/pkg/pkg_default" | pkg_list='default_pkg_list' |
1990 | fi | if test "x${PKG_GROUPS}" = x ; then |
1991 | if test "x${PDEFAULT}" = xNONE ; then | echo "Error: need package groups info to expand pkg_list=\"$pkg_list\"" |
1992 | echo " default packages file disabled" | exit 1 |
1993 | fi | |
1994 | else | else |
1995 | if test ! -r $PDEFAULT ; then | if test ! -r $PKG_LIST ; then |
1996 | echo "Warning: can't read default packages from PDEFAULT=\"$PDEFAULT\"" | echo "Error: can't read package list from PKG_LIST=\"$PKG_LIST\"" |
1997 | exit 1 | |
1998 | else | else |
1999 | echo " using PDEFAULT=\"$PDEFAULT\"" | echo " using PKG_LIST=\"$PKG_LIST\"" |
2000 | # Strip the comments and add all the names | # Strip the comments and add all the names |
2001 | def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'` | pkg_list=`cat $PKG_LIST | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'` |
2002 | RETVAL=$? | RETVAL=$? |
2003 | if test "x${RETVAL}" != x0 ; then | if test "x${RETVAL}" != x0 ; then |
2004 | printf "Error: can't parse default package list " | printf "Error: can't parse package list " |
2005 | echo "-- please check PDEFAULT=\"$PDEFAULT\"" | echo "-- please check PKG_LIST=\"$PKG_LIST\"" |
2006 | exit 1 | exit 1 |
2007 | fi | fi |
for i in $def ; do | ||
PACKAGES="$PACKAGES $i" | ||
done | ||
echo " before group expansion packages are: $PACKAGES" | ||
RET=1 | ||
while test $RET = 1 ; do expand_pkg_groups; RET=$?; done | ||
echo " after group expansion packages are: $PACKAGES" | ||
2008 | fi | fi |
2009 | fi | fi |
2010 | for i in $pkg_list ; do | |
2011 | PACKAGES="$PACKAGES $i" | |
2012 | done | |
2013 | echo " before group expansion packages are:$PACKAGES" | |
2014 | if test "x${PKG_GROUPS}" != x ; then | |
2015 | RET=1 | |
2016 | while test $RET = 1 ; do expand_pkg_groups; RET=$?; done | |
2017 | echo " after group expansion packages are: $PACKAGES" | |
2018 | fi | |
2019 | ||
2020 | echo " applying DISABLE settings" | echo " applying DISABLE settings" |
2021 | echo "" > ./.tmp_pack | |
2022 | for i in $PACKAGES ; do | for i in $PACKAGES ; do |
2023 | echo $i >> ./.tmp_pack | echo $i >> ./.tmp_pack |
2024 | done | done |
# | Line 1957 PACKAGES="$PACKAGES $ENABLE" | Line 2046 PACKAGES="$PACKAGES $ENABLE" |
2046 | for i in $PACKAGES ; do | for i in $PACKAGES ; do |
2047 | j=`echo $i | sed 's/[-+]//'` | j=`echo $i | sed 's/[-+]//'` |
2048 | if test ! -d "$ROOTDIR/pkg/$j" ; then | if test ! -d "$ROOTDIR/pkg/$j" ; then |
2049 | echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\"" | echo "Error: dir '$ROOTDIR/pkg/$i' missing for package '$i'" |
2050 | exit 1 | exit 1 |
2051 | fi | fi |
2052 | echo $i >> ./.tmp_pack | echo $i >> ./.tmp_pack |
# | Line 1967 for i in `grep -v "-" ./.tmp_pack | sort | Line 2056 for i in `grep -v "-" ./.tmp_pack | sort |
2056 | PACKAGES="$PACKAGES $i" | PACKAGES="$PACKAGES $i" |
2057 | done | done |
2058 | rm -f ./.tmp_pack | rm -f ./.tmp_pack |
2059 | echo " packages are: $PACKAGES" | echo " packages are: $PACKAGES" |
2060 | ||
2061 | # Check for package MNC: if NetCDF is available, then build the MNC | # Check for package MNC: if NetCDF is available, then build the MNC |
2062 | # template files ; otherwise, delete mnc from the list of packages. | # template files ; otherwise, delete mnc from the list of packages. |
2063 | echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1 | echo " $PACKAGES " | grep ' mnc ' > /dev/null 2>&1 |
2064 | RETVAL=$? | mnc_in=$? |
2065 | if test "x$RETVAL" = x0 ; then | if test "x$HAVE_NETCDF" != xt ; then |
2066 | if test "x$HAVE_NETCDF" != xt ; then | if test "x$mnc_in" = x0 ; then |
2067 | cat <<EOF | cat <<EOF |
2068 | ********************************************************************* | ********************************************************************* |
2069 | WARNING: the "mnc" package was enabled but tests failed to compile | WARNING: the "mnc" package was enabled but tests failed to compile |
2070 | NetCDF applications. Please check that: | NetCDF applications. Please check that: |
2071 | ||
2072 | 1) NetCDF is correctly installed for this compiler and | 1) NetCDF is correctly installed for this compiler and |
2073 | 2) the LIBS variable (within the "optfile") specifies the correct | 2) the LIBS variable (within the "optfile") specifies the correct |
2074 | NetCDF library to link against. | NetCDF library to link against. |
2075 | ||
2076 | Due to this failure, the "mnc" package is now DISABLED. | Due to this failure, the "mnc" package is now DISABLED. |
2077 | ********************************************************************* | ********************************************************************* |
2078 | EOF | EOF |
2079 | PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'` | PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'` |
2080 | DISABLE="$DISABLE mnc" | DISABLE="$DISABLE mnc" |
2081 | else | else |
2082 | ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1 | # this prevent to add mnc (due to pdepend rules) if not available |
2083 | RETVAL=$? | DISABLE="$DISABLE mnc" |
2084 | if test "x${RETVAL}" = x0 ; then | fi |
2085 | rm -f make_mnc.errors | else |
2086 | # we have NetCDF, we try to build MNC template files | |
2087 | ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1 | |
2088 | RETVAL=$? | |
2089 | if test "x${RETVAL}" = x0 ; then | |
2090 | rm -f make_mnc.errors | |
2091 | else | |
2092 | echo "Error: problem encountered while building source files in pkg/mnc:" | |
2093 | cat make_mnc.errors 1>&2 | |
2094 | if test "x$mnc_in" = x0 ; then | |
2095 | exit 1 | |
2096 | else | else |
2097 | echo "Error: problem encountered while building source files in pkg/mnc:" | DISABLE="$DISABLE mnc" |
cat make_mnc.errors 1>&2 | ||
exit 1 | ||
2098 | fi | fi |
2099 | fi | fi |
2100 | fi | fi |
2101 | ||
2102 | # Check for package PROFILES: if NetCDF is not available, | # Check for package PROFILES: if NetCDF is not available, |
2103 | # then delete profiles from the list of available packages. | # then delete profiles from the list of available packages. |
2104 | echo $PACKAGES | grep ' profiles ' > /dev/null 2>&1 | if test "x$HAVE_NETCDF" != xt ; then |
2105 | RETVAL=$? | echo " $PACKAGES " | grep ' profiles ' > /dev/null 2>&1 |
2106 | if test "x$RETVAL" = x0 ; then | RETVAL=$? |
2107 | if test "x$HAVE_NETCDF" != xt ; then | if test "x$RETVAL" = x0 ; then |
2108 | cat <<EOF | cat <<EOF |
2109 | ********************************************************************* | ********************************************************************* |
2110 | WARNING: the "profiles" package was enabled but tests failed to | WARNING: the "profiles" package was enabled but tests failed to |
2111 | compile NetCDF applications. Please check that: | compile NetCDF applications. Please check that: |
2112 | ||
2113 | 1) NetCDF is correctly installed for this compiler and | 1) NetCDF is correctly installed for this compiler and |
2114 | 2) the LIBS variable (within the "optfile") specifies the correct | 2) the LIBS variable (within the "optfile") specifies the correct |
2115 | NetCDF library to link against. | NetCDF library to link against. |
2116 | ||
2117 | Due to this failure, the "profiles" package is now DISABLED. | Due to this failure, the "profiles" package is now DISABLED. |
2118 | ********************************************************************* | ********************************************************************* |
2119 | EOF | EOF |
2120 | PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'` | PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'` |
2121 | DISABLE="$DISABLE profiles" | DISABLE="$DISABLE profiles" |
2122 | else | |
2123 | # this prevent to add profiles (due to pdepend rules) if not available | |
2124 | DISABLE="$DISABLE profiles" | |
2125 | fi | fi |
2126 | fi | fi |
2127 | ||
2128 | echo " applying package dependency rules" | if test "x${PKG_DEPEND}" != x ; then |
2129 | ck= | echo " applying package dependency rules" |
2130 | while test "x$ck" != xtt ; do | ck= |
2131 | while test "x$ck" != xtt ; do | |
2132 | i=0 | i=0 |
2133 | # rtot=${#PNAME[@]} | # rtot=${#PNAME[@]} |
2134 | rtot=$nname | rtot=$nname |
# | Line 2047 while test "x$ck" != xtt ; do | Line 2144 while test "x$ck" != xtt ; do |
2144 | pin="t" | pin="t" |
2145 | fi | fi |
2146 | done | done |
2147 | # or in the current $STANDARDDIRS list? | |
2148 | for p in $STANDARDDIRS ; do | |
2149 | if test "x$p" = "x$pname" ; then pin="t" ; fi | |
2150 | done | |
2151 | ||
2152 | # Is the DNAME entry a (+) or (-) rule ? | # Is the DNAME entry a (+) or (-) rule ? |
2153 | tmp="dname=\"\$DNAME_$i\"" | tmp="dname=\"\$DNAME_$i\"" |
# | Line 2090 while test "x$ck" != xtt ; do | Line 2191 while test "x$ck" != xtt ; do |
2191 | # Do we need to get rid of $dname according to the dependency rules? | # Do we need to get rid of $dname according to the dependency rules? |
2192 | if test "x$pin" = xt -a "x$plus" = "x-" -a "x$din" = xt; then | if test "x$pin" = xt -a "x$plus" = "x-" -a "x$din" = xt; then |
2193 | echo "Error: can't satisfy package dependencies:" | echo "Error: can't satisfy package dependencies:" |
2194 | echo " \"$pname\" was requested but is disallowed by" | echo " \"$pname\" was requested but is disallowed by" |
2195 | echo " the dependency rules for \"$dname\"" | echo " the dependency rules for \"$dname\"" |
2196 | exit 1 | exit 1 |
2197 | fi | fi |
# | Line 2098 while test "x$ck" != xtt ; do | Line 2199 while test "x$ck" != xtt ; do |
2199 | #i=$(( $i + 1 )) | #i=$(( $i + 1 )) |
2200 | done | done |
2201 | ck=$ck"t" | ck=$ck"t" |
2202 | done | done |
2203 | echo " packages are: $PACKAGES" | echo " packages are: $PACKAGES" |
2204 | fi | |
2205 | for i in $PACKAGES ; do | for i in $PACKAGES ; do |
2206 | adr="$ROOTDIR/pkg/$i" | adr="$ROOTDIR/pkg/$i" |
2207 | if test -d $adr ; then | if test -d $adr ; then |
# | Line 2116 done | Line 2218 done |
2218 | ||
2219 | # Create a list of #define and #undef to enable/disable packages | # Create a list of #define and #undef to enable/disable packages |
2220 | PACKAGES_DOT_H=PACKAGES_CONFIG.h | PACKAGES_DOT_H=PACKAGES_CONFIG.h |
2221 | # The following UGLY HACK sets multiple "#undef"s and it needs to go | # The following UGLY HACK sets multiple "#undef"s and it needs to go |
2222 | # away. On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h | # away. On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h |
2223 | # file would eventually be split up so that all package-related #define | # file would eventually be split up so that all package-related #define |
2224 | # statements could be separated and handled only by genmake. | # statements could be separated and handled only by genmake. |
2225 | names=`ls -1 "$ROOTDIR/pkg"` | names=`ls -1 "$ROOTDIR/pkg"` |
# | Line 2145 for i in $PACKAGES ; do | Line 2247 for i in $PACKAGES ; do |
2247 | #eh3 DEFINES="$DEFINES -D$def" | #eh3 DEFINES="$DEFINES -D$def" |
2248 | ||
2249 | #EH3 WARNING : This is an UGLY HACK that needs to be removed!!! | #EH3 WARNING : This is an UGLY HACK that needs to be removed!!! |
2250 | case $i in | case $i in |
2251 | aim_v23) | aim_v23) |
2252 | ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM" | ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM" |
2253 | echo "Warning: ALLOW_AIM is set to enable aim_v23." | echo "Warning: ALLOW_AIM is set to enable aim_v23." |
# | Line 2155 for i in $PACKAGES ; do | Line 2257 for i in $PACKAGES ; do |
2257 | ||
2258 | done | done |
2259 | ||
2260 | echo " Adding STANDARDDIRS" | echo " Adding STANDARDDIRS='$STANDARDDIRS'" |
2261 | BUILDDIR=${BUILDDIR:-.} | BUILDDIR=${BUILDDIR:-.} |
if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then | ||
STANDARDDIRS="eesupp model" | ||
fi | ||
2262 | if test "x$STANDARDDIRS" != x ; then | if test "x$STANDARDDIRS" != x ; then |
2263 | for d in $STANDARDDIRS ; do | for d in $STANDARDDIRS ; do |
2264 | adr="$ROOTDIR/$d/src" | adr="$ROOTDIR/$d/src" |
# | Line 2214 fi | Line 2313 fi |
2313 | ||
2314 | # Here, we build the list of files to be "run through" the adjoint | # Here, we build the list of files to be "run through" the adjoint |
2315 | # compiler. | # compiler. |
2316 | if test -f ./ad_files ; then | if test -f ./adSrcFiles.tmp ; then |
2317 | rm -f ./ad_files | rm -f ./adSrcFiles.tmp |
2318 | fi | fi |
2319 | echo " Creating the list of files for the adjoint compiler." | echo " Creating the list of files for the adjoint compiler." |
2320 | touch adSrcFiles.tmp | |
2321 | for i in $SOURCEDIRS ; do | for i in $SOURCEDIRS ; do |
2322 | list_files=`( cd $i && ls -1 *.list 2>/dev/null )` | list_files=`( cd $i && ls -1 *.list 2>/dev/null )` |
2323 | for j in $list_files ; do | for j in $list_files ; do |
2324 | cat $i/$j >> ad_files | cat $i/$j >> adSrcFiles.tmp |
2325 | done | done |
2326 | done | done |
2327 | if test ! "x"$FS = "x.f" ; then | if test ! "x"$FS = "x.f" ; then |
2328 | cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f | cat adSrcFiles.tmp | sed -e "s/\.f/.$FS/g" > adSrcFiles.tmp_f |
2329 | mv -f ad_files_f ad_files | mv -f adSrcFiles.tmp_f adSrcFiles.tmp |
2330 | fi | fi |
2331 | ||
2332 | echo | echo |
# | Line 2250 if test ! "x$DIVA" = x ; then | Line 2350 if test ! "x$DIVA" = x ; then |
2350 | fi | fi |
2351 | MPIINCLUDEDIR='$MPIHOME/include' | MPIINCLUDEDIR='$MPIHOME/include' |
2352 | fi | fi |
2353 | ||
2354 | if test -r $MPIINCLUDEDIR/mpif.h ; then | if test -r $MPIINCLUDEDIR/mpif.h ; then |
2355 | for i in $MPI_HEADER_FILES; do | for i in $MPI_HEADER_FILES; do |
2356 | cp -p $MPIINCLUDEDIR/$i ./mpi_headers | cp -p $MPIINCLUDEDIR/$i ./mpi_headers |
# | Line 2284 if test ! -r ".links.tmp/foo" ; then | Line 2384 if test ! -r ".links.tmp/foo" ; then |
2384 | exit 1 | exit 1 |
2385 | fi | fi |
2386 | rm -f .links.tmp/foo | rm -f .links.tmp/foo |
2387 | ||
2388 | if test "x$OPENAD" != x ; then | |
2389 | OAD_DONT_COMPILE="/dev/null" | |
2390 | OAD_DONT_TRANSFORM="/dev/null" | |
2391 | OAD_KEEP_ORIGINAL="/dev/null" | |
2392 | OAD_CB2M_FILES="/dev/null" | |
2393 | echo " looking for dontCompile file: " | |
2394 | for i in "." $MODS ; do | |
2395 | if test -r $i"/dontCompile" ; then | |
2396 | OAD_DONT_COMPILE=$i"/dontCompile" | |
2397 | echo " found $OAD_DONT_COMPILE" | |
2398 | break | |
2399 | fi | |
2400 | done | |
2401 | echo " looking for dontTransform file: " | |
2402 | for i in "." $MODS ; do | |
2403 | if test -r $i"/dontTransform" ; then | |
2404 | OAD_DONT_TRANSFORM=$i"/dontTransform" | |
2405 | echo " found $OAD_DONT_TRANSFORM" | |
2406 | break | |
2407 | fi | |
2408 | done | |
2409 | echo " looking for keepOriginal file: " | |
2410 | for i in "." $MODS ; do | |
2411 | if test -r $i"/keepOriginal" ; then | |
2412 | OAD_KEEP_ORIGINAL=$i"/keepOriginal" | |
2413 | echo " found $OAD_KEEP_ORIGINAL" | |
2414 | break | |
2415 | fi | |
2416 | done | |
2417 | echo " looking for cb2mFiles: " | |
2418 | for i in "." $MODS ; do | |
2419 | if test -r $i"/cb2mFiles" ; then | |
2420 | OAD_CB2M_FILES=$i"/cb2mFiles" | |
2421 | echo " found $OAD_CB2M_FILES" | |
2422 | break | |
2423 | fi | |
2424 | done | |
2425 | echo " OpenAD exceptions: " | |
2426 | fi | |
2427 | ||
2428 | echo "# This section creates symbolic links" > srclinks.tmp | echo "# This section creates symbolic links" > srclinks.tmp |
2429 | echo "" >> srclinks.tmp | echo "" >> srclinks.tmp |
2430 | printf 'SRCFILES = ' > srclist.inc | printf 'F77_SRC_FILES = ' > F77srclist.tmp |
2431 | printf 'CSRCFILES = ' > csrclist.inc | printf 'NON_AD_F77_SRC_FILES = ' > nonADF77srclist.tmp |
2432 | printf 'F90SRCFILES = ' > f90srclist.inc | printf 'C_SRC_FILES = ' > csrclist.tmp |
2433 | printf 'HEADERFILES = ' > hlist.inc | printf 'F90_SRC_FILES = ' > F90srclist.tmp |
2434 | printf 'AD_FLOW_FILES = ' > ad_flow_files.inc | printf 'H_SRC_FILES = ' > hsrclist.tmp |
2435 | printf 'AD_FLOW_FILES = ' > ad_flow_files.tmp | |
2436 | alldirs="$SOURCEDIRS $INCLUDEDIRS ." | alldirs="$SOURCEDIRS $INCLUDEDIRS ." |
2437 | for d in $alldirs ; do | for d in $alldirs ; do |
2438 | deplist= | deplist= |
2439 | sfiles=`( cd $d; echo *.[h,c,F] *.flow )` | sfiles=`( cd $d; echo *.[h,c,F] *.flow )` |
2440 | sfiles=`( echo $sfiles; cd $d; echo *.F90 )` | sfiles=`( echo $sfiles; cd $d; echo *.F90 )` |
2441 | if test "x$OPENAD" != x ; then | |
2442 | sfiles=`( echo $sfiles | grep -v _cb2m\. )` | |
2443 | fi | |
2444 | for sf in $sfiles ; do | for sf in $sfiles ; do |
2445 | if test ! -r ".links.tmp/$sf" ; then | if test ! -r ".links.tmp/$sf" ; then |
2446 | if test -f "$d/$sf" ; then | if test -f "$d/$sf" ; then |
# | Line 2330 for d in $alldirs ; do | Line 2475 for d in $alldirs ; do |
2475 | if test "x$ignore_f" = xf ; then | if test "x$ignore_f" = xf ; then |
2476 | extn=`echo $sf | $AWK -F. '{print $NF}'` | extn=`echo $sf | $AWK -F. '{print $NF}'` |
2477 | case $extn in | case $extn in |
2478 | F) | F) |
2479 | echo " \\" >> srclist.inc | echo " \\" >> F77srclist.tmp |
2480 | printf " $sf" >> srclist.inc | printf " $sf" >> F77srclist.tmp |
2481 | ;; | if test "x$OPENAD" != x ; then |
2482 | F90) | basename=${sf%%.F} |
2483 | echo " \\" >> f90srclist.inc | isAD=`egrep ^$basename.f'[ ]*' adSrcFiles.tmp` |
2484 | printf " $sf" >> f90srclist.inc | if test -z "$isAD" ; then |
2485 | ;; | toBeIgnored=`egrep ^$basename'[ ]*' ${OAD_DONT_COMPILE}` |
2486 | c) | if test -z "$toBeIgnored" ; then |
2487 | echo " \\" >> csrclist.inc | echo " \\" >> nonADF77srclist.tmp |
2488 | printf " $sf" >> csrclist.inc | printf " $sf" >> nonADF77srclist.tmp |
2489 | ;; | else |
2490 | h) | echo " not to be compiled : $sf" |
2491 | echo " \\" >> hlist.inc | fi |
2492 | printf " $sf" >> hlist.inc | else # file is initially listed as an AD file we want to exclude it |
2493 | ;; | # or we want to retain the untransformed version |
2494 | flow) | notToBeTransformed=`egrep ^$basename'[ ]*' ${OAD_DONT_TRANSFORM}` |
2495 | echo " \\" >> ad_flow_files.inc | untransformedVersionToBeKept=`egrep ^$basename'[ ]*' ${OAD_KEEP_ORIGINAL}` |
2496 | printf " $sf" >> ad_flow_files.inc | if test -n "$notToBeTransformed"; then |
2497 | ;; | echo " not to be transformed: $sf" |
2498 | esac | fi |
2499 | fi | if test -n "$untransformedVersionToBeKept" ; then |
2500 | echo " original to be kept : $sf" | |
2501 | fi | |
2502 | if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then | |
2503 | echo " \\" >> nonADF77srclist.tmp | |
2504 | printf " $sf" >> nonADF77srclist.tmp | |
2505 | fi | |
2506 | fi | |
2507 | fi | |
2508 | ;; | |
2509 | F90) | |
2510 | echo " \\" >> F90srclist.tmp | |
2511 | printf " $sf" >> F90srclist.tmp | |
2512 | ;; | |
2513 | c) | |
2514 | echo " \\" >> csrclist.tmp | |
2515 | printf " $sf" >> csrclist.tmp | |
2516 | ;; | |
2517 | h) | |
2518 | echo " \\" >> hsrclist.tmp | |
2519 | printf " $sf" >> hsrclist.tmp | |
2520 | ;; | |
2521 | flow) | |
2522 | echo " \\" >> ad_flow_files.tmp | |
2523 | printf " $sf" >> ad_flow_files.tmp | |
2524 | ;; | |
2525 | esac | |
2526 | fi | |
2527 | fi | fi |
2528 | fi | fi |
2529 | done | done |
2530 | if test "x$deplist" != x ; then | if test "x$deplist" != x ; then |
2531 | echo "" >> srclinks.tmp | if test "$d" != "." ; then |
2532 | echo "" >> srclinks.tmp | |
2533 | echo "# These files are linked from $d" >> srclinks.tmp | echo "# These files are linked from $d" >> srclinks.tmp |
2534 | echo "$deplist :" >> srclinks.tmp | echo "$deplist :" >> srclinks.tmp |
2535 | printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp | # We need to make sure that the link isn't already there. |
2536 | # This may happen when make thinks that a header file has to be "remade" | |
2537 | # because a module it depends on has changed. In this case we do nothing. | |
2538 | printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $d >> srclinks.tmp | |
2539 | fi | |
2540 | fi | fi |
2541 | done | done |
2542 | rm -rf .links.tmp | rm -rf .links.tmp |
2543 | echo "" >> srclist.inc | echo "" >> F77srclist.tmp |
2544 | echo "" >> csrclist.inc | echo "" >> nonADF77srclist.tmp |
2545 | echo "" >> f90srclist.inc | echo "" >> csrclist.tmp |
2546 | echo "" >> hlist.inc | echo "" >> F90srclist.tmp |
2547 | echo "" >> ad_flow_files.inc | echo "" >> hsrclist.tmp |
2548 | echo "" >> ad_flow_files.tmp | |
2549 | ||
2550 | CMDLINE=$0 | |
2551 | for xx in "$@" ; do nw=`echo $xx | wc -w` | |
2552 | if test $nw = '1' ; then CMDLINE="$CMDLINE $xx" | |
2553 | else CMDLINE="$CMDLINE '$xx'" ; fi | |
2554 | done | |
2555 | ||
2556 | if test -f $MAKEFILE ; then | if test -f $MAKEFILE ; then |
2557 | mv -f $MAKEFILE "$MAKEFILE.bak" | mv -f $MAKEFILE "$MAKEFILE.old" |
2558 | fi | fi |
2559 | echo " Writing makefile: $MAKEFILE" | echo " Writing makefile: $MAKEFILE" |
2560 | echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE | echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE |
# | Line 2378 echo "# $MACHINE" >> $MAKEFILE | Line 2562 echo "# $MACHINE" >> $MAKEFILE |
2562 | echo "# This makefile was generated automatically on" >> $MAKEFILE | echo "# This makefile was generated automatically on" >> $MAKEFILE |
2563 | echo "# $THISDATE" >> $MAKEFILE | echo "# $THISDATE" >> $MAKEFILE |
2564 | echo "# by the command:" >> $MAKEFILE | echo "# by the command:" >> $MAKEFILE |
2565 | echo "# $0 $G2ARGS" >> $MAKEFILE | echo "# $CMDLINE" >> $MAKEFILE |
2566 | echo "# executed by:" >> $MAKEFILE | echo "# executed by:" >> $MAKEFILE |
2567 | echo "# ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE | echo "# ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE |
2568 | ||
# | Line 2389 EXE_SVD=$EXECUTABLE"_svd" | Line 2573 EXE_SVD=$EXECUTABLE"_svd" |
2573 | cat >>$MAKEFILE <<EOF | cat >>$MAKEFILE <<EOF |
2574 | # | # |
2575 | # OPTFILE="$OPTFILE" | # OPTFILE="$OPTFILE" |
2576 | # | # |
2577 | # BUILDDIR : Directory where object files are written | # BUILDDIR : Directory where object files are written |
2578 | # SOURCEDIRS : Directories containing the source (.F) files | # SOURCEDIRS : Directories containing the source (.F) files |
2579 | # INCLUDEDIRS : Directories containing the header-source (.h) files | # INCLUDEDIRS : Directories containing the header-source (.h) files |
# | Line 2409 cat >>$MAKEFILE <<EOF | Line 2593 cat >>$MAKEFILE <<EOF |
2593 | # LIBS : Library flags /or/ additional optimization/debugging flags | # LIBS : Library flags /or/ additional optimization/debugging flags |
2594 | ||
2595 | ROOTDIR = ${ROOTDIR} | ROOTDIR = ${ROOTDIR} |
2596 | BUILDDIR = ${BUILDDIR} | BUILDDIR = ${BUILDDIR} |
2597 | SOURCEDIRS = ${SOURCEDIRS} | SOURCEDIRS = ${SOURCEDIRS} |
2598 | INCLUDEDIRS = ${INCLUDEDIRS} | INCLUDEDIRS = ${INCLUDEDIRS} |
2599 | EXEDIR = ${EXEDIR} | EXEDIR = ${EXEDIR} |
# | Line 2435 else | Line 2619 else |
2619 | echo "EMBEDDED_FILES = " >>$MAKEFILE | echo "EMBEDDED_FILES = " >>$MAKEFILE |
2620 | fi | fi |
2621 | ||
# Note: figure out some way to add Hyades JAM libraries here | ||
2622 | cat >>$MAKEFILE <<EOF | cat >>$MAKEFILE <<EOF |
2623 | # Unix ln (link) | # Unix ln (link) |
2624 | LN = ${LN} | LN = ${LN} |
# | Line 2467 FOPTIM = ${FOPTIM} | Line 2650 FOPTIM = ${FOPTIM} |
2650 | # Optim./debug for FC | # Optim./debug for FC |
2651 | F90FLAGS = ${F90FLAGS} | F90FLAGS = ${F90FLAGS} |
2652 | F90OPTIM = ${F90OPTIM} | F90OPTIM = ${F90OPTIM} |
2653 | F90FIXEDFORMAT = ${F90FIXEDFORMAT} | |
2654 | # Flags for CC | # Flags for CC |
2655 | CFLAGS = ${CFLAGS} | CFLAGS = ${CFLAGS} |
2656 | # Files that should not be optimized | # Files that should not be optimized |
# | Line 2474 NOOPTFILES = ${NOOPTFILES} | Line 2658 NOOPTFILES = ${NOOPTFILES} |
2658 | NOOPTFLAGS = ${NOOPTFLAGS} | NOOPTFLAGS = ${NOOPTFLAGS} |
2659 | # Flags and libraries needed for linking | # Flags and libraries needed for linking |
2660 | LIBS = ${LIBS} | LIBS = ${LIBS} |
2661 | # Name of the Mekfile | # Name of the makefile |
2662 | MAKEFILE=${MAKEFILE} | MAKEFILE=${MAKEFILE} |
2663 | ||
2664 | EOF | EOF |
2665 | ||
2666 | cat srclist.inc >> $MAKEFILE | cat F77srclist.tmp >> $MAKEFILE |
2667 | cat csrclist.inc >> $MAKEFILE | cat nonADF77srclist.tmp >> $MAKEFILE |
2668 | cat f90srclist.inc >> $MAKEFILE | cat csrclist.tmp >> $MAKEFILE |
2669 | cat hlist.inc >> $MAKEFILE | cat F90srclist.tmp >> $MAKEFILE |
2670 | cat ad_flow_files.inc >> $MAKEFILE | cat hsrclist.tmp >> $MAKEFILE |
2671 | cat ad_flow_files.tmp >> $MAKEFILE | |
2672 | ||
2673 | rm -f F77srclist.tmp nonADF77srclist.tmp csrclist.tmp F90srclist.tmp hsrclist.tmp ad_flow_files.tmp | |
2674 | ||
2675 | echo >> $MAKEFILE | echo >> $MAKEFILE |
2676 | echo 'F77FILES = $(SRCFILES:.F=.'$FS')' >> $MAKEFILE | |
2677 | echo 'F90FILES = $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE | # add definitions for preprocessed sources |
2678 | echo 'OBJFILES = $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE | # and note that not all systems allow case sensitive extensions |
2679 | # hence the $FS and $FS90 here. | |
2680 | # for fixed format f90 files we use ff90 or FF90 resp | |
2681 | # but these are not expected to be the original source files | |
2682 | ||
2683 | echo 'F77_PP_SRC_FILES = $(F77_SRC_FILES:.F=.'$FS')' >> $MAKEFILE | |
2684 | echo 'F90_PP_SRC_FILES = $(F90_SRC_FILES:.F90=.'$FS90')' >> $MAKEFILE | |
2685 | echo 'OBJFILES= $(F77_SRC_FILES:.F=.o) $(C_SRC_FILES:.c=.o) $(F90_SRC_FILES:.F90=.o)' >> $MAKEFILE | |
2686 | echo 'FLOFILES = $(AD_FLOW_FILES:.flow=.flowdir)' >> $MAKEFILE | |
2687 | echo >> $MAKEFILE | echo >> $MAKEFILE |
2688 | echo '.SUFFIXES:' >> $MAKEFILE | echo '.SUFFIXES:' >> $MAKEFILE |
2689 | echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE | echo '.SUFFIXES: .o .'$FS' .p .F .c .f'$FS90' .'$FS90' .FF90 .F90 .flowdir .flow' >> $MAKEFILE |
rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc | ||
rm -f ad_flow_files.inc | ||
2690 | ||
2691 | cat >>$MAKEFILE <<EOF | cat >>$MAKEFILE <<EOF |
2692 | ||
2693 | all: \$(EXECUTABLE) | all: \$(EXECUTABLE) |
2694 | \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES) \$(EMBEDDED_FILES) | \$(EXECUTABLE): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(OBJFILES) \$(EMBEDDED_FILES) |
2695 | @echo Creating \$@ ... | @echo Creating \$@ ... |
2696 | \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS) | \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS) |
2697 | ||
2698 | depend: | depend: |
2699 | @make links | @make -f \$(MAKEFILE) links |
2700 | \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES) | \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES) |
2701 | \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE) | \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE) |
2702 | -rm -f makedepend.out | -rm -f makedepend.out |
2703 | ||
# | Line 2512 libmitgcmuv.a: \$(OBJFILES) | Line 2707 libmitgcmuv.a: \$(OBJFILES) |
2707 | ar rcv libmitgcmuv.a \$(OBJFILES) | ar rcv libmitgcmuv.a \$(OBJFILES) |
2708 | ar d libmitgcmuv.a main.o | ar d libmitgcmuv.a main.o |
2709 | ||
2710 | links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES) | obj: \$(OBJFILES) |
2711 | ||
2712 | small_f: \$(F77FILES) \$(F90FILES) | links: \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(SPECIAL_FILES) |
2713 | ||
2714 | small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES) | |
2715 | ||
2716 | output.txt: \$(EXECUTABLE) | output.txt: \$(EXECUTABLE) |
2717 | @printf 'running ... ' | @printf 'running ... ' |
2718 | @\$(EXECUTABLE) > \$@ | @\$(EXECUTABLE) > \$@ |
2719 | ||
2720 | # remove most of the files that "make" generates | |
2721 | clean: | clean: |
2722 | -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template | -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template |
2723 | -rm -rf *.o | -rm -rf *.o |
2724 | -rm -rf *.$FS | -rm -rf *.$FS *.flowdir |
2725 | -rm -rf *.f$FS90 \$(AD_CLEAN) ad_input* | |
2726 | ||
2727 | # remove most of the files that "make" and "make depend" generate | |
2728 | Clean: | Clean: |
2729 | @make clean | @make -f \$(MAKEFILE) clean |
2730 | @make cleanlinks | @make -f \$(MAKEFILE) cleanlinks |
2731 | -rm -f \$(SPECIAL_FILES) | -rm -f \$(SPECIAL_FILES) f90mkdepend.log $MAKEFILE.old |
2732 | -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak | -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log |
2733 | -rm -f genmake_warnings genmake_errors make.log | |
2734 | ||
2735 | # remove also the executable, files that "genmake2" generates (except Makefile) | |
2736 | # and output from a run (plus log files from testreport) | |
2737 | CLEAN: | CLEAN: |
2738 | @make Clean | @make -f \$(MAKEFILE) Clean |
2739 | -rm -f \$(EXECUTABLE) \$(EXE_AD) *.bak | |
2740 | -rm -f $LOGFILE genmake_state genmake_*optfile | |
2741 | -rm -f SIZE.h.mpi genmake.tr_log make.tr_log | |
2742 | -find \$(EXEDIR) -name "*.meta" -exec rm {} \; | -find \$(EXEDIR) -name "*.meta" -exec rm {} \; |
2743 | -find \$(EXEDIR) -name "*.data" -exec rm {} \; | -find \$(EXEDIR) -name "*.data" -exec rm {} \; |
2744 | -find \$(EXEDIR) -name "fort.*" -exec rm {} \; | -find \$(EXEDIR) -name "fort.*" -exec rm {} \; |
2745 | -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime | -rm -f *.txt STD* *diagnostics.log datetime |
2746 | -rm -f *_MIT_CE_000.opt0000 costfunction*0000 | |
2747 | -rm -rf mnc_test_* | -rm -rf mnc_test_* |
2748 | ||
#eh3 Makefile: makefile | ||
2749 | makefile: | makefile: |
2750 | $THIS_SCRIPT $G2ARGS | $THIS_SCRIPT $G2ARGS |
2751 | cleanlinks: | cleanlinks: |
2752 | -find . -type l -exec rm {} \; | -find . -type l -exec rm {} \; |
2753 | ||
2754 | # Special targets (SPECIAL_FILES) which are create by make | # Special targets (SPECIAL_FILES) which are created by make |
2755 | ${PACKAGES_DOT_H}: | ${PACKAGES_DOT_H}: |
2756 | @echo Creating \$@ ... | @echo Creating \$@ ... |
2757 | @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@ | @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@ |
# | Line 2568 if test "x$EMBED_SRC" = xt ; then | Line 2776 if test "x$EMBED_SRC" = xt ; then |
2776 | ||
2777 | decode_files.o : EMBEDDED_FILES.h | decode_files.o : EMBEDDED_FILES.h |
2778 | ||
2779 | ## \$(F77FILES) | ## \$(F77_PP_SRC_FILES) |
2780 | all_fF.tar.gz : \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile | all_fF.tar.gz : \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile |
2781 | @echo Creating \$@ ... | @echo Creating \$@ ... |
2782 | -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile | -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile |
2783 | -rm -f all_fF.tar.gz | -rm -f all_fF.tar.gz |
2784 | -gzip all_fF.tar | -gzip all_fF.tar |
2785 | ||
# | Line 2593 cat >>$MAKEFILE <<EOF | Line 2801 cat >>$MAKEFILE <<EOF |
2801 | \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ | \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ |
2802 | .$FS.o: | .$FS.o: |
2803 | \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$< | \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$< |
2804 | .F90.o: | .F.o: |
2805 | \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$< | |
2806 | .F90.$FS90: | |
2807 | \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ | |
2808 | .FF90.f$FS90: | |
2809 | \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ | |
2810 | .$FS90.o: | |
2811 | \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$< | \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$< |
2812 | .f$FS90.o: | |
2813 | cp \$< \$(basename \$<).f90 | |
2814 | \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$(F90FIXEDFORMAT) \$(basename \$<).f90 | |
2815 | .c.o: | .c.o: |
2816 | \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$< | \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$< |
2817 | .flow.flowdir: | |
2818 | \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ | |
2819 | ||
2820 | # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain | # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain |
2821 | .F.p: | .F.p: |
# | Line 2604 cat >>$MAKEFILE <<EOF | Line 2823 cat >>$MAKEFILE <<EOF |
2823 | .p.$FS: | .p.$FS: |
2824 | \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$< | \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$< |
2825 | ||
2826 | EOF | |
2827 | ||
2828 | #========================================= | #========================================= |
2829 | #=== Automatic Differentiation Rules === | #=== Automatic Differentiation Rules === |
2830 | #=== for TAMC/TAF ====================== | |
2831 | ||
2832 | if test "x$OPENAD" = x ; then | |
2833 | ||
2834 | cat >>$MAKEFILE <<EOF | |
2835 | ||
2836 | TAMC = ${TAMC} | TAMC = ${TAMC} |
2837 | TAF = ${TAF} | TAF = ${TAF} |
# | Line 2629 done | Line 2855 done |
2855 | echo " Add the source list for AD code generation" | echo " Add the source list for AD code generation" |
2856 | echo >> $MAKEFILE | echo >> $MAKEFILE |
2857 | printf "AD_FILES = " >> $MAKEFILE | printf "AD_FILES = " >> $MAKEFILE |
2858 | AD_FILES=`cat ad_files` | AD_FILES=`cat adSrcFiles.tmp` |
2859 | for i in $AD_FILES ; do | for i in $AD_FILES ; do |
2860 | echo " \\" >> $MAKEFILE | echo " \\" >> $MAKEFILE |
2861 | printf " $i" >> $MAKEFILE | printf " $i" >> $MAKEFILE |
2862 | done | done |
2863 | echo >> $MAKEFILE | echo >> $MAKEFILE |
2864 | rm -f ad_files | rm -f adSrcFiles.tmp |
2865 | ||
2866 | cat >>$MAKEFILE <<EOF | cat >>$MAKEFILE <<EOF |
2867 | ||
# | Line 2644 adall: \$(EXE_AD) | Line 2870 adall: \$(EXE_AD) |
2870 | adtaf: ad_taf_output.$FS | adtaf: ad_taf_output.$FS |
2871 | adtamc: ad_tamc_output.$FS | adtamc: ad_tamc_output.$FS |
2872 | ||
2873 | ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES) | ad_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES) \$(AD_FLOW_FILES) |
2874 | @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ad_config.template | @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ad_config.template |
2875 | cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h | cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h |
2876 | -rm -f ad_config.template | -rm -f ad_config.template |
2877 | @make \$(F77FILES) | @make -f \$(MAKEFILE) \$(F77_PP_SRC_FILES) |
2878 | @make \$(AD_FLOW_FILES) | @make -f \$(MAKEFILE) \$(FLOFILES) |
2879 | cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS | cat \$(FLOFILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS |
2880 | ||
2881 | ad_taf_output.$FS: ad_input_code.$FS | ad_taf_output.$FS: ad_input_code.$FS |
2882 | \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS | \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS |
2883 | ls -l ad_input_code_ad.$FS | |
2884 | cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS | cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS |
2885 | ||
2886 | adtafonly: | adtafonly: |
2887 | \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS | \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS |
2888 | ls -l ad_input_code_ad.$FS | |
2889 | cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS | cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS |
2890 | ||
2891 | \${EXE_AD}: ad_taf_output.o \$(OBJFILES) | \${EXE_AD}: ad_taf_output.o \$(OBJFILES) |
2892 | \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS) | \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS) |
2893 | ||
2894 | ad_tamc_output.$FS: ad_input_code.$FS | ad_tamc_output.$FS: ad_input_code.$FS |
2895 | \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS | \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS |
2896 | cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS | cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS |
2897 | ||
2898 | ad_tamc: ad_tamc_output.o \$(OBJFILES) | ad_tamc: ad_tamc_output.o \$(OBJFILES) |
2899 | \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS) | \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS) |
2900 | ||
2901 | adonlyfwd: | adonlyfwd: |
2902 | patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff | patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff |
2903 | ||
2904 | adtrick: | adtrick: |
2905 | patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff | patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff |
2906 | ||
2907 | adobj: ad_taf_output.o \$(OBJFILES) | |
2908 | ||
2909 | # ... FTL ... | # ... FTL ... |
2910 | ftlall: ftl_taf | ftlall: ftl_taf |
2911 | ftltaf: ftl_taf_output.$FS | ftltaf: ftl_taf_output.$FS |
2912 | ftltamc: ftl_tamc_output.$FS | ftltamc: ftl_tamc_output.$FS |
2913 | ||
2914 | ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES) | ftl_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES) |
2915 | @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ftl_config.template | @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ftl_config.template |
2916 | cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h | cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h |
2917 | -rm -f ftl_config.template | -rm -f ftl_config.template |
2918 | @make \$(F77FILES) | @make -f \$(MAKEFILE) \$(F77_PP_SRC_FILES) |
2919 | @make \$(AD_FLOW_FILES) | @make -f \$(MAKEFILE) \$(AD_FLOW_FILES) |
2920 | cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS | cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS |
2921 | ||
2922 | ftl_taf_output.$FS: ftl_input_code.$FS | ftl_taf_output.$FS: ftl_input_code.$FS |
2923 | \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS | \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS |
2924 | ls -l ftl_input_code_ftl.$FS | |
2925 | cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS | cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS |
2926 | ||
2927 | ftltafonly: | ftltafonly: |
2928 | \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS | \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS |
2929 | ls -l ftl_input_code_ftl.$FS | |
2930 | cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS | cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS |
2931 | ||
2932 | ftl_taf: ftl_taf_output.o \$(OBJFILES) | ftl_taf: ftl_taf_output.o \$(OBJFILES) |
2933 | \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS) | \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS) |
2934 | ||
2935 | ftl_tamc_output.$FS: ftl_input_code.$FS | ftl_tamc_output.$FS: ftl_input_code.$FS |
2936 | \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS | \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS |
2937 | cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.$FS | cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.$FS |
2938 | ||
2939 | ftl_tamc: ftl_tamc_output.o \$(OBJFILES) | ftl_tamc: ftl_tamc_output.o \$(OBJFILES) |
2940 | \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS) | \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS) |
2941 | ||
2942 | # ... SVD ... | # ... SVD ... |
2943 | svdtaf: ad_taf_output.$FS ftl_taf_output.$FS | svdtaf: ad_taf_output.$FS ftl_taf_output.$FS |
# | Line 2732 svd_touch: | Line 2963 svd_touch: |
2963 | cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h | cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h |
2964 | -rm -f ftl_config.template | -rm -f ftl_config.template |
2965 | ||
2966 | #========================================= | EOF |
2967 | ||
2968 | fi | |
2969 | ||
2970 | #=== for OpenAD ======================== | |
2971 | ||
2972 | if test "x$OPENAD" != x ; then | |
2973 | ||
2974 | # ============ begin OpenAD specific section ============== | |
2975 | ||
2976 | cat >>$MAKEFILE <<EOF | |
2977 | ||
2978 | # all the source files linked from the various locations: | |
2979 | ALL_LINKED_FILES= \ | |
2980 | \$(F77_SRC_FILES) \ | |
2981 | \$(C_SRC_FILES) \ | |
2982 | \$(H_SRC_FILES) \ | |
2983 | \$(F90_SRC_FILES) \ | |
2984 | \$(SPECIAL_FILES) | |
2985 | ||
2986 | ifndef OPENADROOT | |
2987 | \$(error "Error: environment variable OPENADROOT not defined!") | |
2988 | endif | |
2989 | ||
2990 | ifndef XAIFSCHEMAROOT | |
2991 | \$(error "Error: environment variable XAIFSCHEMAROOT not defined!") | |
2992 | endif | |
2993 | ||
2994 | ifndef XAIFBOOSTERROOT | |
2995 | \$(error "Error: environment variable XAIFBOOSTERROOT not defined!") | |
2996 | endif | |
2997 | ||
2998 | EOF | EOF |
2999 | ||
3000 | echo " Add the source list for common block to module conversion " | |
3001 | echo >> $MAKEFILE | |
3002 | printf "CB2M_F90_SRC_NAMES = " >> $MAKEFILE | |
3003 | for i in `cat ${OAD_CB2M_FILES}` ; do | |
3004 | echo " \\" >> $MAKEFILE | |
3005 | printf " $i" >> $MAKEFILE | |
3006 | done | |
3007 | echo >> $MAKEFILE | |
3008 | ||
3009 | echo " Add the source list for AD code generation" | |
3010 | echo >> $MAKEFILE | |
3011 | printf "AD_FILES = " >> $MAKEFILE | |
3012 | for i in `cat ${OAD_CB2M_FILES}` ; do | |
3013 | echo " \\" >> $MAKEFILE | |
3014 | printf " ${i}_mod.f$FS90" >> $MAKEFILE | |
3015 | done | |
3016 | AD_FILES=`cat adSrcFiles.tmp` | |
3017 | for i in $AD_FILES ; do | |
3018 | basename=${i%%.f} | |
3019 | toBeIgnored=`egrep ^$basename'[ ]*' ${OAD_DONT_COMPILE} ${OAD_DONT_TRANSFORM}` | |
3020 | if test -z "$toBeIgnored" ; then | |
3021 | echo " \\" >> $MAKEFILE | |
3022 | printf " $i" >> $MAKEFILE | |
3023 | fi | |
3024 | done | |
3025 | echo >> $MAKEFILE | |
3026 | rm -f adSrcFiles.tmp | |
3027 | ||
3028 | cat >>$MAKEFILE <<EOF | |
3029 | ||
3030 | adAll: \$(EXE_AD) | |
3031 | .PHONY: adAll | |
3032 | ||
3033 | CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES)) | |
3034 | ||
3035 | .PRECIOUS: \$(CB2M_F90_PP_SRC_FILES) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90) | |
3036 | ||
3037 | .PHONY: adDepend | |
3038 | adDepend: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(addsuffix _mod.FF90, \$(CB2M_F90_SRC_NAMES)) \$(F77_SRC_FILES:.F=_cb2m.FF90) | |
3039 | \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES) | |
3040 | \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE) | |
3041 | -rm -f makedepend.out | |
3042 | ||
3043 | OPENAD_SUPPORT_F90_SRC_FILES = \ | |
3044 | w2f__types.F90 \ | |
3045 | OAD_active.F90 \ | |
3046 | OAD_cp.F90 \ | |
3047 | OAD_rev.F90 \ | |
3048 | OAD_tape.F90 | |
3049 | ||
3050 | OPENAD_SUPPORT_C_SRC_FILES = \ | |
3051 | iaddr.c \ | |
3052 | timeRatio.c | |
3053 | ||
3054 | f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90) | |
3055 | cat \$^ > \$@ | |
3056 | ||
3057 | f95_test.f90: all_mods.xb.x2w.w2f.pp.f$FS90 \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90) ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90 | |
3058 | cat \$^ > \$@ | |
3059 | ||
3060 | f95_test.out: f95_test_mods.f90 f95_test.f90 | |
3061 | f95 -fixed -w=unused -maxcontin=132 -c f95_test_mods.f90 > \$@ 2>&1 | |
3062 | f95 -fixed -w=unused -maxcontin=132 -c -fixed f95_test.f90 >> \$@ 2>&1 | |
3063 | ||
3064 | # the file included below is created by the | |
3065 | # postProcessor and its inclusion sets the | |
3066 | # variable POSTPROCESSEDFILES | |
3067 | # used below. Because the file is made during | |
3068 | # make it won't be read until the second (recursive) | |
3069 | # invocation in the rule below | |
3070 | -include postProcess.make | |
3071 | ||
3072 | AD_OBJ_FILES_S1=\$(OPENAD_SUPPORT_F90_SRC_FILES:.F90=.o) \$(OPENAD_SUPPORT_C_SRC_FILES:.c=.o) \$(POSTPROCESSEDFILES:.f$FS90=.o) | |
3073 | ||
3074 | AD_OBJ_FILES_S2=\$(AD_OBJ_FILES_S1) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.o) \$(C_SRC_FILES:.c=.o) \$(F90_SRC_FILES:.F90=.o) | |
3075 | ||
3076 | postProcess.comp: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.tag \$(AD_OBJ_FILES_S1) | |
3077 | ifeq (\$(MAKELEVEL),0) | |
3078 | \$(MAKE) adAll | |
3079 | else | |
3080 | touch \$@ | |
3081 | endif | |
3082 | ||
3083 | \$(EXE_AD): \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.comp \$(AD_OBJ_FILES_S2) | |
3084 | ifeq (\$(MAKELEVEL),1) | |
3085 | \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(AD_OBJ_FILES_S2) \$(LIBS) | |
3086 | else | |
3087 | touch \$@ | |
3088 | endif | |
3089 | ||
3090 | # makefile debug rule | |
3091 | openad: ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90 | |
3092 | .PHONY: openad | |
3093 | ||
3094 | # create the module files | |
3095 | %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk | |
3096 | ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk | |
3097 | ||
3098 | # create the header files | |
3099 | %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk | |
3100 | ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES) | |
3101 | ||
3102 | # change everybody else to use the new module files: | |
3103 | %_cb2m.FF90 : %.F ../OAD_support/cb2mUseModules.bash | |
3104 | ../OAD_support/cb2mUseModules.bash $< ${MPI} | |
3105 | ||
3106 | # makefile debug rule | |
3107 | small_f: \$(CB2M_F90_PP_SRC_FILES) | |
3108 | .PHONY: small_f | |
3109 | ||
3110 | ad_output.txt: \$(EXE_AD) | |
3111 | @printf 'linking data files ... ' | |
3112 | \$(LN) -f ../input_ad/data* ../input_ad/eedata . | |
3113 | \$(LN) -f ../../global_ocean.90x40x15/input/*.bin . | |
3114 | @printf 'running ... ' | |
3115 | @./\$(EXE_AD) > \$@ | |
3116 | ||
3117 | CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS90) | |
3118 | ad_input_code.f$FS90: \$(CB2M_AD_FILES) | |
3119 | cat \$^ > \$@ | |
3120 | ||
3121 | # strip all comments and blanks to reduce | |
3122 | # the file size in order to reduce perl's memory requirements | |
3123 | ad_input_code_sf.f$FS90 : ad_input_code.f$FS90 | |
3124 | cat \$^ | sed -f ../OAD_support/strip.sed | sed -f ../OAD_support/stop2print.sed > \$@ | |
3125 | ||
3126 | # mfef90 preprocessing | |
3127 | # expand statement functions | |
3128 | # expose mfef90 specific substring handling | |
3129 | # add the w2f__types module | |
3130 | ad_input_code_sf.w2f.f$FS90: ad_input_code_sf.f$FS90 mfef90 whirl2f whirl2f_be w2f__types.f90 | |
3131 | ./mfef90 -r8 -z -F -N132 \$< | |
3132 | mv \$<.B \$(basename \$<).B | |
3133 | ./whirl2f -openad \$(basename \$<).B | |
3134 | cat w2f__types.f90 \$(basename \$<).w2f.f > \$@ | |
3135 | ||
3136 | # canonicalizer | |
3137 | ad_input_code_sf.w2f.pre.f$FS90: ad_input_code_sf.w2f.f$FS90 preProcess.py | |
3138 | ./preProcess.py --timing --r8 -H -S \$< -o \$@ | |
3139 | ||
3140 | # F -> WHIRL | |
3141 | # note that the canonicalized version cuts off at col 72 | |
3142 | # doing this also for string constants which is ok as long | |
3143 | # as we are in fixed mode and cut of exactly there. | |
3144 | # Otherwise mfef90 patches in spaces to fill up to 72 (or 132) | |
3145 | # characters respectively. | |
3146 | ad_input_code_sf.w2f.pre.B: ad_input_code_sf.w2f.pre.f$FS90 mfef90 | |
3147 | ./mfef90 -r8 -z -F \$< | |
3148 | mv \$<.B \$@ | |
3149 | ||
3150 | # WHIRL -> XAIF | |
3151 | ad_input_code_sf.w2f.pre.xaif : ad_input_code_sf.w2f.pre.B whirl2xaif | |
3152 | ./whirl2xaif -s -n --debug 1 -o \$@ \$< | |
3153 | ||
3154 | # XAIF -> XAIF' | |
3155 | ad_input_code_sf.w2f.pre.xb.xaif : ad_input_code_sf.w2f.pre.xaif xaif.xsd xaif_base.xsd xaif_inlinable_intrinsics.xsd xaif_derivative_propagator.xsd xaif_output.xsd oadDriver | |
3156 | ./oadDriver -f -t |