Parent Directory
|
Revision Log
|
Revision Graph
remove "BUILD_INFO.h" when out of date
1 | edhill | 1.86 | #! /usr/bin/env bash |
2 | edhill | 1.1 | # |
3 | jmc | 1.179 | # $Header: /u/gcmpack/MITgcm/tools/genmake2,v 1.178 2008/11/18 22:11:07 utke Exp $ |
4 | edhill | 1.1 | # |
5 | # Makefile generator for MITgcm UV codes | ||
6 | # created by cnh 03/98 | ||
7 | # adapted by aja 06/98 | ||
8 | # modified by aja 01/00 | ||
9 | # rewritten in bash by eh3 08/03 | ||
10 | |||
11 | edhill | 1.12 | # Search for particular CPP #cmds associated with packages |
12 | # usage: test_for_package_in_cpp_options CPP_file package_name | ||
13 | test_for_package_in_cpp_options() { | ||
14 | cpp_options=$1 | ||
15 | pkg=$2 | ||
16 | edhill | 1.146 | test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg[ ]" |
17 | test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg[ ]" | ||
18 | test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg[ ]" | ||
19 | test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg[ ]" | ||
20 | test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg$" | ||
21 | test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg$" | ||
22 | test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg$" | ||
23 | test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg$" | ||
24 | adcroft | 1.52 | } |
25 | |||
26 | # Search for particular CPP #cmds associated with MPI | ||
27 | # usage: test_for_mpi_in_cpp_eeoptions CPP_file | ||
28 | test_for_mpi_in_cpp_eeoptions() { | ||
29 | cpp_options=$1 | ||
30 | edhill | 1.146 | test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI[ ]" |
31 | test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI[ ]" | ||
32 | test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI[ ]" | ||
33 | test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI[ ]" | ||
34 | test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI$" | ||
35 | test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI$" | ||
36 | test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI$" | ||
37 | test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI$" | ||
38 | adcroft | 1.52 | } |
39 | |||
40 | # Search for particular string in a file. Return 1 if detected, 0 if not | ||
41 | # usage: test_for_string_in_file file string | ||
42 | test_for_string_in_file() { | ||
43 | file=$1 | ||
44 | strng=$2 | ||
45 | grep -i "$strng" $file > /dev/null 2>&1 | ||
46 | edhill | 1.12 | RETVAL=$? |
47 | if test "x${RETVAL}" = x0 ; then | ||
48 | edhill | 1.71 | printf "Error: In $file there is an illegal line: " |
49 | adcroft | 1.52 | grep -i "$strng" $file |
50 | edhill | 1.146 | exit 99 |
51 | edhill | 1.12 | fi |
52 | adcroft | 1.52 | return 0 |
53 | edhill | 1.12 | } |
54 | |||
55 | # Read the $ROOTDIR/pkg/pkg_groups file and expand any references to | ||
56 | # the package list. | ||
57 | expand_pkg_groups() { | ||
58 | new_packages= | ||
59 | PKG_GROUPS=$ROOTDIR"/pkg/pkg_groups" | ||
60 | if test -r $PKG_GROUPS ; then | ||
61 | cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > ./p1.tmp | ||
62 | edhill | 1.15 | cat ./p1.tmp | $AWK '(NF>2 && $2==":"){ print $0 }' > ./p2.tmp |
63 | edhill | 1.12 | matched=0 |
64 | for i in $PACKAGES ; do | ||
65 | line=`grep "^ *$i" ./p2.tmp` | ||
66 | RETVAL=$? | ||
67 | if test "x$RETVAL" = x0 ; then | ||
68 | matched=1 | ||
69 | edhill | 1.15 | replace=`echo $line | $AWK '{ $1=""; $2=""; print $0 }'` |
70 | edhill | 1.12 | echo " replacing \"$i\" with: $replace" |
71 | new_packages="$new_packages $replace" | ||
72 | else | ||
73 | new_packages="$new_packages $i" | ||
74 | fi | ||
75 | done | ||
76 | PACKAGES=$new_packages | ||
77 | rm -f ./p[1,2].tmp | ||
78 | adcroft | 1.74 | return $matched |
79 | edhill | 1.12 | else |
80 | echo "Warning: can't read package groups definition file: $PKG_GROUPS" | ||
81 | fi | ||
82 | } | ||
83 | edhill | 1.1 | |
84 | edhill | 1.75 | # Check for broken environments (eg. cygwin, MacOSX w/HFS+) that |
85 | # cannot distinguish [*.F/*.F90] from [*.f/*.f90] files. | ||
86 | check_for_broken_Ff() { | ||
87 | edhill | 1.76 | # Do we have defaults for $FS and/or $FS90 ? |
88 | tfs=f | ||
89 | tfs9=f90 | ||
90 | if test "x$FS" != x ; then | ||
91 | tfs="$FS" | ||
92 | fi | ||
93 | if test "x$FS90" != x ; then | ||
94 | tfs9="$FS90" | ||
95 | fi | ||
96 | |||
97 | edhill | 1.75 | # First check the ability to create a *.F/.f pair. |
98 | edhill | 1.76 | cat <<EOF >> genmake_hello.F |
99 | edhill | 1.75 | program hello |
100 | write(*,*) 'hi' | ||
101 | stop | ||
102 | end | ||
103 | EOF | ||
104 | edhill | 1.76 | cp genmake_hello.F "genmake_hello."$tfs > /dev/null 2>&1 |
105 | edhill | 1.75 | RETVAL=$? |
106 | if test "x$RETVAL" != x0 ; then | ||
107 | edhill | 1.76 | if test "x$FS" = x ; then |
108 | edhill | 1.77 | FS='for' |
109 | FS90='fr9' | ||
110 | edhill | 1.76 | check_for_broken_Ff |
111 | else | ||
112 | cat <<EOF 2>&1 | ||
113 | ERROR: Your file system cannot distinguish between *.F and *.f files | ||
114 | (fails the "cp" test) and this program cannot find a suitable | ||
115 | replacement extension. Please try a different build environment or | ||
116 | contact the <MITgcm-support@mitgcm.org> list for help. | ||
117 | |||
118 | EOF | ||
119 | exit -1 | ||
120 | fi | ||
121 | edhill | 1.75 | return |
122 | fi | ||
123 | edhill | 1.76 | rm -f genmake_hello.* |
124 | edhill | 1.75 | |
125 | edhill | 1.76 | # Check the ability of ${MAKE} and ${LN} to use the current set |
126 | # of extensions. | ||
127 | cat <<EOF >> genmake_hello.F | ||
128 | program hello | ||
129 | write(*,*) 'hi' | ||
130 | stop | ||
131 | end | ||
132 | EOF | ||
133 | edhill | 1.119 | test -f $MAKEFILE && mv -f $MAKEFILE $MAKEFILE".tst" |
134 | cat <<EOF >> $MAKEFILE | ||
135 | edhill | 1.75 | .SUFFIXES: |
136 | edhill | 1.101 | .SUFFIXES: .$tfs .F |
137 | .F.$tfs: | ||
138 | $LN \$< \$@ | ||
139 | edhill | 1.75 | EOF |
140 | edhill | 1.76 | $MAKE "genmake_hello."$tfs > /dev/null 2>&1 |
141 | edhill | 1.75 | RETVAL=$? |
142 | edhill | 1.88 | if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then |
143 | edhill | 1.76 | if test "x$FS" = x ; then |
144 | edhill | 1.77 | FS='for' |
145 | FS90='fr9' | ||
146 | edhill | 1.76 | check_for_broken_Ff |
147 | else | ||
148 | cat <<EOF 2>&1 | ||
149 | ERROR: Your file system cannot distinguish between *.F and *.f files | ||
150 | (fails the "make/ln" test) and this program cannot find a suitable | ||
151 | replacement extension. Please try a different build environment or | ||
152 | contact the <MITgcm-support@mitgcm.org> list for help. | ||
153 | |||
154 | EOF | ||
155 | exit -1 | ||
156 | return | ||
157 | fi | ||
158 | edhill | 1.75 | fi |
159 | edhill | 1.119 | rm -f genmake_hello.* $MAKEFILE |
160 | test -f $MAKEFILE".tst" && mv -f $MAKEFILE".tst" $MAKEFILE | ||
161 | edhill | 1.75 | |
162 | edhill | 1.76 | # If we make it here, use the extensions |
163 | FS=$tfs | ||
164 | FS90=$tfs9 | ||
165 | return | ||
166 | edhill | 1.75 | } |
167 | |||
168 | |||
169 | edhill | 1.84 | look_for_makedepend() { |
170 | adcroft | 1.33 | |
171 | edhill | 1.69 | # The "original" makedepend is part of the Imake system that is |
172 | # most often distributed with XFree86 or with an XFree86 source | ||
173 | # package. As a result, many machines (eg. generic Linux) do not | ||
174 | # have a system-default "makedepend" available. For those | ||
175 | # systems, we have two fall-back options: | ||
176 | # | ||
177 | # 1) a makedepend implementation shipped with the cyrus-imapd | ||
178 | # package: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/ | ||
179 | # | ||
180 | # 2) a known-buggy xmakedpend shell script | ||
181 | # | ||
182 | # So the choices are, in order: | ||
183 | # | ||
184 | # 1) use the user-specified program | ||
185 | # 2) use a system-wide default | ||
186 | # 3) locally build and use the cyrus implementation | ||
187 | # 4) fall back to the buggy local xmakedpend script | ||
188 | # | ||
189 | adcroft | 1.33 | if test "x${MAKEDEPEND}" = x ; then |
190 | edhill | 1.85 | which makedepend > /dev/null 2>&1 |
191 | RV0=$? | ||
192 | edhill | 1.119 | test -f $MAKEFILE && mv -f $MAKEFILE $MAKEFILE".tst" |
193 | # echo 'MAKEFILE="'$MAKEFILE'"' | ||
194 | cat <<EOF >> $MAKEFILE | ||
195 | # THIS IS A TEST MAKEFILE GENERATED BY "genmake2" | ||
196 | # | ||
197 | # Some "makedepend" implementations will die if they cannot | ||
198 | # find a Makefile -- so this file is here to gives them an | ||
199 | # empty one to find and parse. | ||
200 | EOF | ||
201 | edhill | 1.85 | cat <<EOF >> genmake_tc.f |
202 | edhill | 1.77 | program test |
203 | write(*,*) 'test' | ||
204 | stop | ||
205 | end | ||
206 | EOF | ||
207 | edhill | 1.85 | makedepend genmake_tc.f > /dev/null 2>&1 |
208 | mlosch | 1.120 | RV1=$? |
209 | edhill | 1.119 | test -f $MAKEFILE && rm -f $MAKEFILE |
210 | test -f $MAKEFILE".tst" && mv -f $MAKEFILE".tst" $MAKEFILE | ||
211 | edhill | 1.85 | if test "x${RV0}${RV1}" = x00 ; then |
212 | MAKEDEPEND=makedepend | ||
213 | else | ||
214 | echo " a system-default makedepend was not found." | ||
215 | |||
216 | # Try to build the cyrus implementation | ||
217 | edhill | 1.90 | build_cyrus_makedepend |
218 | edhill | 1.85 | RETVAL=$? |
219 | edhill | 1.90 | if test "x$RETVAL" != x0 ; then |
220 | edhill | 1.85 | MAKEDEPEND='$(TOOLSDIR)/xmakedepend' |
221 | fi | ||
222 | rm -f ./genmake_cy_md | ||
223 | fi | ||
224 | edhill | 1.90 | else |
225 | # echo "MAKEDEPEND=${MAKEDEPEND}" | ||
226 | echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1 | ||
227 | RETVAL=$? | ||
228 | if test x"$RETVAL" = x0 ; then | ||
229 | build_cyrus_makedepend | ||
230 | fi | ||
231 | edhill | 1.1 | fi |
232 | edhill | 1.84 | } |
233 | |||
234 | |||
235 | edhill | 1.90 | build_cyrus_makedepend() { |
236 | rm -f ./genmake_cy_md | ||
237 | ( | ||
238 | cd $ROOTDIR/tools/cyrus-imapd-makedepend \ | ||
239 | && ./configure > /dev/null 2>&1 \ | ||
240 | && make > /dev/null 2>&1 | ||
241 | if test -x ./makedepend.exe ; then | ||
242 | $LN ./makedepend.exe ./makedepend | ||
243 | fi | ||
244 | ./makedepend ifparser.c > /dev/null 2>&1 \ | ||
245 | && echo "true" | ||
246 | ) > ./genmake_cy_md | ||
247 | grep true ./genmake_cy_md > /dev/null 2>&1 | ||
248 | RETVAL=$? | ||
249 | rm -f ./genmake_cy_md | ||
250 | if test "x$RETVAL" = x0 ; then | ||
251 | MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend' | ||
252 | return 0 | ||
253 | else | ||
254 | echo "WARNING: unable to build cyrus-imapd-makedepend" | ||
255 | return 1 | ||
256 | fi | ||
257 | } | ||
258 | |||
259 | edhill | 1.141 | |
260 | build_embed_encode() | ||
261 | { | ||
262 | printf " building the embed-encode utility... " | ||
263 | if test ! -e "$ROOTDIR/tools/embed_encode/encode_files" ; then | ||
264 | if test ! -d "$ROOTDIR/tools/embed_encode" ; then | ||
265 | echo | ||
266 | echo " Error: can't locate \"$ROOTDIR/tools/embed_encode\"" | ||
267 | echo | ||
268 | EMBED_SRC=f | ||
269 | return 1 | ||
270 | fi | ||
271 | clist="cc gcc c89 $CC" | ||
272 | for ic in $clist ; do | ||
273 | comm="$ic -o encode_files encode_files.c" | ||
274 | ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1 | ||
275 | RETVAL=$? | ||
276 | if test "x$RETVAL" = x0 ; then | ||
277 | echo "OK" | ||
278 | DEFINES="$DEFINES -DHAVE_EMBED_SRC" | ||
279 | return 0 | ||
280 | fi | ||
281 | done | ||
282 | echo | ||
283 | echo " Error: unable to build $ROOTDIR/embed_encode/encode_files" | ||
284 | echo " so it has been disabled" | ||
285 | echo | ||
286 | EMBED_SRC=f | ||
287 | return 1 | ||
288 | fi | ||
289 | echo "OK" | ||
290 | DEFINES="$DEFINES -DHAVE_EMBED_SRC" | ||
291 | } | ||
292 | |||
293 | |||
294 | edhill | 1.84 | # Guess possible config options for this host |
295 | find_possible_configs() { | ||
296 | |||
297 | tmp1=`uname`"_"`uname -m` | ||
298 | tmp2=`echo $tmp1 | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` | ||
299 | tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'` | ||
300 | tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'` | ||
301 | tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'` | ||
302 | tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'` | ||
303 | PLATFORM=$tmp3 | ||
304 | echo $PLATFORM | grep cygwin > /dev/null 2>&1 && PLATFORM=cygwin_ia32 | ||
305 | OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")` | ||
306 | echo " The platform appears to be: $PLATFORM" | ||
307 | |||
308 | echo "test" > test | ||
309 | ln -s ./test link | ||
310 | RETVAL=$? | ||
311 | if test "x${RETVAL}" = x0 ; then | ||
312 | LN="ln -s" | ||
313 | else | ||
314 | echo "Error: \"ln -s\" does not appear to work on this system!" | ||
315 | echo " For help, please contact <MITgcm-support@mitgcm.org>." | ||
316 | exit 1 | ||
317 | fi | ||
318 | rm -f test link | ||
319 | |||
320 | if test "x$CPP" = x ; then | ||
321 | CPP="cpp -traditional -P" | ||
322 | fi | ||
323 | |||
324 | look_for_makedepend | ||
325 | edhill | 1.1 | |
326 | edhill | 1.91 | #================================================================ |
327 | # look for possible C compilers | ||
328 | heimbach | 1.158 | tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc" |
329 | edhill | 1.91 | p_CC= |
330 | for c in $tmp ; do | ||
331 | rm -f ./genmake_hello.c ./genmake_hello | ||
332 | cat >> genmake_hello.c << EOF | ||
333 | #include <stdio.h> | ||
334 | int main(int argc, char **argv) { | ||
335 | printf("Hello!\n"); | ||
336 | return 0; | ||
337 | } | ||
338 | EOF | ||
339 | $c -o genmake_hello genmake_hello.c > /dev/null 2>&1 | ||
340 | RETVAL=$? | ||
341 | if test "x${RETVAL}" = x0 ; then | ||
342 | p_CC="$p_CC $c" | ||
343 | fi | ||
344 | done | ||
345 | rm -f ./genmake_hello.c ./genmake_hello | ||
346 | if test "x${p_CC}" = x ; then | ||
347 | cat 1>&2 <<EOF | ||
348 | |||
349 | Error: No C compilers were found in your path. Please specify one using: | ||
350 | |||
351 | 1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"), | ||
352 | 2) the CC or MITGCM_CC environment variables. | ||
353 | |||
354 | EOF | ||
355 | exit 1 | ||
356 | else | ||
357 | echo " The possible C compilers found in your path are:" | ||
358 | echo " "$p_CC | ||
359 | if test "x$CC" = x ; then | ||
360 | CC=`echo $p_CC | $AWK '{print $1}'` | ||
361 | echo " Setting C compiler to: "$CC | ||
362 | fi | ||
363 | fi | ||
364 | |||
365 | #================================================================ | ||
366 | # look for possible FORTRAN compilers | ||
367 | heimbach | 1.158 | tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 gfortran g95" |
368 | edhill | 1.1 | p_FC= |
369 | edhill | 1.11 | for c in $tmp ; do |
370 | rm -f ./hello.f ./hello | ||
371 | cat >> hello.f <<EOF | ||
372 | program hello | ||
373 | do i=1,3 | ||
374 | print *, 'hello world : ', i | ||
375 | enddo | ||
376 | end | ||
377 | EOF | ||
378 | $c -o hello hello.f > /dev/null 2>&1 | ||
379 | edhill | 1.1 | RETVAL=$? |
380 | if test "x${RETVAL}" = x0 ; then | ||
381 | p_FC="$p_FC $c" | ||
382 | fi | ||
383 | done | ||
384 | edhill | 1.21 | rm -f ./hello.f ./hello |
385 | edhill | 1.1 | if test "x${p_FC}" = x ; then |
386 | edhill | 1.11 | cat 1>&2 <<EOF |
387 | |||
388 | Error: No Fortran compilers were found in your path. Please specify one using: | ||
389 | |||
390 | 1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"), | ||
391 | 2) a command-line option (eg. "-fc NAME"), or | ||
392 | edhill | 1.91 | 3) the FC or MITGCM_FC environment variables. |
393 | edhill | 1.11 | |
394 | EOF | ||
395 | exit 1 | ||
396 | edhill | 1.1 | else |
397 | edhill | 1.11 | echo " The possible FORTRAN compilers found in your path are:" |
398 | echo " "$p_FC | ||
399 | edhill | 1.136 | fi |
400 | |||
401 | # Use the first of the compilers found in the current PATH | ||
402 | # that has a correctly-named optfile | ||
403 | if test "x$OPTFILE" = x -a "x$FC" = x ; then | ||
404 | for i in $p_FC ; do | ||
405 | OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i | ||
406 | if test -r $OPTFILE ; then | ||
407 | echo " Setting OPTFILE to: "$OPTFILE | ||
408 | break | ||
409 | fi | ||
410 | done | ||
411 | edhill | 1.1 | fi |
412 | |||
413 | adcroft | 1.67 | if test "x$OPTFILE" = x ; then |
414 | OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$FC | ||
415 | if test ! -r $OPTFILE ; then | ||
416 | echo " I looked for the file "$OPTFILE" but did not find it" | ||
417 | fi | ||
418 | fi | ||
419 | # echo " The options file: $p_OF" | ||
420 | # echo " appears to match so we'll use it." | ||
421 | # for i in $p_FC ; do | ||
422 | #p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i | ||
423 | #if test -r $p_OF ; then | ||
424 | # OPTFILE=$p_OF | ||
425 | # echo " The options file: $p_OF" | ||
426 | # echo " appears to match so we'll use it." | ||
427 | # break | ||
428 | #fi | ||
429 | # done | ||
430 | edhill | 1.11 | if test "x$OPTFILE" = x ; then |
431 | cat 1>&2 <<EOF | ||
432 | |||
433 | Error: No options file was found in: $ROOTDIR/tools/build_options/ | ||
434 | that matches this platform ("$PLATFORM") and the compilers found in | ||
435 | your path. Please specify an "optfile" using: | ||
436 | |||
437 | 1) the command line (eg. "-optfile=path/to/OPTFILE"), or | ||
438 | 2) the MITGCM_OF environment variable. | ||
439 | |||
440 | If you need help, please contact the developers at <MITgcm-support@mitgcm.org>. | ||
441 | |||
442 | edhill | 1.1 | EOF |
443 | edhill | 1.11 | exit 1 |
444 | edhill | 1.1 | fi |
445 | edhill | 1.11 | |
446 | # # look for possible MPI libraries | ||
447 | # mpi_libs= | ||
448 | # mpi_fort=`which mpif77 2>/dev/null` | ||
449 | # RETVAL=$? | ||
450 | # if test "x${RETVAL}" = x0 ; then | ||
451 | # cat >>test.f <<EOF | ||
452 | # PROGRAM HELLO | ||
453 | # DO 10, I=1,10 | ||
454 | # PRINT *,'Hello World' | ||
455 | # 10 CONTINUE | ||
456 | # STOP | ||
457 | # END | ||
458 | # EOF | ||
459 | # eval "$mpi_fort -showme test.f > out" | ||
460 | # RETVAL=$? | ||
461 | # if test "x${RETVAL}" = x0 ; then | ||
462 | # a=`cat out` | ||
463 | # for i in $a ; do | ||
464 | # case $i in | ||
465 | # -*) | ||
466 | # mpi_libs="$mpi_libs $i" ;; | ||
467 | # esac | ||
468 | # done | ||
469 | # echo "The MPI libs appear to be:" | ||
470 | # echo " "$mpi_libs | ||
471 | # fi | ||
472 | # rm -f test.f out | ||
473 | # fi | ||
474 | edhill | 1.1 | |
475 | } | ||
476 | |||
477 | # Parse the package dependency information | ||
478 | get_pdepend_list() { | ||
479 | |||
480 | # strip the comments and then convert the dependency file into | ||
481 | # two arrays: PNAME, DNAME | ||
482 | cat $1 | sed -e 's/#.*$//g' \ | ||
483 | edhill | 1.15 | | $AWK 'BEGIN{nn=0;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \ |
484 | edhill | 1.1 | > ./.pd_tmp |
485 | edhill | 1.34 | . ./.pd_tmp |
486 | edhill | 1.1 | rm -f ./.pd_tmp |
487 | |||
488 | edhill | 1.71 | printf "PNAME = "${} |
489 | edhill | 1.1 | } |
490 | |||
491 | |||
492 | # Explain usage | ||
493 | usage() { | ||
494 | edhill | 1.41 | cat <<EOF |
495 | |||
496 | Usage: "$0" [OPTIONS] | ||
497 | where [OPTIONS] can be: | ||
498 | |||
499 | -help | --help | -h | --h | ||
500 | Print this help message and exit. | ||
501 | edhill | 1.79 | |
502 | -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME | ||
503 | -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME | ||
504 | Use "NAME" as the adoptfile. By default, the file at | ||
505 | "tools/adjoint_options/adjoint_default" will be used. | ||
506 | edhill | 1.41 | |
507 | -nooptfile | --nooptfile | ||
508 | -optfile NAME | --optfile NAME | -of NAME | --of NAME | ||
509 | -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME | ||
510 | Use "NAME" as the optfile. By default, an attempt will be | ||
511 | made to find an appropriate "standard" optfile in the | ||
512 | tools/build_options/ directory. | ||
513 | |||
514 | -pdepend NAME | --pdepend NAME | ||
515 | -pdepend=NAME | --pdepend=NAME | ||
516 | Get package dependency information from "NAME". | ||
517 | |||
518 | -pdefault NAME | --pdefault NAME | ||
519 | -pdefault=NAME | --pdefault=NAME | ||
520 | Get the default package list from "NAME". | ||
521 | |||
522 | -make NAME | -m NAME | ||
523 | --make=NAME | -m=NAME | ||
524 | Use "NAME" for the MAKE program. The default is "make" but | ||
525 | many platforms, "gmake" is the preferred choice. | ||
526 | |||
527 | -makefile NAME | -mf NAME | ||
528 | --makefile=NAME | -mf=NAME | ||
529 | Call the makefile "NAME". The default is "Makefile". | ||
530 | |||
531 | edhill | 1.69 | -makedepend NAME | -md NAME |
532 | --makedepend=NAME | -md=NAME | ||
533 | Use "NAME" for the MAKEDEPEND program. | ||
534 | |||
535 | edhill | 1.41 | -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME |
536 | -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME | ||
537 | Specify the location of the MITgcm ROOTDIR as "NAME". | ||
538 | By default, genamke will try to find the location by | ||
539 | looking in parent directories (up to the 5th parent). | ||
540 | |||
541 | -mods NAME | --mods NAME | -mo NAME | --mo NAME | ||
542 | -mods=NAME | --mods=NAME | -mo=NAME | --mo=NAME | ||
543 | Here, "NAME" specifies a list of directories that are | ||
544 | used for additional source code. Files found in the | ||
545 | "mods list" are given preference over files of the same | ||
546 | name found elsewhere. | ||
547 | |||
548 | -disable NAME | --disable NAME | ||
549 | -disable=NAME | --disable=NAME | ||
550 | Here "NAME" specifies a list of packages that we don't | ||
551 | want to use. If this violates package dependencies, | ||
552 | genamke will exit with an error message. | ||
553 | |||
554 | -enable NAME | --enable NAME | ||
555 | -enable=NAME | --enable=NAME | ||
556 | Here "NAME" specifies a list of packages that we wish | ||
557 | to specifically enable. If this violates package | ||
558 | dependencies, genamke will exit with an error message. | ||
559 | |||
560 | -standarddirs NAME | --standarddirs NAME | ||
561 | -standarddirs=NAME | --standarddirs=NAME | ||
562 | Here, "NAME" specifies a list of directories to be | ||
563 | used as the "standard" code. | ||
564 | |||
565 | -fortran NAME | --fortran NAME | -fc NAME | --fc NAME | ||
566 | -fc=NAME | --fc=NAME | ||
567 | Use "NAME" as the fortran compiler. By default, genmake | ||
568 | will search for a working compiler by trying a list of | ||
569 | "usual suspects" such as g77, f77, etc. | ||
570 | |||
571 | edhill | 1.91 | -cc NAME | --cc NAME | -cc=NAME | --cc=NAME |
572 | Use "NAME" as the C compiler. By default, genmake | ||
573 | will search for a working compiler by trying a list of | ||
574 | "usual suspects" such as gcc, c89, cc, etc. | ||
575 | |||
576 | edhill | 1.41 | -[no]ieee | --[no]ieee |
577 | Do or don't use IEEE numerics. Note that this option | ||
578 | *only* works if it is supported by the OPTFILE that | ||
579 | is being used. | ||
580 | |||
581 | edhill | 1.143 | -ignoretime | -ignore_time | --ignoretime | --ignore_time |
582 | Ignore all the "wall clock" routines entirely. This will | ||
583 | not in any way hurt the model results -- it simply means | ||
584 | that the code that checks how long the model spends in | ||
585 | various routines will give junk values. | ||
586 | |||
587 | ce107 | 1.126 | -ts | --ts |
588 | Produce timing information per timestep | ||
589 | ce107 | 1.139 | -papis | --papis |
590 | ce107 | 1.147 | Produce summary MFlop/s (and IPC) with PAPI per timestep |
591 | -pcls | --pcls | ||
592 | Produce summary MFlop/s etc. with PCL per timestep | ||
593 | ce107 | 1.139 | -foolad | --foolad |
594 | Fool the AD code generator | ||
595 | -papi | --papi | ||
596 | Performance analysis with PAPI | ||
597 | ce107 | 1.147 | -pcl | --pcl |
598 | Performance analysis with PCL | ||
599 | ce107 | 1.139 | -hpmt | --hpmt |
600 | Performance analysis with the HPM Toolkit | ||
601 | |||
602 | -gsl | --gsl | ||
603 | Use GSL to control floating point rounding and precision | ||
604 | ce107 | 1.160 | -devel | --devel |
605 | Add additional warning and debugging flags for development | ||
606 | ce107 | 1.126 | |
607 | adcroft | 1.67 | -mpi | --mpi |
608 | Include MPI header files and link to MPI libraries | ||
609 | -mpi=PATH | --mpi=PATH | ||
610 | Include MPI header files and link to MPI libraries using MPI_ROOT | ||
611 | edhill | 1.95 | set to PATH. i.e. Include files from \$PATH/include, link to libraries |
612 | from \$PATH/lib and use binaries from \$PATH/bin. | ||
613 | adcroft | 1.67 | |
614 | edhill | 1.141 | -es | --es | -embed-source | --embed-source |
615 | Embed a tarball containing the full source code | ||
616 | (including the Makefile, etc.) used to build the | ||
617 | executable [off by default] | ||
618 | |||
619 | edhill | 1.71 | -bash NAME |
620 | Explicitly specify the Bourne or BASH shell to use | ||
621 | |||
622 | edhill | 1.41 | While it is most often a single word, the "NAME" variables specified |
623 | above can in many cases be a space-delimited string such as: | ||
624 | |||
625 | --enable pkg1 --enable 'pkg1 pkg2' --enable 'pkg1 pkg2 pkg3' | ||
626 | -mods=dir1 -mods='dir1' -mods='dir1 dir2 dir3' | ||
627 | -foptim='-Mvect=cachesize:512000,transform -xtypemap=real:64,double:64,integer:32' | ||
628 | |||
629 | which, depending upon your shell, may need to be single-quoted. | ||
630 | |||
631 | For more detailed genmake documentation, please see: | ||
632 | |||
633 | http://mitgcm.org/devel_HOWTO/ | ||
634 | |||
635 | EOF | ||
636 | |||
637 | edhill | 1.1 | exit 1 |
638 | } | ||
639 | |||
640 | edhill | 1.31 | # Build a CPP macro to automate calling C routines from FORTRAN |
641 | get_fortran_c_namemangling() { | ||
642 | edhill | 1.89 | |
643 | #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\"" | ||
644 | if test ! "x$FC_NAMEMANGLE" = x ; then | ||
645 | return 0 | ||
646 | fi | ||
647 | |||
648 | edhill | 1.31 | default_nm="#define FC_NAMEMANGLE(X) X ## _" |
649 | |||
650 | cat > genmake_test.c <<EOF | ||
651 | void tcall( char * string ) { tsub( string ); } | ||
652 | EOF | ||
653 | edhill | 1.39 | $MAKE genmake_test.o >> genmake_warnings 2>&1 |
654 | edhill | 1.31 | RETVAL=$? |
655 | if test "x$RETVAL" != x0 ; then | ||
656 | FC_NAMEMANGLE=$default_nm | ||
657 | edhill | 1.39 | cat <<EOF>> genmake_errors |
658 | |||
659 | WARNING: C test compile fails | ||
660 | WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE' | ||
661 | WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here | ||
662 | EOF | ||
663 | edhill | 1.31 | return 1 |
664 | fi | ||
665 | edhill | 1.91 | c_tcall=`nm genmake_test.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3` |
666 | edhill | 1.31 | RETVAL=$? |
667 | if test "x$RETVAL" != x0 ; then | ||
668 | FC_NAMEMANGLE=$default_nm | ||
669 | edhill | 1.39 | cat <<EOF>> genmake_warnings |
670 | |||
671 | WARNING: The "nm" command failed. | ||
672 | WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE' | ||
673 | WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here | ||
674 | EOF | ||
675 | edhill | 1.31 | return 1 |
676 | fi | ||
677 | edhill | 1.118 | cat > genmake_tcomp.$FS <<EOF |
678 | edhill | 1.31 | subroutine tcall( string ) |
679 | character*(*) string | ||
680 | call tsub( string ) | ||
681 | end | ||
682 | EOF | ||
683 | edhill | 1.134 | $FC $FFLAGS -c genmake_tcomp.$FS >> genmake_warnings 2>&1 |
684 | edhill | 1.31 | RETVAL=$? |
685 | if test "x$RETVAL" != x0 ; then | ||
686 | FC_NAMEMANGLE=$default_nm | ||
687 | edhill | 1.39 | cat <<EOF>> genmake_warnings |
688 | |||
689 | WARNING: FORTRAN test compile fails -- please see "genmake_errors" | ||
690 | WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE' | ||
691 | WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here. | ||
692 | EOF | ||
693 | edhill | 1.31 | return 1 |
694 | fi | ||
695 | edhill | 1.91 | f_tcall=`nm genmake_tcomp.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3` |
696 | edhill | 1.31 | RETVAL=$? |
697 | if test "x$RETVAL" != x0 ; then | ||
698 | FC_NAMEMANGLE=$default_nm | ||
699 | edhill | 1.39 | cat <<EOF>> genmake_warnings |
700 | |||
701 | WARNING: The "nm" command failed. | ||
702 | WARNING: We'll try to use: FC_NAMEMANGLE='$FC_NAMEMANGLE' | ||
703 | WARNING: Please contact <MITgcm-support@mitgcm.org> if you need help here. | ||
704 | EOF | ||
705 | edhill | 1.31 | return 1 |
706 | fi | ||
707 | |||
708 | c_a=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'` | ||
709 | f_a=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 1 | sed -e 's|Y||'` | ||
710 | c_b=`echo $c_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'` | ||
711 | f_b=`echo $f_tcall | sed -e 's|tcall|Y Y|' | cut -d ' ' -f 2 | sed -e 's|Y||'` | ||
712 | |||
713 | nmangle="X" | ||
714 | if test "x$c_a" != "x$f_a" ; then | ||
715 | comm="echo x$f_a | sed -e 's|x$c_a||'" | ||
716 | a=`eval $comm` | ||
717 | nmangle="$a ## $nmangle" | ||
718 | fi | ||
719 | if test "x$c_b" != "x$f_b" ; then | ||
720 | comm="echo x$f_b | sed -e 's|x$c_b||'" | ||
721 | b=`eval $comm` | ||
722 | nmangle="$nmangle ## $b" | ||
723 | fi | ||
724 | |||
725 | FC_NAMEMANGLE="#define FC_NAMEMANGLE(X) $nmangle" | ||
726 | edhill | 1.32 | |
727 | # cleanup the testing files | ||
728 | rm -f genmake_tcomp.* genmake_test.* | ||
729 | edhill | 1.31 | } |
730 | edhill | 1.1 | |
731 | edhill | 1.39 | |
732 | check_HAVE_CLOC() { | ||
733 | get_fortran_c_namemangling | ||
734 | cat <<EOF > genmake_tc_1.c | ||
735 | $FC_NAMEMANGLE | ||
736 | #include <stdio.h> | ||
737 | #include <stdlib.h> | ||
738 | #include <unistd.h> | ||
739 | #include <assert.h> | ||
740 | #include <sys/time.h> | ||
741 | void FC_NAMEMANGLE(cloc) ( double *curtim ) | ||
742 | { | ||
743 | struct timeval tv1; | ||
744 | gettimeofday(&tv1 , (void *)NULL ); | ||
745 | *curtim = (double)((tv1.tv_usec)+(tv1.tv_sec)*1.E6); | ||
746 | *curtim = *curtim/1.E6; | ||
747 | } | ||
748 | EOF | ||
749 | mlosch | 1.168 | COMM="$CC $CFLAGS -c genmake_tc_1.c" |
750 | echo $COMM >> genmake_warnings | ||
751 | $COMM >> genmake_warnings 2>&1 | ||
752 | edhill | 1.39 | RET_C=$? |
753 | edhill | 1.118 | cat <<EOF > genmake_tc_2.$FS |
754 | edhill | 1.39 | program hello |
755 | edhill | 1.129 | REAL*8 wtime |
756 | edhill | 1.39 | external cloc |
757 | call cloc(wtime) | ||
758 | print *," HELLO WORLD", wtime | ||
759 | edhill | 1.128 | end |
760 | edhill | 1.39 | EOF |
761 | mlosch | 1.163 | COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o" |
762 | echo $COMM >> genmake_warnings | ||
763 | $COMM >> genmake_warnings 2>&1 | ||
764 | edhill | 1.39 | RET_F=$? |
765 | edhill | 1.118 | test -x ./genmake_tc && ./genmake_tc >> genmake_warnings 2>&1 |
766 | edhill | 1.39 | RETVAL=$? |
767 | if test "x$RETVAL" = x0 ; then | ||
768 | HAVE_CLOC=t | ||
769 | DEFINES="$DEFINES -DHAVE_CLOC" | ||
770 | fi | ||
771 | rm -f genmake_tc* | ||
772 | } | ||
773 | |||
774 | |||
775 | edhill | 1.137 | check_HAVE_SIGREG() { |
776 | edhill | 1.150 | if test ! "x$HAVE_SIGREG" = x ; then |
777 | return | ||
778 | fi | ||
779 | edhill | 1.137 | get_fortran_c_namemangling |
780 | cat <<EOF > genmake_tc_1.c | ||
781 | $FC_NAMEMANGLE | ||
782 | #include <stdlib.h> | ||
783 | #include <stdio.h> | ||
784 | #include <signal.h> | ||
785 | #include <errno.h> | ||
786 | #include <ucontext.h> | ||
787 | |||
788 | int * ip; | ||
789 | |||
790 | static void killhandler( | ||
791 | unsigned int sn, siginfo_t si, struct ucontext *sc ) | ||
792 | { | ||
793 | *ip = *ip + 1; | ||
794 | return; | ||
795 | } | ||
796 | |||
797 | void FC_NAMEMANGLE(sigreg) (int * aip) | ||
798 | { | ||
799 | edhill | 1.138 | struct sigaction s; |
800 | edhill | 1.137 | ip = aip; |
801 | s.sa_flags = SA_SIGINFO; | ||
802 | s.sa_sigaction = (void *)killhandler; | ||
803 | if(sigaction (SIGTERM,&s,(struct sigaction *)NULL)) { | ||
804 | printf("Sigaction returned error = %d\n", errno); | ||
805 | exit(0); | ||
806 | } | ||
807 | return; | ||
808 | } | ||
809 | EOF | ||
810 | mlosch | 1.168 | COMM="$CC $CFLAGS -c genmake_tc_1.c" |
811 | echo $COMM >> genmake_warnings | ||
812 | $COMM >> genmake_warnings 2>&1 | ||
813 | edhill | 1.137 | RET_C=$? |
814 | cat <<EOF > genmake_tc_2.$FS | ||
815 | program hello | ||
816 | integer anint | ||
817 | common /iv/ anint | ||
818 | external sigreg | ||
819 | call sigreg(anint) | ||
820 | end | ||
821 | EOF | ||
822 | echo >> genmake_warnings | ||
823 | echo "running: check_HAVE_SIGREG()" >> genmake_warnings | ||
824 | cat genmake_tc_2.$FS >> genmake_warnings | ||
825 | COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o" | ||
826 | echo $COMM >> genmake_warnings | ||
827 | $COMM >> genmake_warnings 2>&1 | ||
828 | RETVAL=$? | ||
829 | if test "x$RETVAL" = x0 ; then | ||
830 | HAVE_SIGREG=t | ||
831 | DEFINES="$DEFINES -DHAVE_SIGREG" | ||
832 | fi | ||
833 | rm -f genmake_tc* | ||
834 | } | ||
835 | |||
836 | |||
837 | edhill | 1.130 | check_HAVE_SETRLSTK() { |
838 | edhill | 1.151 | if test "x$HAVE_SETRLSTK" = xt ; then |
839 | DEFINES="$DEFINES -DHAVE_SETRLSTK" | ||
840 | return | ||
841 | fi | ||
842 | if test ! "x$HAVE_SETRLSTK" = x ; then | ||
843 | return | ||
844 | fi | ||
845 | edhill | 1.130 | get_fortran_c_namemangling |
846 | cat <<EOF > genmake_tc_1.c | ||
847 | $FC_NAMEMANGLE | ||
848 | #include <sys/time.h> | ||
849 | #include <sys/resource.h> | ||
850 | #include <unistd.h> | ||
851 | void FC_NAMEMANGLE(setrlstk) () | ||
852 | { | ||
853 | struct rlimit rls; | ||
854 | rls.rlim_cur = RLIM_INFINITY; | ||
855 | rls.rlim_max = RLIM_INFINITY; | ||
856 | setrlimit(RLIMIT_STACK, &rls); | ||
857 | return; | ||
858 | } | ||
859 | EOF | ||
860 | mlosch | 1.168 | COMM="$CC $CFLAGS -c genmake_tc_1.c" |
861 | echo $COMM >> genmake_warnings | ||
862 | $COMM >> genmake_warnings 2>&1 | ||
863 | edhill | 1.130 | RET_C=$? |
864 | cat <<EOF > genmake_tc_2.$FS | ||
865 | program hello | ||
866 | external setrlstk | ||
867 | call setrlstk() | ||
868 | end | ||
869 | EOF | ||
870 | edhill | 1.135 | echo >> genmake_warnings |
871 | echo "running: check_HAVE_SETRLSTK()" >> genmake_warnings | ||
872 | cat genmake_tc_2.$FS >> genmake_warnings | ||
873 | COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o" | ||
874 | echo $COMM >> genmake_warnings | ||
875 | $COMM >> genmake_warnings 2>&1 | ||
876 | edhill | 1.130 | RETVAL=$? |
877 | if test "x$RETVAL" = x0 ; then | ||
878 | HAVE_SETRLSTK=t | ||
879 | DEFINES="$DEFINES -DHAVE_SETRLSTK" | ||
880 | fi | ||
881 | rm -f genmake_tc* | ||
882 | } | ||
883 | |||
884 | |||
885 | edhill | 1.108 | check_HAVE_STAT() { |
886 | get_fortran_c_namemangling | ||
887 | cat <<EOF > genmake_tc_1.c | ||
888 | $FC_NAMEMANGLE | ||
889 | #include <stdio.h> | ||
890 | #include <stdlib.h> | ||
891 | #include <unistd.h> | ||
892 | #include <sys/stat.h> | ||
893 | #include <sys/types.h> | ||
894 | void FC_NAMEMANGLE(tfsize) ( int *nbyte ) | ||
895 | { | ||
896 | char name[512]; | ||
897 | struct stat astat; | ||
898 | |||
899 | name[0] = 'a'; name[1] = '\0'; | ||
900 | if (! stat(name, &astat)) | ||
901 | *nbyte = (int)(astat.st_size); | ||
902 | else | ||
903 | *nbyte = -1; | ||
904 | } | ||
905 | EOF | ||
906 | mlosch | 1.168 | COMM="$CC $CFLAGS -c genmake_tc_1.c" |
907 | echo $COMM >> genmake_warnings | ||
908 | $COMM >> genmake_tc.log 2>&1 | ||
909 | edhill | 1.108 | RET_C=$? |
910 | edhill | 1.118 | cat <<EOF > genmake_tc_2.$FS |
911 | edhill | 1.108 | program hello |
912 | integer nbyte | ||
913 | call tfsize(nbyte) | ||
914 | print *," HELLO WORLD", nbyte | ||
915 | edhill | 1.128 | end |
916 | edhill | 1.108 | EOF |
917 | edhill | 1.135 | echo >> genmake_warnings |
918 | echo "running: check_HAVE_STAT()" >> genmake_warnings | ||
919 | cat genmake_tc_2.$FS >> genmake_warnings | ||
920 | COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o" | ||
921 | echo $COMM >> genmake_warnings | ||
922 | $COMM >> genmake_tc.log 2>&1 | ||
923 | edhill | 1.108 | RETVAL=$? |
924 | if test "x$RETVAL" = x0 ; then | ||
925 | HAVE_STAT=t | ||
926 | DEFINES="$DEFINES -DHAVE_STAT" | ||
927 | fi | ||
928 | rm -f genmake_tc* | ||
929 | } | ||
930 | |||
931 | |||
932 | edhill | 1.60 | check_netcdf_libs() { |
933 | edhill | 1.113 | if test ! "x$SKIP_NETCDF_CHECK" = x ; then |
934 | return | ||
935 | fi | ||
936 | edhill | 1.135 | echo >> genmake_warnings |
937 | echo "running: check_netcdf_libs()" >> genmake_warnings | ||
938 | edhill | 1.117 | cat <<EOF > genmake_tnc.F |
939 | edhill | 1.60 | program fgennc |
940 | #include "netcdf.inc" | ||
941 | edhill | 1.113 | EOF |
942 | if test ! "x$MPI" = x ; then | ||
943 | edhill | 1.117 | echo '#include "mpif.h"' >> genmake_tnc.F |
944 | edhill | 1.113 | fi |
945 | edhill | 1.117 | cat <<EOF >> genmake_tnc.F |
946 | edhill | 1.60 | integer iret, ncid, xid |
947 | iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid) | ||
948 | IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret) | ||
949 | iret = nf_def_dim(ncid, 'X', 11, xid) | ||
950 | IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret) | ||
951 | iret = nf_close(ncid) | ||
952 | IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret) | ||
953 | end | ||
954 | EOF | ||
955 | edhill | 1.135 | echo "=== genmake_tnc.F ===" > genmake_tnc.log |
956 | cat genmake_tnc.F >> genmake_tnc.log | ||
957 | echo "=== genmake_tnc.F ===" >> genmake_tnc.log | ||
958 | edhill | 1.111 | RET_CPP=f |
959 | edhill | 1.149 | COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES" |
960 | edhill | 1.135 | echo "$COMM" >> genmake_tnc.log |
961 | dfer | 1.155 | eval $COMM > genmake_tnc.$FS 2>/dev/null && RET_CPP=t |
962 | edhill | 1.111 | if test "x$RET_CPP" = xf ; then |
963 | echo " WARNING: CPP failed to pre-process the netcdf test." \ | ||
964 | edhill | 1.133 | >> genmake_tnc.log |
965 | edhill | 1.111 | echo " Please check that \$INCLUDES is properly set." \ |
966 | edhill | 1.133 | >> genmake_tnc.log |
967 | edhill | 1.111 | fi |
968 | edhill | 1.135 | echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log |
969 | edhill | 1.153 | echo " && $LINK $FFLAGS $FOPTIM -o genmake_tnc.o $LIBS" >> genmake_tnc.log |
970 | edhill | 1.117 | $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \ |
971 | edhill | 1.153 | && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1 |
972 | edhill | 1.60 | RET_COMPILE=$? |
973 | edhill | 1.135 | cat genmake_tnc.log >> genmake_warnings |
974 | edhill | 1.99 | |
975 | #EH3 Remove test program execution for machines that either disallow | ||
976 | #EH3 execution or cannot support it (eg. cross-compilers) | ||
977 | #EH3 | ||
978 | #EH3 test -x ./genmake_tnc && ./genmake_tnc >> genmake_tnc.log 2>&1 | ||
979 | #EH3 RETVAL=$? | ||
980 | #EH3 if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then | ||
981 | |||
982 | if test "x$RET_COMPILE" = x0 ; then | ||
983 | edhill | 1.60 | HAVE_NETCDF=t |
984 | else | ||
985 | edhill | 1.66 | # try again with "-lnetcdf" added to the libs |
986 | edhill | 1.135 | echo "try again with added '-lnetcdf'" > genmake_tnc.log |
987 | edhill | 1.149 | echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log |
988 | edhill | 1.133 | echo " && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log |
989 | edhill | 1.153 | echo " && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log |
990 | edhill | 1.149 | cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null \ |
991 | edhill | 1.117 | && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \ |
992 | edhill | 1.153 | && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1 |
993 | edhill | 1.66 | RET_COMPILE=$? |
994 | edhill | 1.135 | cat genmake_tnc.log >> genmake_warnings |
995 | edhill | 1.99 | if test "x$RET_COMPILE" = x0 ; then |
996 | edhill | 1.66 | LIBS="$LIBS -lnetcdf" |
997 | HAVE_NETCDF=t | ||
998 | ce107 | 1.160 | else |
999 | # try again with "-lnetcdff" added to the libs | ||
1000 | echo "try again with added '-lnetcdff -lnetcdf'" > genmake_tnc.log | ||
1001 | echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log | ||
1002 | echo " && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log | ||
1003 | echo " && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log | ||
1004 | cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null \ | ||
1005 | && $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1 \ | ||
1006 | && $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdff -lnetcdf >> genmake_tnc.log 2>&1 | ||
1007 | RET_COMPILE=$? | ||
1008 | cat genmake_tnc.log >> genmake_warnings | ||
1009 | if test "x$RET_COMPILE" = x0 ; then | ||
1010 | LIBS="$LIBS -lnetcdff -lnetcdf" | ||
1011 | HAVE_NETCDF=t | ||
1012 | fi | ||
1013 | edhill | 1.66 | fi |
1014 | edhill | 1.60 | fi |
1015 | rm -f genmake_tnc* | ||
1016 | } | ||
1017 | |||
1018 | |||
1019 | adcroft | 1.67 | |
1020 | ############################################################################### | ||
1021 | # Sequential part of script starts here | ||
1022 | ############################################################################### | ||
1023 | |||
1024 | edhill | 1.1 | # Set defaults here |
1025 | edhill | 1.5 | COMMANDL="$0 $@" |
1026 | |||
1027 | edhill | 1.1 | PLATFORM= |
1028 | LN= | ||
1029 | S64= | ||
1030 | KPP= | ||
1031 | edhill | 1.114 | #FC= |
1032 | edhill | 1.93 | #CC=gcc |
1033 | edhill | 1.114 | #CPP= |
1034 | edhill | 1.1 | LINK= |
1035 | edhill | 1.31 | DEFINES= |
1036 | edhill | 1.1 | PACKAGES= |
1037 | ENABLE= | ||
1038 | DISABLE= | ||
1039 | edhill | 1.119 | # MAKEFILE= |
1040 | # MAKEDEPEND= | ||
1041 | edhill | 1.1 | PDEPEND= |
1042 | edhill | 1.11 | DUMPSTATE=t |
1043 | edhill | 1.1 | PDEFAULT= |
1044 | OPTFILE= | ||
1045 | edhill | 1.111 | INCLUDES="-I. $INCLUDES" |
1046 | edhill | 1.1 | FFLAGS= |
1047 | FOPTIM= | ||
1048 | mlosch | 1.165 | FEXTRAFLAGS= |
1049 | edhill | 1.1 | CFLAGS= |
1050 | KFLAGS1= | ||
1051 | KFLAGS2= | ||
1052 | edhill | 1.70 | #LDADD= |
1053 | edhill | 1.1 | LIBS= |
1054 | KPPFILES= | ||
1055 | NOOPTFILES= | ||
1056 | NOOPTFLAGS= | ||
1057 | adcroft | 1.67 | MPI= |
1058 | MPIPATH= | ||
1059 | ce107 | 1.126 | TS= |
1060 | ce107 | 1.139 | PAPIS= |
1061 | ce107 | 1.147 | PCLS= |
1062 | ce107 | 1.139 | FOOLAD= |
1063 | PAPI= | ||
1064 | ce107 | 1.147 | PCL= |
1065 | ce107 | 1.139 | HPMT= |
1066 | GSL= | ||
1067 | ce107 | 1.160 | DEVEL= |
1068 | edhill | 1.131 | HAVE_TEST_L= |
1069 | edhill | 1.1 | |
1070 | edhill | 1.124 | # DEFINES checked by test compilation or command-line |
1071 | edhill | 1.29 | HAVE_SYSTEM= |
1072 | HAVE_FDATE= | ||
1073 | FC_NAMEMANGLE= | ||
1074 | edhill | 1.39 | HAVE_CLOC= |
1075 | edhill | 1.151 | # HAVE_SETRLSTK= |
1076 | edhill | 1.108 | HAVE_STAT= |
1077 | edhill | 1.60 | HAVE_NETCDF= |
1078 | cnh | 1.81 | HAVE_ETIME= |
1079 | edhill | 1.124 | IGNORE_TIME= |
1080 | edhill | 1.29 | |
1081 | edhill | 1.1 | MODS= |
1082 | TOOLSDIR= | ||
1083 | SOURCEDIRS= | ||
1084 | INCLUDEDIRS= | ||
1085 | edhill | 1.57 | STANDARDDIRS="USE_THE_DEFAULT" |
1086 | edhill | 1.1 | |
1087 | edhill | 1.73 | G2ARGS= |
1088 | edhill | 1.71 | BASH= |
1089 | edhill | 1.1 | PWD=`pwd` |
1090 | edhill | 1.114 | test "x$MAKE" = x && MAKE=make |
1091 | test "x$AWK" = x && AWK=awk | ||
1092 | edhill | 1.141 | EMBED_SRC= |
1093 | edhill | 1.97 | THISHOST=`hostname` |
1094 | edhill | 1.1 | THISCWD=`pwd` |
1095 | THISDATE=`date` | ||
1096 | edhill | 1.97 | THISUSER=`echo $USER` |
1097 | THISVER= | ||
1098 | edhill | 1.1 | MACHINE=`uname -a` |
1099 | edhill | 1.7 | EXECUTABLE= |
1100 | EXEHOOK= | ||
1101 | EXEDIR= | ||
1102 | edhill | 1.12 | PACKAGES_CONF= |
1103 | IEEE= | ||
1104 | if test "x$MITGCM_IEEE" != x ; then | ||
1105 | IEEE=$MITGCM_IEEE | ||
1106 | fi | ||
1107 | edhill | 1.76 | FS= |
1108 | FS90= | ||
1109 | edhill | 1.1 | |
1110 | edhill | 1.14 | AUTODIFF_PKG_USED=f |
1111 | AD_OPTFILE= | ||
1112 | edhill | 1.17 | TAF= |
1113 | AD_TAF_FLAGS= | ||
1114 | FTL_TAF_FLAGS= | ||
1115 | SVD_TAF_FLAGS= | ||
1116 | TAF_EXTRA= | ||
1117 | TAMC= | ||
1118 | AD_TAMC_FLAGS= | ||
1119 | FTL_TAF_FLAGS= | ||
1120 | SVD_TAMC_FLAGS= | ||
1121 | TAMC_EXTRA= | ||
1122 | |||
1123 | edhill | 1.14 | |
1124 | edhill | 1.5 | # The following state can be set directly by command-line switches |
1125 | edhill | 1.41 | gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE" |
1126 | ce107 | 1.160 | gm_s2="FC CPP IEEE TS PAPIS PCLS PAPI PCL HPMT GSL DEVEL MPI JAM DUMPSTATE STANDARDDIRS" |
1127 | edhill | 1.5 | |
1128 | # The following state is not directly set by command-line switches | ||
1129 | mlosch | 1.165 | gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM FEXTRAFLAGS" |
1130 | edhill | 1.5 | gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS" |
1131 | edhill | 1.97 | gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE" |
1132 | edhill | 1.12 | gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF" |
1133 | cnh | 1.81 | gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME" |
1134 | edhill | 1.5 | |
1135 | edhill | 1.14 | # The following are all related to adjoint/tangent-linear stuff |
1136 | edhill | 1.29 | gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS" |
1137 | gm_s11="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS" | ||
1138 | gm_s12="TAF_EXTRA TAMC_EXTRA" | ||
1139 | edhill | 1.14 | |
1140 | edhill | 1.29 | gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7" |
1141 | gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12" | ||
1142 | edhill | 1.5 | |
1143 | edhill | 1.41 | cat <<EOF |
1144 | |||
1145 | GENMAKE : | ||
1146 | |||
1147 | A program for GENerating MAKEfiles for the MITgcm project. For a | ||
1148 | quick list of options, use "genmake -h" or for more detail see: | ||
1149 | |||
1150 | http://mitgcm.org/devel_HOWTO/ | ||
1151 | |||
1152 | EOF | ||
1153 | edhill | 1.5 | |
1154 | edhill | 1.2 | echo "=== Processing options files and arguments ===" |
1155 | edhill | 1.12 | gm_local="genmake_local" |
1156 | edhill | 1.71 | printf " getting local config information: " |
1157 | edhill | 1.88 | if test -f $gm_local ; then |
1158 | edhill | 1.1 | echo "using $gm_local" |
1159 | edhill | 1.34 | . $gm_local |
1160 | edhill | 1.2 | # echo "DISABLE=$DISABLE" |
1161 | # echo "ENABLE=$ENABLE" | ||
1162 | edhill | 1.1 | else |
1163 | echo "none found" | ||
1164 | fi | ||
1165 | |||
1166 | edhill | 1.103 | #echo "$0::$1:$2:$3:$4:$5:$6:$7:" |
1167 | edhill | 1.2 | #OPTIONS= |
1168 | #n=0 | ||
1169 | #for i ; do | ||
1170 | # echo "$i $n" | ||
1171 | # setvar="OPTIONS[$n]='$i'" | ||
1172 | # # echo " $setvar" | ||
1173 | # eval "$setvar" | ||
1174 | # n=$(( $n + 1 )) | ||
1175 | #done | ||
1176 | #parse_options | ||
1177 | ac_prev= | ||
1178 | edhill | 1.102 | for ac_option in "$@" ; do |
1179 | edhill | 1.2 | |
1180 | edhill | 1.73 | G2ARGS="$G2ARGS \"$ac_option\"" |
1181 | |||
1182 | edhill | 1.2 | # If the previous option needs an argument, assign it. |
1183 | if test -n "$ac_prev"; then | ||
1184 | eval "$ac_prev=\$ac_option" | ||
1185 | ac_prev= | ||
1186 | continue | ||
1187 | fi | ||
1188 | |||
1189 | ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` | ||
1190 | |||
1191 | case $ac_option in | ||
1192 | |||
1193 | -help | --help | -h | --h) | ||
1194 | usage ;; | ||
1195 | |||
1196 | -nooptfile | --nooptfile) | ||
1197 | OPTFILE="NONE" ;; | ||
1198 | -optfile | --optfile | -of | --of) | ||
1199 | edhill | 1.4 | ac_prev=OPTFILE ;; |
1200 | edhill | 1.2 | -optfile=* | --optfile=* | -of=* | --of=*) |
1201 | OPTFILE=$ac_optarg ;; | ||
1202 | |||
1203 | edhill | 1.50 | -adoptfile | --adoptfile | -adof | --adof) |
1204 | edhill | 1.14 | ac_prev=AD_OPTFILE ;; |
1205 | -adoptfile=* | --adoptfile=* | -adof=* | --adof=*) | ||
1206 | AD_OPTFILE=$ac_optarg ;; | ||
1207 | |||
1208 | edhill | 1.2 | -pdepend | --pdepend) |
1209 | edhill | 1.4 | ac_prev=PDEPEND ;; |
1210 | edhill | 1.2 | -pdepend=* | --pdepend=*) |
1211 | PDEPEND=$ac_optarg ;; | ||
1212 | |||
1213 | -pdefault | --pdefault) | ||
1214 | edhill | 1.4 | ac_prev=PDEFAULT ;; |
1215 | edhill | 1.2 | -pdefault=* | --pdefault=*) |
1216 | PDEFAULT=$ac_optarg ;; | ||
1217 | |||
1218 | edhill | 1.6 | -make | --make | -m | --m) |
1219 | ac_prev=MAKE ;; | ||
1220 | -make=* | --make=* | -m=* | --m=*) | ||
1221 | MAKE=$ac_optarg ;; | ||
1222 | edhill | 1.69 | |
1223 | edhill | 1.71 | -bash | --bash) |
1224 | ac_prev=BASH ;; | ||
1225 | -bash=* | --bash=*) | ||
1226 | BASH=$ac_optarg ;; | ||
1227 | |||
1228 | edhill | 1.69 | -makedepend | --makedepend | -md | --md) |
1229 | ac_prev=MAKEDEPEND ;; | ||
1230 | -makedepend=* | --makedepend=* | -md=* | --md=*) | ||
1231 | MAKEDEPEND=$ac_optarg ;; | ||
1232 | edhill | 1.6 | |
1233 | -makefile | --makefile | -ma | --ma) | ||
1234 | edhill | 1.4 | ac_prev=MAKEFILE ;; |
1235 | edhill | 1.6 | -makefile=* | --makefile=* | -ma=* | --ma=*) |
1236 | edhill | 1.2 | MAKEFILE=$ac_optarg ;; |
1237 | |||
1238 | edhill | 1.41 | -platform | --platform | -pl | --pl | -platform=* | --platform=* | -pl=* | --pl=*) |
1239 | echo "ERROR: The platform option has been removed. Please specify" | ||
1240 | echo " the build options using the \"optfile\" mechanism." | ||
1241 | echo | ||
1242 | usage | ||
1243 | ;; | ||
1244 | edhill | 1.2 | |
1245 | -rootdir | --rootdir | -rd | --rd) | ||
1246 | edhill | 1.4 | ac_prev=ROOTDIR ;; |
1247 | edhill | 1.2 | -rootdir=* | --rootdir=* | -rd=* | --rd=*) |
1248 | ROOTDIR=$ac_optarg ;; | ||
1249 | |||
1250 | -mods | --mods | -mo | --mo) | ||
1251 | edhill | 1.4 | ac_prev=MODS ;; |
1252 | edhill | 1.2 | -mods=* | --mods=* | -mo=* | --mo=*) |
1253 | MODS=$ac_optarg ;; | ||
1254 | |||
1255 | -disable | --disable) | ||
1256 | edhill | 1.4 | ac_prev=DISABLE ;; |
1257 | edhill | 1.2 | -disable=* | --disable=*) |
1258 | DISABLE=$ac_optarg ;; | ||
1259 | |||
1260 | -enable | --enable) | ||
1261 | edhill | 1.4 | ac_prev=ENABLE ;; |
1262 | edhill | 1.2 | -enable=* | --enable=*) |
1263 | ENABLE=$ac_optarg ;; | ||
1264 | |||
1265 | edhill | 1.12 | -standarddirs | --standarddirs) |
1266 | ac_prev=STANDARDDIRS ;; | ||
1267 | -standarddirs=* | --standarddirs=*) | ||
1268 | STANDARDDIRS=$ac_optarg ;; | ||
1269 | |||
1270 | edhill | 1.2 | # -cpp | --cpp) |
1271 | # ac_prev=cpp ;; | ||
1272 | # -cpp=* | --cpp=*) | ||
1273 | # CPP=$ac_optarg ;; | ||
1274 | edhill | 1.91 | |
1275 | -cc | --cc) | ||
1276 | ac_prev=CC ;; | ||
1277 | -cc=* | --cc=*) | ||
1278 | CC=$ac_optarg ;; | ||
1279 | |||
1280 | edhill | 1.2 | -fortran | --fortran | -fc | --fc) |
1281 | edhill | 1.4 | ac_prev=FC ;; |
1282 | edhill | 1.2 | -fc=* | --fc=*) |
1283 | FC=$ac_optarg ;; | ||
1284 | |||
1285 | edhill | 1.76 | -fs | --fs) |
1286 | ac_prev=FS ;; | ||
1287 | -fs=* | --fs=*) | ||
1288 | FS=$ac_optarg ;; | ||
1289 | |||
1290 | -fs90 | --fs90) | ||
1291 | ac_prev=FS90 ;; | ||
1292 | -fs90=* | --fs90=*) | ||
1293 | FS90=$ac_optarg ;; | ||
1294 | |||
1295 | edhill | 1.2 | -ieee | --ieee) |
1296 | edhill | 1.12 | IEEE=true ;; |
1297 | edhill | 1.2 | -noieee | --noieee) |
1298 | edhill | 1.12 | IEEE= ;; |
1299 | adcroft | 1.67 | |
1300 | ce107 | 1.126 | -ts | --ts) |
1301 | TS=true ;; | ||
1302 | ce107 | 1.139 | -papis | --papis) |
1303 | PAPIS=true ;; | ||
1304 | ce107 | 1.147 | -pcls | --pcls) |
1305 | PCLS=true ;; | ||
1306 | ce107 | 1.139 | -foolad | --foolad) |
1307 | FOOLAD=true ;; | ||
1308 | -papi | --papi) | ||
1309 | PAPI=true ;; | ||
1310 | ce107 | 1.147 | -pcl | --pcl) |
1311 | PCL=true ;; | ||
1312 | ce107 | 1.139 | -hpmt | --hpmt) |
1313 | HPMT=true ;; | ||
1314 | |||
1315 | -gsl | --gsl) | ||
1316 | GSL=true ;; | ||
1317 | ce107 | 1.126 | |
1318 | ce107 | 1.160 | -devel | --devel) |
1319 | DEVEL=true ;; | ||
1320 | |||
1321 | adcroft | 1.67 | -mpi | --mpi) |
1322 | MPI=true ;; | ||
1323 | -mpi=* | --mpi=*) | ||
1324 | MPIPATH=$ac_optarg | ||
1325 | MPI=true ;; | ||
1326 | edhill | 1.2 | |
1327 | edhill | 1.41 | # -jam | --jam) |
1328 | # JAM=1 ;; | ||
1329 | # -nojam | --nojam) | ||
1330 | # JAM=0 ;; | ||
1331 | edhill | 1.2 | |
1332 | edhill | 1.5 | -ds | --ds) |
1333 | DUMPSTATE=t ;; | ||
1334 | |||
1335 | edhill | 1.17 | -taf_extra | --taf_extra) |
1336 | ac_prev=TAF_EXTRA ;; | ||
1337 | -taf_extra=* | --taf_extra=*) | ||
1338 | TAF_EXTRA=$ac_optarg ;; | ||
1339 | |||
1340 | -tamc_extra | --tamc_extra) | ||
1341 | ac_prev=TAMC_EXTRA ;; | ||
1342 | -tamc_extra=* | --tamc_extra=*) | ||
1343 | TAMC_EXTRA=$ac_optarg ;; | ||
1344 | edhill | 1.124 | |
1345 | -ignoretime | -ignore_time | --ignoretime | --ignore_time) | ||
1346 | IGNORE_TIME="-DIGNORE_TIME" ;; | ||
1347 | edhill | 1.17 | |
1348 | edhill | 1.141 | -es | --es | -embed-source | --embed-source) |
1349 | EMBED_SRC=t ;; | ||
1350 | |||
1351 | edhill | 1.2 | -*) |
1352 | echo "Error: unrecognized option: "$ac_option | ||
1353 | usage | ||
1354 | ;; | ||
1355 | |||
1356 | *) | ||
1357 | echo "Error: unrecognized argument: "$ac_option | ||
1358 | usage | ||
1359 | ;; | ||
1360 | |||
1361 | esac | ||
1362 | |||
1363 | edhill | 1.1 | done |
1364 | |||
1365 | edhill | 1.119 | |
1366 | edhill | 1.12 | if test -f ./.genmakerc ; then |
1367 | echo | ||
1368 | echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\"" | ||
1369 | jmc | 1.161 | echo " file. This file format is no longer supported. For directions on" |
1370 | echo " how to setup and use the new \"genmake2\" script, please see:" | ||
1371 | edhill | 1.12 | echo " http://mitgcm.org/devel_HOWTO/" |
1372 | jmc | 1.161 | echo " and send an email to MITgcm-support@mitgcm.org if you need help." |
1373 | echo "WARNING: ignore \"./.genmakerc\" and continue." | ||
1374 | edhill | 1.12 | echo |
1375 | fi | ||
1376 | |||
1377 | edhill | 1.97 | # Find the MITgcm ${ROOTDIR} |
1378 | edhill | 1.11 | if test "x${ROOTDIR}" = x ; then |
1379 | edhill | 1.112 | tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'` |
1380 | edhill | 1.154 | if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesupp -a -d ../pkg ; then |
1381 | edhill | 1.11 | ROOTDIR=".." |
1382 | else | ||
1383 | for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do | ||
1384 | if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then | ||
1385 | ROOTDIR=$d | ||
1386 | edhill | 1.71 | printf "Warning: ROOTDIR was not specified but there appears to be" |
1387 | edhill | 1.11 | echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it." |
1388 | break | ||
1389 | fi | ||
1390 | done | ||
1391 | fi | ||
1392 | fi | ||
1393 | if test "x${ROOTDIR}" = x ; then | ||
1394 | echo "Error: Cannot determine ROOTDIR for MITgcm code." | ||
1395 | echo " Please specify a ROOTDIR using either an options " | ||
1396 | echo " file or a command-line option." | ||
1397 | exit 1 | ||
1398 | fi | ||
1399 | if test ! -d ${ROOTDIR} ; then | ||
1400 | echo "Error: the specified ROOTDIR (\"$ROOTDIR\") does not exist!" | ||
1401 | exit 1 | ||
1402 | fi | ||
1403 | |||
1404 | edhill | 1.97 | # Find the MITgcm ${THISVER} |
1405 | jmc | 1.179 | version_file="${ROOTDIR}/doc/tag-index" |
1406 | if test -f $version_file ; then | ||
1407 | THISVER=`grep '^checkpoint' $version_file | head -1` | ||
1408 | #- remove ./BUILD_INFO.h file if older than version_file | ||
1409 | if test -f ./BUILD_INFO.h -a ./BUILD_INFO.h -ot $version_file ; then | ||
1410 | echo " remove ./BUILD_INFO.h (older than ${version_file})" | ||
1411 | rm -f ./BUILD_INFO.h | ||
1412 | fi | ||
1413 | edhill | 1.97 | fi |
1414 | |||
1415 | edhill | 1.119 | if test "x$MAKEFILE" = x ; then |
1416 | MAKEFILE="Makefile" | ||
1417 | fi | ||
1418 | |||
1419 | edhill | 1.1 | echo " getting OPTFILE information: " |
1420 | if test "x${OPTFILE}" = x ; then | ||
1421 | edhill | 1.11 | if test "x$MITGCM_OF" = x ; then |
1422 | echo "Warning: no OPTFILE specified so we'll look for possible settings" | ||
1423 | printf "\n=== Searching for possible settings for OPTFILE ===\n" | ||
1424 | find_possible_configs | ||
1425 | edhill | 1.1 | else |
1426 | edhill | 1.11 | OPTFILE=$MITGCM_OF |
1427 | fi | ||
1428 | fi | ||
1429 | if test "x$OPTFILE" != xNONE ; then | ||
1430 | if test -f "$OPTFILE" -a -r "$OPTFILE" ; then | ||
1431 | echo " using OPTFILE=\"$OPTFILE\"" | ||
1432 | edhill | 1.34 | . "$OPTFILE" |
1433 | edhill | 1.11 | RETVAL=$? |
1434 | if test "x$RETVAL" != x0 ; then | ||
1435 | edhill | 1.71 | printf "Error: failed to source OPTFILE \"$OPTFILE\"" |
1436 | edhill | 1.11 | echo "--please check that variable syntax is bash-compatible" |
1437 | edhill | 1.1 | exit 1 |
1438 | fi | ||
1439 | edhill | 1.11 | if test "x$DUMPSTATE" != xf ; then |
1440 | edhill | 1.12 | cp -f $OPTFILE "genmake_optfile" |
1441 | edhill | 1.11 | fi |
1442 | else | ||
1443 | echo "Error: can't read OPTFILE=\"$OPTFILE\"" | ||
1444 | exit 1 | ||
1445 | edhill | 1.1 | fi |
1446 | fi | ||
1447 | edhill | 1.8 | |
1448 | edhill | 1.14 | echo " getting AD_OPTFILE information: " |
1449 | if test "x${AD_OPTFILE}" = x ; then | ||
1450 | if test "x$MITGCM_AD_OF" = x ; then | ||
1451 | AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_default | ||
1452 | else | ||
1453 | AD_OPTFILE=$MITGCM_AD_OF | ||
1454 | fi | ||
1455 | fi | ||
1456 | if test "x${AD_OPTFILE}" != xNONE ; then | ||
1457 | if test -f "$AD_OPTFILE" -a -r "$AD_OPTFILE" ; then | ||
1458 | echo " using AD_OPTFILE=\"$AD_OPTFILE\"" | ||
1459 | edhill | 1.34 | . "$AD_OPTFILE" |
1460 | edhill | 1.14 | RETVAL=$? |
1461 | if test "x$RETVAL" != x0 ; then | ||
1462 | edhill | 1.71 | printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\"" |
1463 | edhill | 1.14 | echo "--please check that variable syntax is bash-compatible" |
1464 | exit 1 | ||
1465 | fi | ||
1466 | if test "x$DUMPSTATE" != xf ; then | ||
1467 | cp -f $AD_OPTFILE "genmake_ad_optfile" | ||
1468 | fi | ||
1469 | else | ||
1470 | echo "Error: can't read AD_OPTFILE=\"$AD_OPTFILE\"" | ||
1471 | exit 1 | ||
1472 | fi | ||
1473 | fi | ||
1474 | |||
1475 | edhill | 1.119 | #==================================================================== |
1476 | # Set default values if not set by the optfile | ||
1477 | # | ||
1478 | edhill | 1.91 | # Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined. If not, |
1479 | edhill | 1.39 | # either set defaults or complain and abort! |
1480 | edhill | 1.71 | if test ! "x$BASH" = x ; then |
1481 | # add a trailing space so that it works within the Makefile syntax (see below) | ||
1482 | BASH="$BASH " | ||
1483 | fi | ||
1484 | edhill | 1.8 | if test "x$FC" = x ; then |
1485 | cat <<EOF 1>&2 | ||
1486 | |||
1487 | Error: no Fortran compiler: please specify using one of the following: | ||
1488 | 1) within the options file ("FC=...") as specified by "-of=OPTFILE" | ||
1489 | 2) the "-fc=XXX" command-line option | ||
1490 | edhill | 1.12 | 3) the "./genmake_local" file |
1491 | edhill | 1.8 | EOF |
1492 | exit 1 | ||
1493 | fi | ||
1494 | edhill | 1.91 | if test "x$CC" = x ; then |
1495 | edhill | 1.93 | CC=cc |
1496 | # cat <<EOF 1>&2 | ||
1497 | # Error: no C compiler: please specify using one of the following: | ||
1498 | # 1) within the options file ("CC=...") as specified by "-of=OPTFILE" | ||
1499 | # 2) the "-cc=XXX" command-line option | ||
1500 | # 3) the "./genmake_local" file | ||
1501 | # EOF | ||
1502 | # exit 1 | ||
1503 | edhill | 1.91 | fi |
1504 | edhill | 1.8 | if test "x$LINK" = x ; then |
1505 | LINK=$FC | ||
1506 | fi | ||
1507 | edhill | 1.39 | if test "x$MAKE" = x ; then |
1508 | MAKE="make" | ||
1509 | fi | ||
1510 | edhill | 1.63 | if test "x$CPP" = x ; then |
1511 | CPP=cpp | ||
1512 | fi | ||
1513 | #EH3 === UGLY === | ||
1514 | edhill | 1.76 | # The following is an ugly little hack to check for $CPP in /lib/ and |
1515 | # it should eventually be replaced with a more general function that | ||
1516 | edhill | 1.63 | # searches a combo of the user's path and a list of "usual suspects" |
1517 | # to find the correct location for binaries such as $CPP. | ||
1518 | for i in " " "/lib/" ; do | ||
1519 | echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP | ||
1520 | done | ||
1521 | #EH3 === UGLY === | ||
1522 | edhill | 1.13 | echo "#define A a" | $CPP > test_cpp 2>&1 |
1523 | edhill | 1.11 | RETVAL=$? |
1524 | if test "x$RETVAL" != x0 ; then | ||
1525 | edhill | 1.8 | cat <<EOF 1>&2 |
1526 | |||
1527 | edhill | 1.11 | Error: C pre-processor "$CPP" failed the test case: please specify using: |
1528 | |||
1529 | edhill | 1.8 | 1) within the options file ("CPP=...") as specified by "-of=OPTFILE" |
1530 | edhill | 1.12 | 2) the "./genmake_local" file |
1531 | edhill | 1.30 | 3) with the CPP environment variable |
1532 | edhill | 1.11 | |
1533 | edhill | 1.8 | EOF |
1534 | exit 1 | ||
1535 | edhill | 1.11 | else |
1536 | rm -f test_cpp | ||
1537 | edhill | 1.8 | fi |
1538 | edhill | 1.84 | look_for_makedepend |
1539 | edhill | 1.35 | if test "x$LN" = x ; then |
1540 | LN="ln -s" | ||
1541 | fi | ||
1542 | echo "test" > genmake_test_ln | ||
1543 | $LN genmake_test_ln genmake_tlink | ||
1544 | RETVAL=$? | ||
1545 | if test "x$RETVAL" != x0 ; then | ||
1546 | cat <<EOF 1>&2 | ||
1547 | edhill | 1.29 | |
1548 | edhill | 1.35 | Error: The command "ln -s" failed -- please specify a working soft-link |
1549 | command in the optfile. | ||
1550 | |||
1551 | EOF | ||
1552 | exit 1 | ||
1553 | fi | ||
1554 | edhill | 1.131 | test -L genmake_tlink > /dev/null 2>&1 |
1555 | RETVAL=$? | ||
1556 | if test "x$RETVAL" = x0 ; then | ||
1557 | HAVE_TEST_L=t | ||
1558 | fi | ||
1559 | edhill | 1.35 | rm -f genmake_test_ln genmake_tlink |
1560 | edhill | 1.77 | |
1561 | # Check for broken *.F/*.f handling and fix if possible | ||
1562 | check_for_broken_Ff | ||
1563 | edhill | 1.29 | |
1564 | adcroft | 1.67 | if test ! "x$MPI" = x ; then |
1565 | echo " Turning on MPI cpp macros" | ||
1566 | adcroft | 1.68 | DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI" |
1567 | adcroft | 1.67 | fi |
1568 | edhill | 1.39 | |
1569 | ce107 | 1.126 | if test ! "x$TS" = x ; then |
1570 | echo " Turning on timing per timestep" | ||
1571 | ce107 | 1.139 | if test ! "x$FOOLAD" = x ; then |
1572 | DEFINES="$DEFINES -DTIME_PER_TIMESTEP_SFP" | ||
1573 | else | ||
1574 | DEFINES="$DEFINES -DTIME_PER_TIMESTEP" | ||
1575 | fi | ||
1576 | ce107 | 1.164 | PACKAGES="$PACKAGES showflops" |
1577 | ce107 | 1.139 | fi |
1578 | if test ! "x$PAPIS" = x ; then | ||
1579 | echo " Turning on PAPI flop summary per timestep" | ||
1580 | echo " Please make sure PAPIINC, PAPILIB are defined" | ||
1581 | if test ! "x$FOOLAD" = x ; then | ||
1582 | DEFINES="$DEFINES -DUSE_PAPI_FLOPS_SFP" | ||
1583 | else | ||
1584 | DEFINES="$DEFINES -DUSE_PAPI_FLOPS" | ||
1585 | fi | ||
1586 | INCLUDES="$INCLUDES $PAPIINC" | ||
1587 | LIBS="$LIBS $PAPILIB" | ||
1588 | ce107 | 1.164 | PACKAGES="$PACKAGES showflops" |
1589 | ce107 | 1.139 | fi |
1590 | ce107 | 1.147 | if test ! "x$PCLS" = x ; then |
1591 | echo " Turning on PCL counter summary per timestep" | ||
1592 | echo " Please make sure PCLINC, PCLLIB are defined" | ||
1593 | if test ! "x$FOOLAD" = x ; then | ||
1594 | DEFINES="$DEFINES -DUSE_PCL_FLOPS_SFP" | ||
1595 | else | ||
1596 | DEFINES="$DEFINES -DUSE_PCL_FLOPS" | ||
1597 | fi | ||
1598 | INCLUDES="$INCLUDES $PCLINC" | ||
1599 | LIBS="$LIBS $PCLLIB" | ||
1600 | ce107 | 1.164 | PACKAGES="$PACKAGES showflops" |
1601 | ce107 | 1.147 | fi |
1602 | ce107 | 1.139 | if test ! "x$PAPI" = x ; then |
1603 | if test ! "x$PAPIS" = x ; then | ||
1604 | echo " PAPI performance analysis and flop summary per timestep cannot co-exist!" | ||
1605 | echo " Sticking with PAPI flop summary per timestep!" | ||
1606 | else | ||
1607 | echo " Turning on performance analysis with PAPI" | ||
1608 | echo " Please make sure PAPIINC, PAPILIB are defined" | ||
1609 | DEFINES="$DEFINES -DUSE_PAPI" | ||
1610 | INCLUDES="$INCLUDES $PAPIINC" | ||
1611 | LIBS="$LIBS $PAPILIB" | ||
1612 | fi | ||
1613 | fi | ||
1614 | ce107 | 1.147 | if test ! "x$PCL" = x ; then |
1615 | if test ! "x$PCLS" = x ; then | ||
1616 | echo " PCL performance analysis and flop summary per timestep cannot co-exist!" | ||
1617 | echo " Sticking with PCL flop summary per timestep!" | ||
1618 | else | ||
1619 | echo " Turning on performance analysis with PCL" | ||
1620 | echo " Please make sure PCLINC, PCLLIB are defined" | ||
1621 | DEFINES="$DEFINES -DUSE_PCL" | ||
1622 | INCLUDES="$INCLUDES $PCLINC" | ||
1623 | LIBS="$LIBS $PCLLIB" | ||
1624 | fi | ||
1625 | fi | ||
1626 | ce107 | 1.139 | if test ! "x$HPMT" = x ; then |
1627 | if test ! "x$PAPI" = x ; then | ||
1628 | echo " PAPI and the HPM Toolkit cannot co-exist!" | ||
1629 | echo " Sticking with PAPI!" | ||
1630 | ce107 | 1.147 | else if test ! "x$PCL" = x ; then |
1631 | echo " PCL and the HPM Toolkit cannot co-exist!" | ||
1632 | echo " Sticking with PCL!" | ||
1633 | ce107 | 1.139 | else |
1634 | echo " Turning on performance analysis with the HPM Toolkit" | ||
1635 | echo " Please make sure HPMTINC, HPMTLIB are defined" | ||
1636 | DEFINES="$DEFINES -DUSE_LIBHPM" | ||
1637 | INCLUDES="$INCLUDES $HPMTINC" | ||
1638 | LIBS="$LIBS $HPMTLIB" | ||
1639 | fi | ||
1640 | ce107 | 1.148 | fi |
1641 | ce107 | 1.139 | fi |
1642 | if test ! "x$GSL" = x ; then | ||
1643 | echo " Turning on use of GSL to control floating point calculations" | ||
1644 | echo " Please make sure GSLINC, GSLLIB are defined" | ||
1645 | DEFINES="$DEFINES -DUSE_GSL_IEEE" | ||
1646 | INCLUDES="$INCLUDES $GSLINC" | ||
1647 | LIBS="$LIBS $GSLLIB" | ||
1648 | ce107 | 1.126 | fi |
1649 | |||
1650 | edhill | 1.29 | printf "\n=== Checking system libraries ===\n" |
1651 | edhill | 1.71 | printf " Do we have the system() command using $FC... " |
1652 | edhill | 1.118 | cat > genmake_tcomp.$FS <<EOF |
1653 | edhill | 1.29 | program hello |
1654 | call system('echo hi') | ||
1655 | end | ||
1656 | EOF | ||
1657 | edhill | 1.134 | $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1 |
1658 | edhill | 1.29 | RETVAL=$? |
1659 | if test "x$RETVAL" = x0 ; then | ||
1660 | HAVE_SYSTEM=t | ||
1661 | DEFINES="$DEFINES -DHAVE_SYSTEM" | ||
1662 | echo "yes" | ||
1663 | else | ||
1664 | HAVE_SYSTEM= | ||
1665 | echo "no" | ||
1666 | fi | ||
1667 | rm -f genmake_tcomp* | ||
1668 | |||
1669 | edhill | 1.71 | printf " Do we have the fdate() command using $FC... " |
1670 | edhill | 1.118 | cat > genmake_tcomp.$FS <<EOF |
1671 | edhill | 1.29 | program hello |
1672 | edhill | 1.129 | CHARACTER*(128) string |
1673 | edhill | 1.29 | string = ' ' |
1674 | call fdate( string ) | ||
1675 | print *, string | ||
1676 | end | ||
1677 | EOF | ||
1678 | edhill | 1.134 | $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1 |
1679 | edhill | 1.29 | RETVAL=$? |
1680 | if test "x$RETVAL" = x0 ; then | ||
1681 | HAVE_FDATE=t | ||
1682 | DEFINES="$DEFINES -DHAVE_FDATE" | ||
1683 | echo "yes" | ||
1684 | else | ||
1685 | HAVE_FDATE= | ||
1686 | echo "no" | ||
1687 | fi | ||
1688 | rm -f genmake_tcomp* | ||
1689 | |||
1690 | cnh | 1.81 | printf " Do we have the etime() command using $FC... " |
1691 | edhill | 1.118 | cat > genmake_tcomp.$FS <<EOF |
1692 | cnh | 1.81 | program hello |
1693 | cnh | 1.82 | REAL*4 ACTUAL, TARRAY(2) |
1694 | EXTERNAL ETIME | ||
1695 | REAL*4 ETIME | ||
1696 | actual = etime( tarray ) | ||
1697 | cnh | 1.81 | print *, tarray |
1698 | end | ||
1699 | EOF | ||
1700 | edhill | 1.134 | $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1 |
1701 | cnh | 1.81 | RETVAL=$? |
1702 | if test "x$RETVAL" = x0 ; then | ||
1703 | HAVE_ETIME=t | ||
1704 | DEFINES="$DEFINES -DHAVE_ETIME" | ||
1705 | echo "yes" | ||
1706 | else | ||
1707 | HAVE_ETIME= | ||
1708 | echo "no" | ||
1709 | fi | ||
1710 | rm -f genmake_tcomp* | ||
1711 | |||
1712 | edhill | 1.71 | printf " Can we call simple C routines (here, \"cloc()\") using $FC... " |
1713 | edhill | 1.39 | check_HAVE_CLOC |
1714 | if test "x$HAVE_CLOC" != x ; then | ||
1715 | echo "yes" | ||
1716 | else | ||
1717 | echo "no" | ||
1718 | edhill | 1.141 | if test "x$EMBED_SRC" = xt ; then |
1719 | echo " WARNING: you requested file embedding but it has" | ||
1720 | echo " been disabled since C code cannot be called" | ||
1721 | EMBED_SRC= | ||
1722 | fi | ||
1723 | edhill | 1.29 | fi |
1724 | edhill | 1.39 | rm -f genmake_t* |
1725 | edhill | 1.29 | |
1726 | edhill | 1.130 | printf " Can we unlimit the stack size using $FC... " |
1727 | check_HAVE_SETRLSTK | ||
1728 | edhill | 1.151 | if test "x$HAVE_SETRLSTK" = xt ; then |
1729 | edhill | 1.130 | echo "yes" |
1730 | else | ||
1731 | echo "no" | ||
1732 | fi | ||
1733 | rm -f genmake_t* | ||
1734 | |||
1735 | edhill | 1.137 | printf " Can we register a signal handler using $FC... " |
1736 | check_HAVE_SIGREG | ||
1737 | edhill | 1.150 | if test "x$HAVE_SIGREG" = xt ; then |
1738 | edhill | 1.137 | echo "yes" |
1739 | else | ||
1740 | echo "no" | ||
1741 | fi | ||
1742 | rm -f genmake_t* | ||
1743 | |||
1744 | edhill | 1.108 | printf " Can we use stat() through C calls... " |
1745 | check_HAVE_STAT | ||
1746 | if test "x$HAVE_STAT" != x ; then | ||
1747 | echo "yes" | ||
1748 | else | ||
1749 | echo "no" | ||
1750 | fi | ||
1751 | rm -f genmake_t* | ||
1752 | |||
1753 | edhill | 1.71 | printf " Can we create NetCDF-enabled binaries... " |
1754 | edhill | 1.60 | check_netcdf_libs |
1755 | if test "x$HAVE_NETCDF" != x ; then | ||
1756 | echo "yes" | ||
1757 | else | ||
1758 | echo "no" | ||
1759 | fi | ||
1760 | edhill | 1.124 | DEFINES="$DEFINES $IGNORE_TIME" |
1761 | edhill | 1.8 | |
1762 | edhill | 1.141 | if test "x$EMBED_SRC" = xt ; then |
1763 | build_embed_encode | ||
1764 | fi | ||
1765 | if test "x$EMBED_SRC" = xt ; then | ||
1766 | ENABLE="$ENABLE embed_files" | ||
1767 | fi | ||
1768 | |||
1769 | |||
1770 | edhill | 1.2 | printf "\n=== Setting defaults ===\n" |
1771 | edhill | 1.71 | printf " Adding MODS directories: " |
1772 | edhill | 1.1 | for d in $MODS ; do |
1773 | if test ! -d $d ; then | ||
1774 | edhill | 1.2 | echo |
1775 | echo "Error: MODS directory \"$d\" not found!" | ||
1776 | edhill | 1.1 | exit 1 |
1777 | else | ||
1778 | edhill | 1.71 | printf " $d" |
1779 | edhill | 1.1 | SOURCEDIRS="$SOURCEDIRS $d" |
1780 | INCLUDEDIRS="$INCLUDEDIRS $d" | ||
1781 | fi | ||
1782 | done | ||
1783 | echo | ||
1784 | |||
1785 | if test "x${PLATFORM}" = x ; then | ||
1786 | PLATFORM=$p_PLATFORM | ||
1787 | fi | ||
1788 | |||
1789 | if test "x${EXEDIR}" = x ; then | ||
1790 | edhill | 1.112 | tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'` |
1791 | edhill | 1.87 | if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then |
1792 | edhill | 1.1 | EXEDIR=../exe |
1793 | else | ||
1794 | EXEDIR=. | ||
1795 | fi | ||
1796 | fi | ||
1797 | if test ! -d ${EXEDIR} ; then | ||
1798 | echo "Error: the specified EXEDIR (\"$EXEDIR\") does not exist!" | ||
1799 | exit 1 | ||
1800 | fi | ||
1801 | |||
1802 | if test "x${TOOLSDIR}" = x ; then | ||
1803 | TOOLSDIR="$ROOTDIR/tools" | ||
1804 | fi | ||
1805 | if test ! -d ${TOOLSDIR} ; then | ||
1806 | cnh | 1.65 | echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!" |
1807 | edhill | 1.1 | exit 1 |
1808 | fi | ||
1809 | edhill | 1.11 | if test "x$S64" = x ; then |
1810 | edhill | 1.104 | echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1 |
1811 | RETVAL=$? | ||
1812 | if test "x${RETVAL}" = x0 ; then | ||
1813 | S64='$(TOOLSDIR)/set64bitConst.sh' | ||
1814 | else | ||
1815 | echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1 | ||
1816 | RETVAL=$? | ||
1817 | if test "x${RETVAL}" = x0 ; then | ||
1818 | S64='$(TOOLSDIR)/set64bitConst.csh' | ||
1819 | else | ||
1820 | cat <<EOF | ||
1821 | |||
1822 | ERROR: neither of the two default scripts: | ||
1823 | |||
1824 | ${TOOLSDIR}/set64bitConst.sh | ||
1825 | ${TOOLSDIR}/set64bitConst.csh | ||
1826 | |||
1827 | are working so please check paths or specify (with \$S64) a | ||
1828 | working version of this script. | ||
1829 | |||
1830 | EOF | ||
1831 | exit 1 | ||
1832 | fi | ||
1833 | fi | ||
1834 | edhill | 1.11 | fi |
1835 | adcroft | 1.44 | THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'` |
1836 | edhill | 1.1 | |
1837 | EXECUTABLE=${EXECUTABLE:-mitgcmuv} | ||
1838 | |||
1839 | # We have a special set of source files in eesupp/src which are | ||
1840 | # generated from some template source files. We'll make them first so | ||
1841 | # they appear as regular source code | ||
1842 | if test -r $ROOTDIR"/eesupp/src/Makefile" ; then | ||
1843 | echo " Making source files in eesupp from templates" | ||
1844 | edhill | 1.36 | ( cd $ROOTDIR"/eesupp/src/" && $MAKE ) > make_eesupp.errors 2>&1 |
1845 | edhill | 1.1 | RETVAL=$? |
1846 | edhill | 1.2 | if test "x${RETVAL}" = x0 ; then |
1847 | edhill | 1.1 | rm -f make_eesupp.errors |
1848 | else | ||
1849 | echo "Error: problem encountered while building source files in eesupp:" | ||
1850 | edhill | 1.62 | cat make_eesupp.errors 1>&2 |
1851 | edhill | 1.1 | exit 1 |
1852 | afe | 1.58 | fi |
1853 | fi | ||
1854 | |||
1855 | edhill | 1.154 | #same for pkg/exch2 and pkg/regrid |
1856 | for pdir in exch2 regrid ; do | ||
1857 | if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then | ||
1858 | echo " Making source files in pkg/${pdir} from templates" | ||
1859 | ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE ) > make_${pdir}.errors 2>&1 | ||
1860 | RETVAL=$? | ||
1861 | if test "x${RETVAL}" = x0 ; then | ||
1862 | rm -f make_${pdir}.errors | ||
1863 | else | ||
1864 | echo "Error: problem encountered while building source files in pkg/${pdir}:" | ||
1865 | cat make_${pdir}.errors 1>&2 | ||
1866 | exit 1 | ||
1867 | fi | ||
1868 | edhill | 1.1 | fi |
1869 | edhill | 1.154 | done |
1870 | edhill | 1.1 | |
1871 | edhill | 1.2 | printf "\n=== Determining package settings ===\n" |
1872 | edhill | 1.1 | if test "x${PDEPEND}" = x ; then |
1873 | tmp=$ROOTDIR"/pkg/pkg_depend" | ||
1874 | if test -r $tmp ; then | ||
1875 | PDEPEND=$tmp | ||
1876 | else | ||
1877 | echo "Warning: No package dependency information was specified." | ||
1878 | echo " Please check that ROOTDIR/pkg/pkg_depend exists." | ||
1879 | fi | ||
1880 | else | ||
1881 | if test ! -r ${PDEPEND} ; then | ||
1882 | echo "Error: can't read package dependency info from PDEPEND=\"$PDEPEND\"" | ||
1883 | exit 1 | ||
1884 | fi | ||
1885 | fi | ||
1886 | echo " getting package dependency info from $PDEPEND" | ||
1887 | # Strip the comments and then convert the dependency file into | ||
1888 | # two arrays: PNAME, DNAME | ||
1889 | cat $PDEPEND | sed -e 's/#.*$//g' \ | ||
1890 | edhill | 1.15 | | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \ |
1891 | edhill | 1.1 | > ./.pd_tmp |
1892 | RETVAL=$? | ||
1893 | if test ! "x${RETVAL}" = x0 ; then | ||
1894 | echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\"" | ||
1895 | exit 1 | ||
1896 | fi | ||
1897 | edhill | 1.34 | . ./.pd_tmp |
1898 | edhill | 1.1 | rm -f ./.pd_tmp |
1899 | |||
1900 | edhill | 1.12 | # Search for default packages. Note that a "$ROOTDIR/pkg/pkg_groups" |
1901 | # file should eventually be added so that, for convenience, one can | ||
1902 | # specify groups of packages using names like "ocean" and "atmosphere". | ||
1903 | edhill | 1.41 | echo " checking default package list: " |
1904 | edhill | 1.1 | if test "x${PDEFAULT}" = x ; then |
1905 | edhill | 1.12 | for i in "." $MODS ; do |
1906 | if test -r $i"/packages.conf" ; then | ||
1907 | PDEFAULT=$i"/packages.conf" | ||
1908 | break | ||
1909 | fi | ||
1910 | done | ||
1911 | fi | ||
1912 | if test "x${PDEFAULT}" = x ; then | ||
1913 | edhill | 1.1 | PDEFAULT="$ROOTDIR/pkg/pkg_default" |
1914 | fi | ||
1915 | if test "x${PDEFAULT}" = xNONE ; then | ||
1916 | edhill | 1.41 | echo " default packages file disabled" |
1917 | edhill | 1.1 | else |
1918 | if test ! -r $PDEFAULT ; then | ||
1919 | echo "Warning: can't read default packages from PDEFAULT=\"$PDEFAULT\"" | ||
1920 | else | ||
1921 | edhill | 1.41 | echo " using PDEFAULT=\"$PDEFAULT\"" |
1922 | edhill | 1.1 | # Strip the comments and add all the names |
1923 | edhill | 1.15 | def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'` |
1924 | edhill | 1.1 | RETVAL=$? |
1925 | if test "x${RETVAL}" != x0 ; then | ||
1926 | edhill | 1.71 | printf "Error: can't parse default package list " |
1927 | edhill | 1.1 | echo "-- please check PDEFAULT=\"$PDEFAULT\"" |
1928 | exit 1 | ||
1929 | fi | ||
1930 | for i in $def ; do | ||
1931 | PACKAGES="$PACKAGES $i" | ||
1932 | done | ||
1933 | edhill | 1.12 | echo " before group expansion packages are: $PACKAGES" |
1934 | edhill | 1.87 | RET=1 |
1935 | while test $RET = 1 ; do expand_pkg_groups; RET=$?; done | ||
1936 | edhill | 1.12 | echo " after group expansion packages are: $PACKAGES" |
1937 | edhill | 1.1 | fi |
1938 | fi | ||
1939 | |||
1940 | echo " applying DISABLE settings" | ||
1941 | adcroft | 1.74 | for i in $PACKAGES ; do |
1942 | echo $i >> ./.tmp_pack | ||
1943 | done | ||
1944 | for i in `grep "-" ./.tmp_pack` ; do | ||
1945 | j=`echo $i | sed 's/[-]//'` | ||
1946 | DISABLE="$DISABLE $j" | ||
1947 | done | ||
1948 | edhill | 1.1 | pack= |
1949 | for p in $PACKAGES ; do | ||
1950 | addit="t" | ||
1951 | for d in $DISABLE ; do | ||
1952 | if test "x$p" = "x$d" ; then | ||
1953 | addit="f" | ||
1954 | fi | ||
1955 | done | ||
1956 | if test "x$addit" = xt ; then | ||
1957 | pack="$pack $p" | ||
1958 | fi | ||
1959 | done | ||
1960 | PACKAGES="$pack" | ||
1961 | echo " applying ENABLE settings" | ||
1962 | edhill | 1.12 | echo "" > ./.tmp_pack |
1963 | edhill | 1.1 | PACKAGES="$PACKAGES $ENABLE" |
1964 | adcroft | 1.74 | # Test if each explicitly referenced package exists |
1965 | edhill | 1.1 | for i in $PACKAGES ; do |
1966 | adcroft | 1.74 | j=`echo $i | sed 's/[-+]//'` |
1967 | if test ! -d "$ROOTDIR/pkg/$j" ; then | ||
1968 | edhill | 1.1 | echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\"" |
1969 | adcroft | 1.74 | exit 1 |
1970 | edhill | 1.1 | fi |
1971 | echo $i >> ./.tmp_pack | ||
1972 | done | ||
1973 | PACKAGES= | ||
1974 | adcroft | 1.74 | for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do |
1975 | edhill | 1.1 | PACKAGES="$PACKAGES $i" |
1976 | done | ||
1977 | adcroft | 1.74 | rm -f ./.tmp_pack |
1978 | edhill | 1.1 | echo " packages are: $PACKAGES" |
1979 | |||
1980 | jmc | 1.161 | # Check for package MNC: if NetCDF is available, then build the MNC |
1981 | # template files ; otherwise, delete mnc from the list of packages. | ||
1982 | edhill | 1.100 | echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1 |
1983 | RETVAL=$? | ||
1984 | if test "x$RETVAL" = x0 ; then | ||
1985 | if test "x$HAVE_NETCDF" != xt ; then | ||
1986 | cat <<EOF | ||
1987 | |||
1988 | ********************************************************************* | ||
1989 | WARNING: the "mnc" package was enabled but tests failed to compile | ||
1990 | NetCDF applications. Please check that: | ||
1991 | |||
1992 | 1) NetCDF is correctly installed for this compiler and | ||
1993 | 2) the LIBS variable (within the "optfile") specifies the correct | ||
1994 | NetCDF library to link against. | ||
1995 | |||
1996 | Due to this failure, the "mnc" package is now DISABLED. | ||
1997 | ********************************************************************* | ||
1998 | |||
1999 | EOF | ||
2000 | PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'` | ||
2001 | DISABLE="$DISABLE mnc" | ||
2002 | else | ||
2003 | edhill | 1.110 | ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1 |
2004 | edhill | 1.100 | RETVAL=$? |
2005 | if test "x${RETVAL}" = x0 ; then | ||
2006 | rm -f make_mnc.errors | ||
2007 | else | ||
2008 | echo "Error: problem encountered while building source files in pkg/mnc:" | ||
2009 | cat make_mnc.errors 1>&2 | ||
2010 | exit 1 | ||
2011 | fi | ||
2012 | fi | ||
2013 | fi | ||
2014 | |||
2015 | jmc | 1.161 | # Check for package PROFILES: if NetCDF is not available, |
2016 | # then delete profiles from the list of available packages. | ||
2017 | echo $PACKAGES | grep ' profiles ' > /dev/null 2>&1 | ||
2018 | RETVAL=$? | ||
2019 | if test "x$RETVAL" = x0 ; then | ||
2020 | if test "x$HAVE_NETCDF" != xt ; then | ||
2021 | cat <<EOF | ||
2022 | |||
2023 | ********************************************************************* | ||
2024 | WARNING: the "profiles" package was enabled but tests failed to | ||
2025 | compile NetCDF applications. Please check that: | ||
2026 | |||
2027 | 1) NetCDF is correctly installed for this compiler and | ||
2028 | 2) the LIBS variable (within the "optfile") specifies the correct | ||
2029 | NetCDF library to link against. | ||
2030 | |||
2031 | Due to this failure, the "profiles" package is now DISABLED. | ||
2032 | ********************************************************************* | ||
2033 | |||
2034 | EOF | ||
2035 | PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'` | ||
2036 | DISABLE="$DISABLE profiles" | ||
2037 | fi | ||
2038 | fi | ||
2039 | |||
2040 | edhill | 1.1 | echo " applying package dependency rules" |
2041 | ck= | ||
2042 | while test "x$ck" != xtt ; do | ||
2043 | i=0 | ||
2044 | edhill | 1.2 | # rtot=${#PNAME[@]} |
2045 | rtot=$nname | ||
2046 | jmc | 1.162 | while test $i -le $rtot ; do |
2047 | edhill | 1.1 | |
2048 | # Is $pname in the current $PACKAGES list? | ||
2049 | edhill | 1.2 | # pname=${PNAME[$i]} |
2050 | tmp="pname=\"\$PNAME_$i\"" | ||
2051 | eval $tmp | ||
2052 | edhill | 1.1 | pin="f" |
2053 | for p in $PACKAGES ; do | ||
2054 | if test "x$p" = "x$pname" ; then | ||
2055 | pin="t" | ||
2056 | fi | ||
2057 | done | ||
2058 | |||
2059 | # Is the DNAME entry a (+) or (-) rule ? | ||
2060 | edhill | 1.2 | tmp="dname=\"\$DNAME_$i\"" |
2061 | eval $tmp | ||
2062 | edhill | 1.1 | plus="-" |
2063 | edhill | 1.2 | echo $dname | grep '^+' > /dev/null 2>&1 |
2064 | edhill | 1.1 | RETVAL=$? |
2065 | if test "x$RETVAL" = x0 ; then | ||
2066 | plus="+" | ||
2067 | fi | ||
2068 | |||
2069 | # Is $dname in the current $PACKAGES list? | ||
2070 | edhill | 1.2 | dname=`echo $dname | sed -e 's/^[+-]//'` |
2071 | edhill | 1.1 | din="f" |
2072 | for p in $PACKAGES ; do | ||
2073 | if test "x$p" = "x$dname" ; then | ||
2074 | din="t" | ||
2075 | fi | ||
2076 | done | ||
2077 | |||
2078 | # Do we need to add $dname according to the dependency rules? | ||
2079 | if test "x$pin" = xt -a "x$plus" = "x+" -a "x$din" = xf ; then | ||
2080 | jmc | 1.162 | #echo " " $pname ": need to add :" $dname |
2081 | edhill | 1.1 | in_dis="f" |
2082 | for dis in $DISABLE ; do | ||
2083 | if test "x$dis" = "x$dname" ; then | ||
2084 | in_dis="t" | ||
2085 | fi | ||
2086 | done | ||
2087 | if test "x$in_dis" = xt ; then | ||
2088 | echo "Error: can't satisfy package dependencies:" | ||
2089 | echo " \"$dname\" is required by the dependency rules" | ||
2090 | echo " but is disallowed by the DISABLE settings" | ||
2091 | exit 1 | ||
2092 | else | ||
2093 | PACKAGES="$PACKAGES $dname" | ||
2094 | ck= | ||
2095 | fi | ||
2096 | fi | ||
2097 | |||
2098 | # Do we need to get rid of $dname according to the dependency rules? | ||
2099 | if test "x$pin" = xt -a "x$plus" = "x-" -a "x$din" = xt; then | ||
2100 | echo "Error: can't satisfy package dependencies:" | ||
2101 | echo " \"$pname\" was requested but is disallowed by" | ||
2102 | echo " the dependency rules for \"$dname\"" | ||
2103 | exit 1 | ||
2104 | fi | ||
2105 | edhill | 1.87 | i=`echo "$i + 1" | bc -l` |
2106 | #i=$(( $i + 1 )) | ||
2107 | edhill | 1.1 | done |
2108 | ck=$ck"t" | ||
2109 | done | ||
2110 | echo " packages are: $PACKAGES" | ||
2111 | for i in $PACKAGES ; do | ||
2112 | adr="$ROOTDIR/pkg/$i" | ||
2113 | if test -d $adr ; then | ||
2114 | SOURCEDIRS="$SOURCEDIRS $adr" | ||
2115 | INCLUDEDIRS="$INCLUDEDIRS $adr" | ||
2116 | edhill | 1.14 | if test "x$i" = xautodiff ; then |
2117 | AUTODIFF_PKG_USED=t | ||
2118 | fi | ||
2119 | edhill | 1.1 | else |
2120 | echo "Error: the directory \"$adr\" for package $i doesn't exist" | ||
2121 | exit 1 | ||
2122 | fi | ||
2123 | done | ||
2124 | |||
2125 | edhill | 1.12 | # Create a list of #define and #undef to enable/disable packages |
2126 | PACKAGES_DOT_H=PACKAGES_CONFIG.h | ||
2127 | edhill | 1.1 | # The following UGLY HACK sets multiple "#undef"s and it needs to go |
2128 | # away. On 2003-08-12, CNH, JMC, and EH3 agreed that the CPP_OPTIONS.h | ||
2129 | # file would eventually be split up so that all package-related #define | ||
2130 | # statements could be separated and handled only by genmake. | ||
2131 | names=`ls -1 "$ROOTDIR/pkg"` | ||
2132 | all_pack= | ||
2133 | adcroft | 1.44 | DISABLED_PACKAGES= |
2134 | edhill | 1.1 | for n in $names ; do |
2135 | if test -d "$ROOTDIR/pkg/$n" -a "x$n" != xCVS ; then | ||
2136 | has_pack="f" | ||
2137 | for pack in $PACKAGES ; do | ||
2138 | if test "x$pack" = "x$n" ; then | ||
2139 | has_pack="t" | ||
2140 | break | ||
2141 | fi | ||
2142 | done | ||
2143 | if test "x$has_pack" = xf ; then | ||
2144 | edhill | 1.116 | undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` |
2145 | adcroft | 1.44 | DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef" |
2146 | edhill | 1.1 | fi |
2147 | fi | ||
2148 | done | ||
2149 | adcroft | 1.44 | ENABLED_PACKAGES= |
2150 | edhill | 1.1 | for i in $PACKAGES ; do |
2151 | edhill | 1.116 | def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` |
2152 | adcroft | 1.44 | ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def" |
2153 | edhill | 1.12 | #eh3 DEFINES="$DEFINES -D$def" |
2154 | edhill | 1.1 | |
2155 | #EH3 WARNING : This is an UGLY HACK that needs to be removed!!! | ||
2156 | case $i in | ||
2157 | aim_v23) | ||
2158 | adcroft | 1.46 | ENABLED_PACKAGES="$ENABLED_PACKAGES -DALLOW_AIM" |
2159 | jmc | 1.55 | echo "Warning: ALLOW_AIM is set to enable aim_v23." |
2160 | edhill | 1.1 | ;; |
2161 | esac | ||
2162 | #EH3 WARNING : This is an UGLY HACK that needs to be removed!!! | ||
2163 | |||
2164 | done | ||
2165 | |||
2166 | echo " Adding STANDARDDIRS" | ||
2167 | BUILDDIR=${BUILDDIR:-.} | ||
2168 | edhill | 1.57 | if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then |
2169 | edhill | 1.12 | STANDARDDIRS="eesupp model" |
2170 | fi | ||
2171 | edhill | 1.57 | if test "x$STANDARDDIRS" != x ; then |
2172 | for d in $STANDARDDIRS ; do | ||
2173 | adr="$ROOTDIR/$d/src" | ||
2174 | if test ! -d $adr ; then | ||
2175 | echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\"" | ||
2176 | echo " is correct and that you correctly specified the STANDARDDIRS option" | ||
2177 | exit 1 | ||
2178 | else | ||
2179 | SOURCEDIRS="$SOURCEDIRS $adr" | ||
2180 | fi | ||
2181 | adr="$ROOTDIR/$d/inc" | ||
2182 | if test ! -d $adr ; then | ||
2183 | echo "Error: directory $adr not found -- please check that ROOTDIR=\"$ROOTDIR\"" | ||
2184 | echo " is correct and that you correctly specified the STANDARDDIRS option" | ||
2185 | exit 1 | ||
2186 | else | ||
2187 | INCLUDEDIRS="$INCLUDEDIRS $adr" | ||
2188 | fi | ||
2189 | done | ||
2190 | fi | ||
2191 | edhill | 1.1 | |
2192 | adcroft | 1.52 | echo " Searching for *OPTIONS.h files in order to warn about the presence" |
2193 | echo " of \"#define \"-type statements that are no longer allowed:" | ||
2194 | edhill | 1.12 | CPP_OPTIONS= |
2195 | adcroft | 1.52 | CPP_EEOPTIONS= |
2196 | edhill | 1.12 | spaths=". $INCLUDEDIRS" |
2197 | adcroft | 1.52 | names=`ls -1 "$ROOTDIR/pkg"` |
2198 | edhill | 1.12 | for i in $spaths ; do |
2199 | try="$i/CPP_OPTIONS.h" | ||
2200 | edhill | 1.54 | if test -f $try -a -r $try -a "x$CPP_OPTIONS" = x ; then |
2201 | edhill | 1.12 | echo " found CPP_OPTIONS=\"$try\"" |
2202 | CPP_OPTIONS="$try" | ||
2203 | adcroft | 1.52 | # New safety test: make sure packages are not mentioned in CPP_OPTIONS.h |
2204 | for n in $names ; do | ||
2205 | test_for_package_in_cpp_options $CPP_OPTIONS $n | ||
2206 | done | ||
2207 | fi | ||
2208 | try="$i/CPP_EEOPTIONS.h" | ||
2209 | edhill | 1.54 | if test -f $try -a -r $try -a "x$CPP_EEOPTIONS" = x ; then |
2210 | adcroft | 1.52 | echo " found CPP_EEOPTIONS=\"$try\"" |
2211 | # New safety test: make sure MPI is not determined by CPP_EEOPTIONS.h | ||
2212 | #**** not yet enabled **** | ||
2213 | # test_for_mpi_in_cpp_eeoptions $try | ||
2214 | #**** not yet enabled **** | ||
2215 | CPP_EEOPTIONS="$try" | ||
2216 | edhill | 1.12 | fi |
2217 | done | ||
2218 | if test "x$CPP_OPTIONS" = x ; then | ||
2219 | echo "Error: can't find \"CPP_OPTIONS.h\" in the path list: $spaths" | ||
2220 | exit 1 | ||
2221 | fi | ||
2222 | edhill | 1.1 | |
2223 | edhill | 1.14 | # Here, we build the list of files to be "run through" the adjoint |
2224 | # compiler. | ||
2225 | jmc | 1.176 | if test -f ./adSrcFiles.tmp ; then |
2226 | rm -f ./adSrcFiles.tmp | ||
2227 | edhill | 1.14 | fi |
2228 | echo " Creating the list of files for the adjoint compiler." | ||
2229 | for i in $SOURCEDIRS ; do | ||
2230 | list_files=`( cd $i && ls -1 *.list 2>/dev/null )` | ||
2231 | for j in $list_files ; do | ||
2232 | jmc | 1.176 | cat $i/$j >> adSrcFiles.tmp |
2233 | edhill | 1.14 | done |
2234 | done | ||
2235 | edhill | 1.121 | if test ! "x"$FS = "x.f" ; then |
2236 | jmc | 1.176 | cat adSrcFiles.tmp | sed -e "s/\.f/.$FS/g" > adSrcFiles.tmp_f |
2237 | mv -f adSrcFiles.tmp_f adSrcFiles.tmp | ||
2238 | edhill | 1.121 | fi |
2239 | edhill | 1.14 | |
2240 | edhill | 1.2 | echo |
2241 | echo "=== Creating the Makefile ===" | ||
2242 | edhill | 1.1 | echo " setting INCLUDES" |
2243 | for i in $INCLUDEDIRS ; do | ||
2244 | edhill | 1.87 | if test ! -d $i ; then |
2245 | edhill | 1.1 | echo "Warning: can't find INCLUDEDIRS=\"$i\"" |
2246 | fi | ||
2247 | done | ||
2248 | |||
2249 | ce107 | 1.139 | if test ! "x$DIVA" = x ; then |
2250 | ce107 | 1.140 | echo " Creating the pseudo-MPI include directory" |
2251 | ce107 | 1.139 | INCLUDES="-I./mpi_headers $INCLUDES" |
2252 | rm -rf ./mpi_headers | ||
2253 | mkdir -p ./mpi_headers | ||
2254 | |||
2255 | if test "x$MPIINCLUDEDIR" = x ; then | ||
2256 | if test "x$MPIHOME" = x ; then | ||
2257 | MPIHOME='/usr' | ||
2258 | fi | ||
2259 | MPIINCLUDEDIR='$MPIHOME/include' | ||
2260 | fi | ||
2261 | |||
2262 | if test -r $MPIINCLUDEDIR/mpif.h ; then | ||
2263 | for i in $MPI_HEADER_FILES; do | ||
2264 | cp -p $MPIINCLUDEDIR/$i ./mpi_headers | ||
2265 | done | ||
2266 | |||
2267 | perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h | ||
2268 | else | ||
2269 | echo " We cannot create a copy of mpif.h!" | ||
2270 | heimbach | 1.156 | # exit -1 |
2271 | ce107 | 1.139 | fi |
2272 | fi | ||
2273 | |||
2274 | edhill | 1.1 | echo " Determining the list of source and include files" |
2275 | rm -rf .links.tmp | ||
2276 | mkdir .links.tmp | ||
2277 | edhill | 1.142 | touch .links.tmp/foo |
2278 | if test ! -r ".links.tmp/foo" ; then | ||
2279 | echo | ||
2280 | echo "ERROR : something is wrong with your directory permissions or" | ||
2281 | echo " your user file-creation mask (\"umask\") since creating a" | ||
2282 | echo " sub-dir, touch-ing a file within it, and then reading it is" | ||
2283 | echo " not working. Please try setting your umask to something" | ||
2284 | echo " sane such as:" | ||
2285 | echo | ||
2286 | echo " umask 0002" | ||
2287 | echo | ||
2288 | echo " and please verify that you have the proper permissions for" | ||
2289 | echo " creating sub-directories and then reading files created" | ||
2290 | echo " within them." | ||
2291 | echo | ||
2292 | exit 1 | ||
2293 | fi | ||
2294 | rm -f .links.tmp/foo | ||
2295 | jmc | 1.176 | |
2296 | if test "x$OPENAD" != x ; then | ||
2297 | OAD_DONT_COMPILE="/dev/null" | ||
2298 | OAD_DONT_TRANSFORM="/dev/null" | ||
2299 | OAD_KEEP_ORIGINAL="/dev/null" | ||
2300 | OAD_CB2M_FILES="/dev/null" | ||
2301 | echo " looking for dontCompile file: " | ||
2302 | for i in "." $MODS ; do | ||
2303 | if test -r $i"/dontCompile" ; then | ||
2304 | OAD_DONT_COMPILE=$i"/dontCompile" | ||
2305 | echo " found $OAD_DONT_COMPILE" | ||
2306 | break | ||
2307 | fi | ||
2308 | done | ||
2309 | echo " looking for dontTransform file: " | ||
2310 | for i in "." $MODS ; do | ||
2311 | if test -r $i"/dontTransform" ; then | ||
2312 | OAD_DONT_TRANSFORM=$i"/dontTransform" | ||
2313 | echo " found $OAD_DONT_TRANSFORM" | ||
2314 | break | ||
2315 | fi | ||
2316 | done | ||
2317 | echo " looking for keepOriginal file: " | ||
2318 | for i in "." $MODS ; do | ||
2319 | if test -r $i"/keepOriginal" ; then | ||
2320 | OAD_KEEP_ORIGINAL=$i"/keepOriginal" | ||
2321 | echo " found $OAD_KEEP_ORIGINAL" | ||
2322 | break | ||
2323 | fi | ||
2324 | done | ||
2325 | echo " looking for cb2mFiles: " | ||
2326 | for i in "." $MODS ; do | ||
2327 | if test -r $i"/cb2mFiles" ; then | ||
2328 | OAD_CB2M_FILES=$i"/cb2mFiles" | ||
2329 | echo " found $OAD_CB2M_FILES" | ||
2330 | break | ||
2331 | fi | ||
2332 | done | ||
2333 | echo " OpenAD exceptions: " | ||
2334 | fi | ||
2335 | |||
2336 | edhill | 1.1 | echo "# This section creates symbolic links" > srclinks.tmp |
2337 | echo "" >> srclinks.tmp | ||
2338 | jmc | 1.176 | printf 'F77_SRC_FILES = ' > F77srclist.tmp |
2339 | printf 'NON_AD_F77_SRC_FILES = ' > nonADF77srclist.tmp | ||
2340 | printf 'C_SRC_FILES = ' > csrclist.tmp | ||
2341 | printf 'F90_SRC_FILES = ' > F90srclist.tmp | ||
2342 | printf 'H_SRC_FILES = ' > hsrclist.tmp | ||
2343 | printf 'AD_FLOW_FILES = ' > ad_flow_files.tmp | ||
2344 | adcroft | 1.9 | alldirs="$SOURCEDIRS $INCLUDEDIRS ." |
2345 | edhill | 1.1 | for d in $alldirs ; do |
2346 | deplist= | ||
2347 | edhill | 1.14 | sfiles=`( cd $d; echo *.[h,c,F] *.flow )` |
2348 | cnh | 1.3 | sfiles=`( echo $sfiles; cd $d; echo *.F90 )` |
2349 | jmc | 1.176 | if test "x$OPENAD" != x ; then |
2350 | sfiles=`( echo $sfiles | grep -v _cb2m\. )` | ||
2351 | fi | ||
2352 | edhill | 1.1 | for sf in $sfiles ; do |
2353 | if test ! -r ".links.tmp/$sf" ; then | ||
2354 | if test -f "$d/$sf" ; then | ||
2355 | edhill | 1.131 | ignore_f=f |
2356 | adcroft | 1.44 | case $d/$sf in |
2357 | ./$PACKAGES_DOT_H) | ||
2358 | edhill | 1.141 | ignore_f=t |
2359 | adcroft | 1.44 | ;; |
2360 | ./AD_CONFIG.h) | ||
2361 | edhill | 1.141 | ignore_f=t |
2362 | adcroft | 1.44 | ;; |
2363 | ./FC_NAMEMANGLE.h) | ||
2364 | edhill | 1.141 | ignore_f=t |
2365 | adcroft | 1.44 | ;; |
2366 | edhill | 1.98 | ./BUILD_INFO.h) |
2367 | edhill | 1.141 | ignore_f=t |
2368 | ;; | ||
2369 | ./EMBEDDED_FILES.h) | ||
2370 | ignore_f=t | ||
2371 | edhill | 1.98 | ;; |
2372 | adcroft | 1.44 | *) |
2373 | edhill | 1.131 | # For the local directory *ONLY*, |
2374 | # ignore all soft-links | ||
2375 | if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then | ||
2376 | ignore_f=t | ||
2377 | else | ||
2378 | touch .links.tmp/$sf | ||
2379 | deplist="$deplist $sf" | ||
2380 | fi | ||
2381 | adcroft | 1.44 | ;; |
2382 | esac | ||
2383 | edhill | 1.131 | if test "x$ignore_f" = xf ; then |
2384 | extn=`echo $sf | $AWK -F. '{print $NF}'` | ||
2385 | case $extn in | ||
2386 | jmc | 1.176 | F) |
2387 | echo " \\" >> F77srclist.tmp | ||
2388 | printf " $sf" >> F77srclist.tmp | ||
2389 | if test "x$OPENAD" != x ; then | ||
2390 | basename=${sf%%.F} | ||
2391 | isAD=`egrep ^$basename.f'[ ]*' adSrcFiles.tmp` | ||
2392 | if test -z "$isAD" ; then | ||
2393 | toBeIgnored=`egrep ^$basename'[ ]*' ${OAD_DONT_COMPILE}` | ||
2394 | if test -z "$toBeIgnored" ; then | ||
2395 | echo " \\" >> nonADF77srclist.tmp | ||
2396 | printf " $sf" >> nonADF77srclist.tmp | ||
2397 | else | ||
2398 | echo " not to be compiled : $sf" | ||
2399 | fi | ||
2400 | else # file is initially listed as an AD file we want to exclude it | ||
2401 | # or we want to retain the untransformed version | ||
2402 | notToBeTransformed=`egrep ^$basename'[ ]*' ${OAD_DONT_TRANSFORM}` | ||
2403 | untransformedVersionToBeKept=`egrep ^$basename'[ ]*' ${OAD_KEEP_ORIGINAL}` | ||
2404 | if test -n "$notToBeTransformed"; then | ||
2405 | echo " not to be transformed: $sf" | ||
2406 | fi | ||
2407 | if test -n "$untransformedVersionToBeKept" ; then | ||
2408 | echo " original to be kept : $sf" | ||
2409 | fi | ||
2410 | if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then | ||
2411 | echo " \\" >> nonADF77srclist.tmp | ||
2412 | printf " $sf" >> nonADF77srclist.tmp | ||
2413 | fi | ||
2414 | fi | ||
2415 | fi | ||
2416 | ;; | ||
2417 | F90) | ||
2418 | echo " \\" >> F90srclist.tmp | ||
2419 | printf " $sf" >> F90srclist.tmp | ||
2420 | ;; | ||
2421 | c) | ||
2422 | echo " \\" >> csrclist.tmp | ||
2423 | printf " $sf" >> csrclist.tmp | ||
2424 | ;; | ||
2425 | h) | ||
2426 | echo " \\" >> hsrclist.tmp | ||
2427 | printf " $sf" >> hsrclist.tmp | ||
2428 | ;; | ||
2429 | flow) | ||
2430 | echo " \\" >> ad_flow_files.tmp | ||
2431 | printf " $sf" >> ad_flow_files.tmp | ||
2432 | ;; | ||
2433 | esac | ||
2434 | fi | ||
2435 | edhill | 1.1 | fi |
2436 | fi | ||
2437 | done | ||
2438 | if test "x$deplist" != x ; then | ||
2439 | jmc | 1.176 | if test "$d" != "." ; then |
2440 | echo "" >> srclinks.tmp | ||
2441 | edhill | 1.2 | echo "# These files are linked from $d" >> srclinks.tmp |
2442 | edhill | 1.1 | echo "$deplist :" >> srclinks.tmp |
2443 | jahn | 1.170 | # We need to make sure that the link isn't already there. |
2444 | # This may happen when make thinks that a header file has to be "remade" | ||
2445 | # because a module it depends on has changed. In this case we do nothing. | ||
2446 | printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $d >> srclinks.tmp | ||
2447 | jmc | 1.176 | fi |
2448 | edhill | 1.1 | fi |
2449 | done | ||
2450 | rm -rf .links.tmp | ||
2451 | jmc | 1.176 | echo "" >> F77srclist.tmp |
2452 | echo "" >> nonADF77srclist.tmp | ||
2453 | echo "" >> csrclist.tmp | ||
2454 | echo "" >> F90srclist.tmp | ||
2455 | echo "" >> hsrclist.tmp | ||
2456 | echo "" >> ad_flow_files.tmp | ||
2457 | edhill | 1.1 | |
2458 | edhill | 1.88 | if test -f $MAKEFILE ; then |
2459 | edhill | 1.1 | mv -f $MAKEFILE "$MAKEFILE.bak" |
2460 | fi | ||
2461 | echo " Writing makefile: $MAKEFILE" | ||
2462 | echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE | ||
2463 | echo "# $MACHINE" >> $MAKEFILE | ||
2464 | echo "# This makefile was generated automatically on" >> $MAKEFILE | ||
2465 | echo "# $THISDATE" >> $MAKEFILE | ||
2466 | echo "# by the command:" >> $MAKEFILE | ||
2467 | edhill | 1.73 | echo "# $0 $G2ARGS" >> $MAKEFILE |
2468 | edhill | 1.1 | echo "# executed by:" >> $MAKEFILE |
2469 | edhill | 1.97 | echo "# ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE |
2470 | edhill | 1.21 | |
2471 | EXE_AD=$EXECUTABLE"_ad" | ||
2472 | EXE_FTL=$EXECUTABLE"_ftl" | ||
2473 | EXE_SVD=$EXECUTABLE"_svd" | ||
2474 | |||
2475 | edhill | 1.1 | cat >>$MAKEFILE <<EOF |
2476 | edhill | 1.53 | # |
2477 | # OPTFILE="$OPTFILE" | ||
2478 | edhill | 1.1 | # |
2479 | # BUILDDIR : Directory where object files are written | ||
2480 | # SOURCEDIRS : Directories containing the source (.F) files | ||
2481 | # INCLUDEDIRS : Directories containing the header-source (.h) files | ||
2482 | # EXEDIR : Directory where executable that is generated is written | ||
2483 | # EXECUTABLE : Full path of executable binary | ||
2484 | # | ||
2485 | # CPP : C-preprocessor command | ||
2486 | # INCLUDES : Directories searched for header files | ||
2487 | # DEFINES : Macro definitions for CPP | ||
2488 | # MAKEDEPEND : Dependency generator | ||
2489 | # KPP : Special preprocessor command (specific to platform) | ||
2490 | # KFLAGS : Flags for KPP | ||
2491 | # FC : Fortran compiler command | ||
2492 | # FFLAGS : Configuration/debugging options for FC | ||
2493 | # FOPTIM : Optimization options for FC | ||
2494 | # LINK : Command for link editor program | ||
2495 | # LIBS : Library flags /or/ additional optimization/debugging flags | ||
2496 | |||
2497 | ROOTDIR = ${ROOTDIR} | ||
2498 | BUILDDIR = ${BUILDDIR} | ||
2499 | SOURCEDIRS = ${SOURCEDIRS} | ||
2500 | INCLUDEDIRS = ${INCLUDEDIRS} | ||
2501 | EXEDIR = ${EXEDIR} | ||
2502 | EXECUTABLE = \$(EXEDIR)/${EXECUTABLE} | ||
2503 | TOOLSDIR = ${TOOLSDIR} | ||
2504 | |||
2505 | edhill | 1.14 | #eh3 new defines for the adjoint work |
2506 | AUTODIFF = ${ROOTDIR}/pkg/autodiff | ||
2507 | edhill | 1.21 | EXE_AD = ${EXE_AD} |
2508 | EXE_FTL = ${EXE_FTL} | ||
2509 | EXE_SVD = ${EXE_SVD} | ||
2510 | edhill | 1.14 | |
2511 | adcroft | 1.44 | ENABLED_PACKAGES = ${ENABLED_PACKAGES} |
2512 | DISABLED_PACKAGES = ${DISABLED_PACKAGES} | ||
2513 | |||
2514 | adcroft | 1.52 | # These files are created by Makefile |
2515 | edhill | 1.97 | SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h |
2516 | edhill | 1.141 | EOF |
2517 | adcroft | 1.52 | |
2518 | edhill | 1.141 | if test "x$EMBED_SRC" = xt ; then |
2519 | echo "EMBEDDED_FILES = EMBEDDED_FILES.h" >>$MAKEFILE | ||
2520 | else | ||
2521 | echo "EMBEDDED_FILES = " >>$MAKEFILE | ||
2522 | fi | ||
2523 | edhill | 1.1 | |
2524 | edhill | 1.141 | # Note: figure out some way to add Hyades JAM libraries here |
2525 | edhill | 1.1 | cat >>$MAKEFILE <<EOF |
2526 | # Unix ln (link) | ||
2527 | LN = ${LN} | ||
2528 | # C preprocessor | ||
2529 | CPP = cat \$< | ${S64} | ${CPP} | ||
2530 | # Dependency generator | ||
2531 | MAKEDEPEND = ${MAKEDEPEND} | ||
2532 | # Special preprocessor (KAP on DECs, FPP on Crays) | ||
2533 | KPP = ${KPP} | ||
2534 | # Fortran compiler | ||
2535 | edhill | 1.94 | FC = ${FC} |
2536 | cnh | 1.3 | # Fortran compiler |
2537 | F90C = ${F90C} | ||
2538 | edhill | 1.92 | # C compiler |
2539 | CC = ${CC} | ||
2540 | edhill | 1.1 | # Link editor |
2541 | edhill | 1.70 | LINK = ${LINK} ${LDADD} |
2542 | edhill | 1.1 | |
2543 | # Defines for CPP | ||
2544 | DEFINES = ${DEFINES} | ||
2545 | # Includes for CPP | ||
2546 | INCLUDES = ${INCLUDES} | ||
2547 | # Flags for KPP | ||
2548 | KFLAGS1 = ${KFLAGS1} | ||
2549 | KFLAGS2 = ${KFLAGS2} | ||
2550 | # Optim./debug for FC | ||
2551 | mlosch | 1.165 | FFLAGS = ${FFLAGS} ${FEXTRAFLAGS} |
2552 | edhill | 1.1 | FOPTIM = ${FOPTIM} |
2553 | cnh | 1.3 | # Optim./debug for FC |
2554 | F90FLAGS = ${F90FLAGS} | ||
2555 | F90OPTIM = ${F90OPTIM} | ||
2556 | jmc | 1.176 | F90FIXEDFORMAT = ${F90FIXEDFORMAT} |
2557 | edhill | 1.1 | # Flags for CC |
2558 | CFLAGS = ${CFLAGS} | ||
2559 | # Files that should not be optimized | ||
2560 | NOOPTFILES = ${NOOPTFILES} | ||
2561 | NOOPTFLAGS = ${NOOPTFLAGS} | ||
2562 | # Flags and libraries needed for linking | ||
2563 | edhill | 1.107 | LIBS = ${LIBS} |
2564 | cnh | 1.3 | # Name of the Mekfile |
2565 | MAKEFILE=${MAKEFILE} | ||
2566 | edhill | 1.1 | |
2567 | EOF | ||
2568 | |||
2569 | jmc | 1.176 | cat F77srclist.tmp >> $MAKEFILE |
2570 | cat nonADF77srclist.tmp >> $MAKEFILE | ||
2571 | cat csrclist.tmp >> $MAKEFILE | ||
2572 | cat F90srclist.tmp >> $MAKEFILE | ||
2573 | cat hsrclist.tmp >> $MAKEFILE | ||
2574 | cat ad_flow_files.tmp >> $MAKEFILE | ||
2575 | |||
2576 | rm -f F77srclist.tmp nonADF77srclist.tmp csrclist.tmp F90srclist.tmp hsrclist.tmp ad_flow_files.tmp | ||
2577 | |||
2578 | edhill | 1.75 | echo >> $MAKEFILE |
2579 | jmc | 1.176 | |
2580 | # add definitions for preprocessed sources | ||
2581 | # and note that not all systems allow case sensitive extensions | ||
2582 | # hence the $FS and $FS90 here. | ||
2583 | # for fixed format f90 files we use ff90 or FF90 resp | ||
2584 | # but these are not expected to be the original source files | ||
2585 | |||
2586 | echo 'F77_PP_SRC_FILES = $(F77_SRC_FILES:.F=.'$FS')' >> $MAKEFILE | ||
2587 | echo 'F90_PP_SRC_FILES = $(F90_SRC_FILES:.F90=.'$FS90')' >> $MAKEFILE | ||
2588 | echo 'OBJFILES= $(F77_SRC_FILES:.F=.o) $(C_SRC_FILES:.c=.o) $(F90_SRC_FILES:.F90=.o)' >> $MAKEFILE | ||
2589 | dfer | 1.172 | echo 'FLOFILES = $(AD_FLOW_FILES:.flow=.flowdir)' >> $MAKEFILE |
2590 | edhill | 1.75 | echo >> $MAKEFILE |
2591 | echo '.SUFFIXES:' >> $MAKEFILE | ||
2592 | jmc | 1.176 | echo '.SUFFIXES: .o .'$FS' .p .F .c .f'$FS90' .'$FS90' .FF90 .F90 .flowdir .flow' >> $MAKEFILE |
2593 | edhill | 1.1 | |
2594 | cat >>$MAKEFILE <<EOF | ||
2595 | |||
2596 | all: \$(EXECUTABLE) | ||
2597 | jmc | 1.176 | \$(EXECUTABLE): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(OBJFILES) \$(EMBEDDED_FILES) |
2598 | adcroft | 1.44 | @echo Creating \$@ ... |
2599 | edhill | 1.1 | \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS) |
2600 | depend: | ||
2601 | @make links | ||
2602 | jmc | 1.176 | \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES) |
2603 | adcroft | 1.44 | \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE) |
2604 | edhill | 1.72 | -rm -f makedepend.out |
2605 | edhill | 1.1 | |
2606 | cnh | 1.132 | lib: libmitgcmuv.a |
2607 | |||
2608 | libmitgcmuv.a: \$(OBJFILES) | ||
2609 | ar rcv libmitgcmuv.a \$(OBJFILES) | ||
2610 | cnh | 1.159 | ar d libmitgcmuv.a main.o |
2611 | cnh | 1.132 | |
2612 | jmc | 1.176 | links: \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(SPECIAL_FILES) |
2613 | edhill | 1.1 | |
2614 | jmc | 1.176 | small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES) |
2615 | edhill | 1.1 | |
2616 | output.txt: \$(EXECUTABLE) | ||
2617 | @printf 'running ... ' | ||
2618 | @\$(EXECUTABLE) > \$@ | ||
2619 | |||
2620 | clean: | ||
2621 | heimbach | 1.157 | -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template |
2622 | -rm -rf *.o | ||
2623 | dfer | 1.172 | -rm -rf *.$FS *.flowdir |
2624 | jmc | 1.176 | -rm -rf *.f$FS90 *_mod.h *_mod.F90 *.FF90 *.mod-whirl ad_input* |
2625 | utke | 1.178 | -rm -rf temp.sed |
2626 | edhill | 1.1 | Clean: |
2627 | @make clean | ||
2628 | @make cleanlinks | ||
2629 | adcroft | 1.52 | -rm -f \$(SPECIAL_FILES) |
2630 | dfer | 1.172 | -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log f90mkdepend.log *.bak |
2631 | jmc | 1.166 | -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log |
2632 | edhill | 1.1 | CLEAN: |
2633 | @make Clean | ||
2634 | -find \$(EXEDIR) -name "*.meta" -exec rm {} \; | ||
2635 | -find \$(EXEDIR) -name "*.data" -exec rm {} \; | ||
2636 | -find \$(EXEDIR) -name "fort.*" -exec rm {} \; | ||
2637 | jmc | 1.152 | -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime |
2638 | jmc | 1.166 | -rm -f *_MIT_CE_000.opt0000 costfunction*0000 |
2639 | edhill | 1.144 | -rm -rf mnc_test_* |
2640 | edhill | 1.1 | |
2641 | edhill | 1.18 | #eh3 Makefile: makefile |
2642 | edhill | 1.1 | makefile: |
2643 | edhill | 1.73 | $THIS_SCRIPT $G2ARGS |
2644 | edhill | 1.1 | cleanlinks: |
2645 | -find . -type l -exec rm {} \; | ||
2646 | |||
2647 | jmc | 1.176 | # Special targets (SPECIAL_FILES) which are created by make |
2648 | adcroft | 1.44 | ${PACKAGES_DOT_H}: |
2649 | @echo Creating \$@ ... | ||
2650 | edhill | 1.71 | @$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) > \$@ |
2651 | adcroft | 1.44 | AD_CONFIG.h: |
2652 | @echo Creating \$@ ... | ||
2653 | edhill | 1.71 | @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > \$@ |
2654 | adcroft | 1.52 | FC_NAMEMANGLE.h: |
2655 | @echo Creating \$@ ... | ||
2656 | echo "$FC_NAMEMANGLE" > \$@ | ||
2657 | adcroft | 1.44 | |
2658 | edhill | 1.97 | BUILD_INFO.h: |
2659 | @echo Creating \$@ ... | ||
2660 | EOF | ||
2661 | |||
2662 | test ! "x$THISVER" = x && echo " -echo \"#define THISVER '$THISVER'\" > \$@" >> $MAKEFILE | ||
2663 | test ! "x$THISUSER" = x && echo " -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE | ||
2664 | test ! "x$THISDATE" = x && echo " -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE | ||
2665 | test ! "x$THISHOST" = x && echo " -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE | ||
2666 | |||
2667 | edhill | 1.141 | if test "x$EMBED_SRC" = xt ; then |
2668 | cat >>$MAKEFILE <<EOF | ||
2669 | |||
2670 | decode_files.o : EMBEDDED_FILES.h | ||
2671 | |||
2672 | jmc | 1.176 | ## \$(F77_PP_SRC_FILES) |
2673 | all_fF.tar.gz : \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile | ||
2674 | edhill | 1.141 | @echo Creating \$@ ... |
2675 | jmc | 1.176 | -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile |
2676 | edhill | 1.141 | -rm -f all_fF.tar.gz |
2677 | -gzip all_fF.tar | ||
2678 | |||
2679 | EMBEDDED_FILES.h : all_fF.tar.gz | ||
2680 | @echo Creating \$@ ... | ||
2681 | -\${ROOTDIR}/tools/embed_encode/encode_files EMBEDDED_FILES.h all_fF.tar.gz | ||
2682 | |||
2683 | EOF | ||
2684 | fi | ||
2685 | |||
2686 | edhill | 1.97 | cat >>$MAKEFILE <<EOF |
2687 | |||
2688 | edhill | 1.76 | # The normal chain of rules is ( .F - .$FS - .o ) |
2689 | |||
2690 | edhill | 1.101 | ## This nullifies any default implicit rules concerning these two file types: |
2691 | jmc | 1.177 | ## %.o : %.F |
2692 | edhill | 1.76 | |
2693 | .F.$FS: | ||
2694 | edhill | 1.1 | \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ |
2695 | edhill | 1.76 | .$FS.o: |
2696 | edhill | 1.1 | \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$< |
2697 | jmc | 1.176 | .F90.$FS90: |
2698 | \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ | ||
2699 | .FF90.f$FS90: | ||
2700 | \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ | ||
2701 | .$FS90.o: | ||
2702 | cnh | 1.3 | \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$< |
2703 | jmc | 1.176 | .f$FS90.o: |
2704 | cp \$< \$(basename \$<).f90 | ||
2705 | \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$(F90FIXEDFORMAT) \$(basename \$<).f90 | ||
2706 | edhill | 1.1 | .c.o: |
2707 | ce107 | 1.139 | \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$< |
2708 | dfer | 1.172 | .flow.flowdir: |
2709 | heimbach | 1.171 | \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ |
2710 | edhill | 1.1 | |
2711 | edhill | 1.76 | # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain |
2712 | .F.p: | ||
2713 | edhill | 1.1 | \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@ |
2714 | edhill | 1.76 | .p.$FS: |
2715 | edhill | 1.1 | \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$< |
2716 | edhill | 1.14 | |
2717 | jmc | 1.176 | EOF |
2718 | |||
2719 | edhill | 1.14 | #========================================= |
2720 | #=== Automatic Differentiation Rules === | ||
2721 | jmc | 1.176 | #=== for TAMC/TAF ====================== |
2722 | |||
2723 | if test "x$OPENAD" == x ; then | ||
2724 | |||
2725 | cat >>$MAKEFILE <<EOF | ||
2726 | edhill | 1.14 | |
2727 | TAMC = ${TAMC} | ||
2728 | TAF = ${TAF} | ||
2729 | |||
2730 | edhill | 1.17 | TAF_EXTRA = ${TAF_EXTRA} |
2731 | TAMC_EXTRA = ${TAMC_EXTRA} | ||
2732 | |||
2733 | edhill | 1.14 | EOF |
2734 | |||
2735 | ad_vars="AD_TAMC_FLAGS AD_TAF_FLAGS" | ||
2736 | ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF_FLAGS" | ||
2737 | ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS" | ||
2738 | for i in $ad_vars ; do | ||
2739 | name=$i | ||
2740 | edhill | 1.151 | t1="t2=\$"`echo "$i"` |
2741 | edhill | 1.14 | eval $t1 |
2742 | printf "%-20s = " $name >> $MAKEFILE | ||
2743 | edhill | 1.151 | echo "$t2" | sed -e 's| \+| |g' >> $MAKEFILE |
2744 | edhill | 1.14 | done |
2745 | |||
2746 | echo " Add the source list for AD code generation" | ||
2747 | echo >> $MAKEFILE | ||
2748 | edhill | 1.71 | printf "AD_FILES = " >> $MAKEFILE |
2749 | jmc | 1.176 | AD_FILES=`cat adSrcFiles.tmp` |
2750 | edhill | 1.14 | for i in $AD_FILES ; do |
2751 | echo " \\" >> $MAKEFILE | ||
2752 | edhill | 1.71 | printf " $i" >> $MAKEFILE |
2753 | edhill | 1.14 | done |
2754 | echo >> $MAKEFILE | ||
2755 | jmc | 1.176 | rm -f adSrcFiles.tmp |
2756 | edhill | 1.14 | |
2757 | cat >>$MAKEFILE <<EOF | ||
2758 | |||
2759 | edhill | 1.16 | # ... AD ... |
2760 | jmc | 1.152 | adall: \$(EXE_AD) |
2761 | edhill | 1.121 | adtaf: ad_taf_output.$FS |
2762 | adtamc: ad_tamc_output.$FS | ||
2763 | edhill | 1.21 | |
2764 | jmc | 1.176 | ad_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES) |
2765 | edhill | 1.71 | @$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 |
2766 | edhill | 1.23 | cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h |
2767 | adcroft | 1.44 | -rm -f ad_config.template |
2768 | jmc | 1.176 | @make \$(F77_PP_SRC_FILES) |
2769 | heimbach | 1.171 | @make \$(FLOFILES) |
2770 | cat \$(FLOFILES) \$(AD_FILES) > ad_input_code.$FS | ||
2771 | edhill | 1.22 | |
2772 | edhill | 1.121 | ad_taf_output.$FS: ad_input_code.$FS |
2773 | \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS | ||
2774 | jmc | 1.173 | ls -l ad_input_code_ad.$FS |
2775 | edhill | 1.121 | cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS |
2776 | heimbach | 1.37 | |
2777 | adtafonly: | ||
2778 | edhill | 1.121 | \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS |
2779 | jmc | 1.173 | ls -l ad_input_code_ad.$FS |
2780 | edhill | 1.121 | cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS |
2781 | edhill | 1.14 | |
2782 | jmc | 1.152 | \${EXE_AD}: ad_taf_output.o \$(OBJFILES) |
2783 | \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS) | ||
2784 | edhill | 1.14 | |
2785 | edhill | 1.121 | ad_tamc_output.$FS: ad_input_code.$FS |
2786 | \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS | ||
2787 | cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS | ||
2788 | edhill | 1.14 | |
2789 | ad_tamc: ad_tamc_output.o \$(OBJFILES) | ||
2790 | edhill | 1.21 | \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS) |
2791 | edhill | 1.14 | |
2792 | heimbach | 1.105 | adonlyfwd: |
2793 | edhill | 1.106 | patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff |
2794 | heimbach | 1.105 | |
2795 | adtrick: | ||
2796 | edhill | 1.106 | patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff |
2797 | edhill | 1.14 | |
2798 | edhill | 1.19 | # ... FTL ... |
2799 | edhill | 1.23 | ftlall: ftl_taf |
2800 | edhill | 1.121 | ftltaf: ftl_taf_output.$FS |
2801 | ftltamc: ftl_tamc_output.$FS | ||
2802 | edhill | 1.21 | |
2803 | jmc | 1.176 | ftl_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES) |
2804 | edhill | 1.71 | @$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 |
2805 | edhill | 1.23 | cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h |
2806 | adcroft | 1.44 | -rm -f ftl_config.template |
2807 | jmc | 1.176 | @make \$(F77_PP_SRC_FILES) |
2808 | edhill | 1.22 | @make \$(AD_FLOW_FILES) |
2809 | edhill | 1.121 | cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS |
2810 | edhill | 1.22 | |
2811 | edhill | 1.121 | ftl_taf_output.$FS: ftl_input_code.$FS |
2812 | \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS | ||
2813 | jmc | 1.173 | ls -l ftl_input_code_ftl.$FS |
2814 | edhill | 1.121 | cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS |
2815 | edhill | 1.14 | |
2816 | heimbach | 1.40 | ftltafonly: |
2817 | edhill | 1.121 | \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS |
2818 | jmc | 1.173 | ls -l ftl_input_code_ftl.$FS |
2819 | edhill | 1.121 | cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS |
2820 | heimbach | 1.40 | |
2821 | edhill | 1.19 | ftl_taf: ftl_taf_output.o \$(OBJFILES) |
2822 | edhill | 1.21 | \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS) |
2823 | edhill | 1.14 | |
2824 | edhill | 1.121 | ftl_tamc_output.$FS: ftl_input_code.$FS |
2825 | \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS | ||
2826 | cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.$FS | ||
2827 | edhill | 1.16 | |
2828 | edhill | 1.19 | ftl_tamc: ftl_tamc_output.o \$(OBJFILES) |
2829 | edhill | 1.21 | \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS) |
2830 | edhill | 1.16 | |
2831 | |||
2832 | # ... SVD ... | ||
2833 | edhill | 1.121 | svdtaf: ad_taf_output.$FS ftl_taf_output.$FS |
2834 | heimbach | 1.109 | @echo "--->>> Only ran TAF to generate SVD code! <<<---" |
2835 | @echo "--->>> Do make svdall afterwards to compile. <<<---" | ||
2836 | svdall: svd_touch svd_taf | ||
2837 | edhill | 1.16 | |
2838 | heimbach | 1.109 | svd_taf: \$(OBJFILES) |
2839 | heimbach | 1.40 | \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS) |
2840 | edhill | 1.14 | |
2841 | heimbach | 1.109 | @echo "--->>> Only COMPILE svd code! <<<---" |
2842 | @echo "--->>> Assumes you previously <<<---" | ||
2843 | @echo "--->>> did make svdtaf <<<---" | ||
2844 | |||
2845 | svd_touch: | ||
2846 | @echo "--->>> Only COMPILE svd code! <<<---" | ||
2847 | @echo "--->>> Assumes you previously <<<---" | ||
2848 | @echo "--->>> did make svdtaf <<<---" | ||
2849 | edhill | 1.121 | touch ad_taf_output.$FS ftl_taf_output.$FS |
2850 | \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS | ||
2851 | \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS | ||
2852 | heimbach | 1.109 | @$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 |
2853 | cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h | ||
2854 | -rm -f ftl_config.template | ||
2855 | edhill | 1.14 | |
2856 | jmc | 1.176 | EOF |
2857 | |||
2858 | fi | ||
2859 | |||
2860 | #=== for OpenAD ======================== | ||
2861 | |||
2862 | if test "x$OPENAD" != x ; then | ||
2863 | |||
2864 | # ============ begin OpenAD specific section ============== | ||
2865 | |||
2866 | cat >>$MAKEFILE <<EOF | ||
2867 | |||
2868 | # all the source files linked from the various locations: | ||
2869 | ALL_LINKED_FILES= \ | ||
2870 | \$(F77_SRC_FILES) \ | ||
2871 | \$(C_SRC_FILES) \ | ||
2872 | \$(H_SRC_FILES) \ | ||
2873 | \$(F90_SRC_FILES) \ | ||
2874 | \$(SPECIAL_FILES) | ||
2875 | |||
2876 | ifndef OPENADROOT | ||
2877 | \$(error "Error: environment variable OPENADROOT not defined!") | ||
2878 | endif | ||
2879 | |||
2880 | ifndef XAIFSCHEMAROOT | ||
2881 | \$(error "Error: environment variable XAIFSCHEMAROOT not defined!") | ||
2882 | endif | ||
2883 | |||
2884 | ifndef XAIFBOOSTERROOT | ||
2885 | \$(error "Error: environment variable XAIFBOOSTERROOT not defined!") | ||
2886 | endif | ||
2887 | |||
2888 | EOF | ||
2889 | |||
2890 | echo " Add the source list for common block to module conversion " | ||
2891 | echo >> $MAKEFILE | ||
2892 | printf "CB2M_F90_SRC_NAMES = " >> $MAKEFILE | ||
2893 | for i in `cat ${OAD_CB2M_FILES}` ; do | ||
2894 | echo " \\" >> $MAKEFILE | ||
2895 | printf " $i" >> $MAKEFILE | ||
2896 | done | ||
2897 | echo >> $MAKEFILE | ||
2898 | |||
2899 | echo " Add the source list for AD code generation" | ||
2900 | echo >> $MAKEFILE | ||
2901 | printf "AD_FILES = " >> $MAKEFILE | ||
2902 | for i in `cat ${OAD_CB2M_FILES}` ; do | ||
2903 | echo " \\" >> $MAKEFILE | ||
2904 | printf " ${i}_mod.f$FS90" >> $MAKEFILE | ||
2905 | done | ||
2906 | AD_FILES=`cat adSrcFiles.tmp` | ||
2907 | for i in $AD_FILES ; do | ||
2908 | basename=${i%%.f} | ||
2909 | toBeIgnored=`egrep ^$basename'[ ]*' ${OAD_DONT_COMPILE} ${OAD_DONT_TRANSFORM}` | ||
2910 | if test -z "$toBeIgnored" ; then | ||
2911 | echo " \\" >> $MAKEFILE | ||
2912 | printf " $i" >> $MAKEFILE | ||
2913 | fi | ||
2914 | done | ||
2915 | echo >> $MAKEFILE | ||
2916 | rm -f adSrcFiles.tmp | ||
2917 | |||
2918 | cat >>$MAKEFILE <<EOF | ||
2919 | |||
2920 | adAll: \$(EXE_AD) | ||
2921 | .PHONY: adAll | ||
2922 | |||
2923 | CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES)) | ||
2924 | |||
2925 | .PRECIOUS: \$(CB2M_F90_PP_SRC_FILES) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90) | ||
2926 | |||
2927 | .PHONY: adDepend | ||
2928 | adDepend: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(addsuffix _mod.FF90, \$(CB2M_F90_SRC_NAMES)) \$(F77_SRC_FILES:.F=_cb2m.FF90) | ||
2929 | \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES) | ||
2930 | \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE) | ||
2931 | -rm -f makedepend.out | ||
2932 | |||
2933 | OPENAD_SUPPORT_F90_SRC_FILES = \ | ||
2934 | w2f__types.F90 \ | ||
2935 | OAD_active.F90 \ | ||
2936 | OAD_cp.F90 \ | ||
2937 | OAD_rev.F90 \ | ||
2938 | OAD_tape.F90 | ||
2939 | |||
2940 | OPENAD_SUPPORT_C_SRC_FILES = \ | ||
2941 | iaddr.c \ | ||
2942 | timeRatio.c | ||
2943 | |||
2944 | f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90) | ||
2945 | cat \$^ > \$@ | ||
2946 | |||
2947 | utke | 1.178 | 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 |
2948 | jmc | 1.176 | cat \$^ > \$@ |
2949 | |||
2950 | f95_test.out: f95_test_mods.f90 f95_test.f90 | ||
2951 | f95 -fixed -w=unused -maxcontin=132 -c f95_test_mods.f90 > \$@ 2>&1 | ||
2952 | f95 -fixed -w=unused -maxcontin=132 -c -fixed f95_test.f90 >> \$@ 2>&1 | ||
2953 | |||
2954 | utke | 1.178 | AD_OBJ_FILES=\$(OPENAD_SUPPORT_F90_SRC_FILES:.F90=.o) \$(OPENAD_SUPPORT_C_SRC_FILES:.c=.o) all_mods.xb.x2w.w2f.pp.o ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.o \$(NON_AD_F77_SRC_FILES:.F=_cb2m.o) \$(C_SRC_FILES:.c=.o) \$(F90_SRC_FILES:.F90=.o) |
2955 | jmc | 1.176 | |
2956 | \$(EXE_AD): \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(AD_OBJ_FILES) | ||
2957 | @echo Creating \$@ ... | ||
2958 | \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(AD_OBJ_FILES) \$(LIBS) | ||
2959 | |||
2960 | # makefile debug rule | ||
2961 | utke | 1.178 | openad: ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90 |
2962 | jmc | 1.176 | .PHONY: openad |
2963 | |||
2964 | # create the module files | ||
2965 | %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk | ||
2966 | ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk | ||
2967 | |||
2968 | # create the header files | ||
2969 | %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk | ||
2970 | ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES) | ||
2971 | |||
2972 | # change everybody else to use the new module files: | ||
2973 | %_cb2m.FF90 : %.F ../OAD_support/cb2mUseModules.bash | ||
2974 | ../OAD_support/cb2mUseModules.bash $< ${MPI} | ||
2975 | |||
2976 | # makefile debug rule | ||
2977 | small_f: \$(CB2M_F90_PP_SRC_FILES) | ||
2978 | .PH |