/[MITgcm]/MITgcm/tools/genmake
ViewVC logotype

Contents of /MITgcm/tools/genmake

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.20 - (show annotations) (download)
Mon Nov 13 16:40:02 2000 UTC (23 years, 4 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint32
Changes since 1.19: +49 -11 lines
Adopted to new routine external_fields_load.F.

1 #!/bin/csh -f
2 #
3 # $Header: /u/gcmpack/models/MITgcmUV/tools/genmake,v 1.19 2000/09/12 19:20:35 heimbach Exp $
4 #
5 # Makefile generator for MITgcm UV codes
6 # created by cnh 03/98
7 # adapted by aja 06/98
8
9 # Process command-line arguments
10 set allargs=( $argv )
11 while ($#allargs)
12 set arg = $allargs[1]
13 switch ($arg)
14 case -makefile:
15 set mfile = ( Makefile )
16 breaksw
17 case -makefile=*:
18 set mfile = ( `echo $arg | sed 's/-makefile=//' `)
19 breaksw
20 case -platform:
21 case -platform=:
22 echo "To change platform you must specify one with -platform="
23 echo "eg. -platform=sparc or -platform=mips"
24 exit
25 breaksw
26 case -platform*:
27 set platform = ( `echo $arg | sed 's/-platform=//' `)
28 breaksw
29 case -mpi:
30 echo "Enabling MPI options"
31 set USEMPI
32 breaksw
33 case -jam:
34 set include_jam_libs
35 echo "Including paths to JAM libraries"
36 breaksw
37 case -help:
38 echo "usage: $0 [-help] [-makefile[=...]] [-platform=...] [-mpi]"
39 exit
40 breaksw
41 default:
42 echo "Unknown command-line option: " $arg
43 echo $0 "-help to show usage"
44 exit
45 breaksw
46 endsw
47 shift allargs
48 end
49
50 if ($?platform == 0) then
51 set platform = (`uname`)
52 endif
53 if ($?mfile == 0) set mfile = ( Makefile.$platform )
54 set mach = ( `uname -a` )
55 echo Operating system: $mach
56
57 # Directories for source, includes, binaries and executables
58 # Note
59 # o If you prefer/need everything under a single directory
60 # copy everything in ../eesupp/src, ../model/src,
61 # ../eesupp/inc and ../model/inc into a directory and then
62 # edit the paths below to ./
63 set SOURCEDIRS = ( ../eesupp/src/ ../model/src/ ../diags/src/ ../pkg/*/ )
64 set INCLUDEDIRS = ( ./ ../eesupp/inc/ ../model/inc/ ../diags/inc/ ../pkg/*/ )
65 set BUILDDIR = ( ../bin/ )
66 set EXEDIR = ( ../exe/ )
67 set EXECUTABLE = ( mitgcmuv )
68
69 # This is the generic configuration.
70 # Platform specific options are chosen below
71 set LN = ( 'ln -sf' )
72 set CPP = ( '/lib/cpp -P' )
73 set KPP = ( )
74 set FC = ( 'f77' )
75 set LINK = ( 'f77' )
76 set DEFINES = ( )
77 set INCLUDES = ( )
78 set FFLAGS = ( )
79 set FOPTIM = ( )
80 set KFLAGS1 = ( )
81 set KFLAGS2 = ( )
82 set LIBS = ( )
83 set KPPFILES = ( )
84 set NOOPTFILES = ( )
85 set NOOPTFLAGS = ( )
86 set RMFILES = ( )
87
88 # We often want to use different compile/link options is using MPI
89 if ($?USEMPI) then
90 set USEMPI = ( '+mpi' )
91 set DEFINES = ( ${DEFINES} '-DALLOW_USE_MPI -DALWAYS_USE_MPI' )
92 else
93 set USEMPI
94 # set DEFINES = ( ${DEFINES} '-UALLOW_USE_MPI -UALWAYS_USE_MPI' )
95 endif
96
97 # Platform specific options
98 switch ($platform$USEMPI)
99 case OSF1:
100 case OSF1+mpi:
101 echo "Configuring for DEC Alpha"
102 set CPP = ( '/usr/bin/cpp -P' )
103 set DEFINES = ( ${DEFINES} '-DTARGET_DEC -DWORDLENGTH=1' )
104 set KPP = ( 'kapf' )
105 set KPPFILES = ( 'main.F' )
106 set KFLAGS1 = ( '-scan=132 -noconc -cmp=' )
107 set FC = ( 'f77' )
108 set FFLAGS = ( '-convert big_endian -r8 -extend_source -u -automatic -call_shared -notransform_loops -align dcommons' )
109 set FOPTIM = ( '-O5 -fast -tune host -inline all' )
110 set NOOPTFLAGS = ( '-O0' )
111 set LIBS = ( '-lfmpi -lmpi -lkmp_osfp10 -pthread' )
112 set NOOPTFILES = ( 'barrier.F different_multiple.F external_fields_load.F')
113 set RMFILES = ( '*.p.out' )
114 breaksw
115 case IRIX64+mpi:
116 echo "Configuring for SGI Mips with MPI"
117 set DEFINES = ( ${DEFINES} '-DTARGET_SGI -DWORDLENGTH=4' )
118 set INCLUDES = ( '-I/usr/local/mpi/include' )
119 set FC = ( 'mpif77' )
120 set LINK = ( 'mpif77' )
121 set FFLAGS = ( '-extend_source -bytereclen -r10000 -mips4' )
122 set FOPTIM = ( '-O3' )
123 set RMFILES = ( 'rii_files' )
124 breaksw
125 case IRIX64:
126 echo "Configuring for SGI Mips"
127 set DEFINES = ( ${DEFINES} '-DTARGET_SGI -DWORDLENGTH=4' )
128 set INCLUDES = ( '-I/usr/local/mpi/include' )
129 set FFLAGS = ( '-extend_source -mp -mpio -bytereclen -r10000 -mips4' )
130 set FOPTIM = ( '-O3' )
131 # set NOOPTFLAGS = ( '-O0' )
132 # set NOOPTFILES = ( 'barrier.F different_multiple.F ' \
133 # 'external_fields_load.F' )
134 set RMFILES = ( 'rii_files' )
135 breaksw
136 case o2:
137 case IRIX:
138 echo "Configuring for SGI O2 running IRIX 6.5"
139 set DEFINES = ( ${DEFINES} '-DTARGET_SGI -DWORDLENGTH=4' )
140 set FFLAGS = ( '-extend_source -bytereclen -r10000 -mips4' )
141 set FOPTIM = ( '-O2' )
142 set NOOPTFLAGS = ( '-O0' )
143 breaksw
144 case o2+mpi:
145 case IRIX+mpi:
146 echo "Configuring for SGI O2 running IRIX 6.5 with MPI"
147 set DEFINES = ( ${DEFINES} '-DTARGET_SGI -DWORDLENGTH=4' )
148 set FFLAGS = ( '-extend_source -bytereclen -r10000 -mips4' )
149 set FOPTIM = ( '-O2' )
150 set NOOPTFILES = ( 'barrier.F different_multiple.F external_fields_load.F' )
151 set NOOPTFLAGS = ( '-O0' )
152 set LIBS = ( '-lmpi' )
153 breaksw
154 case o2k+mpi:
155 echo "Configuring for SGI Origin2000 running IRIX 6.5"
156 set DEFINES = ( ${DEFINES} '-DTARGET_SGI -DWORDLENGTH=4' )
157 set INCLUDES = ( '-I/usr/include' )
158 set FFLAGS = ( '-n32 -extend_source -bytereclen' )
159 set FOPTIM = ( '-O2' )
160 set NOOPTFILES = ( 'calc_mom_rhs.F' )
161 set NOOPTFLAGS = ( '-O1' )
162 set LIBS = ( '-lmpi -lscs' )
163 breaksw
164 case onyx:
165 case onyx+mpi:
166 echo "Configuring for SGI ONYX running IRIX64"
167 set DEFINES = ( ${DEFINES} '-DTARGET_SGI -DWORDLENGTH=4' )
168 set FFLAGS = ( '-extend_source -bytereclen -r10000 -64' )
169 set FOPTIM = ( '-O2' )
170 set NOOPTFLAGS = ( '-O0' )
171 set NOOPTFILES = ( 'barrier.F different_multiple.F external_fields_load.F' )
172 set LIBS = ( '-lmpi' )
173 breaksw
174 case SunOS:
175 set LN = ( '/usr/bin/ln -fs' )
176 set CPP = ( '/usr/ccs/lib/cpp -P' )
177 set DEFINES = ( ${DEFINES} '-DTARGET_SUN -DWORDLENGTH=4' )
178 set FFLAGS = ( '-stackvar -explicitpar -vpara -e -u -noautopar')
179 set FOPTIM = ( '-fast -O3' )
180 set NOOPTFLAGS = ( '-O0' )
181 set NOOPTFILES = ( 'barrier.F different_multiple.F external_fields_load.F ini_vertical_grid.F')
182 breaksw
183 case SunOS+mpi:
184 set LN = ( '/usr/bin/ln -fs' )
185 set CPP = ( '/usr/ccs/lib/cpp -P' )
186 set DEFINES = ( ${DEFINES} '-DTARGET_SUN -DWORDLENGTH=4' )
187 set INCLUDES = ( '-I/usr/local/mpi/include' )
188 set FFLAGS = ( '-stackvar -explicitpar -vpara -e -u -noautopar')
189 set FOPTIM = ( '-fast -O3' )
190 set NOOPTFLAGS = ( '-O0' )
191 set LIBS = ( '-L/usr/local/mpi/lib/solaris/ch_shmem -lmpi -lthread' \
192 '-lsocket -lnsl' )
193 set NOOPTFILES = ( 'barrier.F different_multiple.F external_fields_load.F ini_vertical_grid.F')
194 breaksw
195 case IRIX32:
196 echo "Configuring for SGI ONYX running IRIX64"
197 set DEFINES = ( ${DEFINES} '-DTARGET_SGI -DWORDLENGTH=4' )
198 set INCLUDES = ( '-I/usr/include' )
199 set FFLAGS = ( '-extend_source -bytereclen -r10000 -64' )
200 set FOPTIM = ( '-O2' )
201 set NOOPTFLAGS = ( '-O0' )
202 set NOOPTFILES = ( 'barrier.F different_multiple.F ' \
203 'external_fields_load.F' )
204 set LIBS = ( '-lmpi' )
205 breaksw
206 case HP-UX+mpi:
207 set FC = ( 'mpif77' )
208 set LINK = ( 'mpif77' )
209 set INCLUDES = ( '-I/opt/mpi/include' )
210 case HP-UX:
211 echo "Configuring for HP Exemplar"
212 set CPP = ( '/usr/ccs/lbin/cpp -P' )
213 set DEFINES = ( ${DEFINES} '-DTARGET_HP -DWORDLENGTH=4' )
214 set FFLAGS = ( '+es +U77 +Onoautopar +Oexemplar_model' \
215 '+Okernel_threads' )
216 set FOPTIM = ( '+O2' )
217 set NOOPTFLAGS = ( '+O0' )
218 set NOOPTFILES = ( 'barrier.F different_multiple.F' \
219 'external_fields_load.F' )
220 breaksw
221 case Linux+mpi:
222 set LIBS = ( '-L/usr/local/lib/LINUX/ch_p4/ -lfmpich -lmpich' )
223 set INCLUDES = ( '-I/usr/local/include' )
224 case Linux:
225 set LN = ( '/bin/ln -fs' )
226 set CPP = ( '/lib/cpp -traditional -P' )
227 set DEFINES = ( ${DEFINES} '-D_BYTESWAPIO -DWORDLENGTH=4' )
228 set FC = ( 'g77' )
229 set FFLAGS = ( '-Wimplicit -Wunused -Wuninitialized' )
230 set FOPTIM = ( '-O3 -malign-double -funroll-loops ' )
231 set LINK = ( 'g77' )
232 breaksw
233 case Linux+pgi+mpi:
234 if ($?include_jam_libs) then
235 set INCLUDES = ( '-I/usr/local//mpich-cnh-install/include' )
236 set LIBS = ( '-L/usr/local/mpich-cnh-install/lib/LINUX/ch_p4/ -lfmpich -lmpich' )
237 else
238 set INCLUDES = ( '-I/usr/local/include' )
239 set LIBS = ( '-L/usr/local/lib/LINUX/ch_p4/ -lfmpich -lmpich' )
240 endif
241 case Linux+pgi:
242 set LN = ( '/bin/ln -fs' )
243 set CPP = ( '/lib/cpp -traditional -P' )
244 set DEFINES = ( ${DEFINES} '-DWORDLENGTH=4' )
245 set FC = ( 'pgf77' )
246 set FFLAGS = ( '-byteswapio' )
247 set FOPTIM = ( '-tp p6 -v -O2 -Munroll -Mvect=cachesize:512000,transform -Kieee' )
248 set LINK = ( 'pgf77' )
249 breaksw
250 case T3E:
251 case sn6312:
252 set CPP = ( '/opt/ctl/bin/cpp -P')
253 set DEFINES = ( ${DEFINES} '-DTARGET_T3E -DWORDLENGTH=4' )
254 set FC = ( 'f90' )
255 set LINK = ( 'f90' )
256 set FFLAGS = ( '-O 2,fusion' )
257 breaksw
258 case T90:
259 case sn7113:
260 set FC = ( 'f90' )
261 set LINK = ( 'f90' )
262 set LN = ( '/bin/ln -fs' )
263 set CPP = ( '/opt/ctl/bin/cpp -N -P' )
264 set DEFINES = ( ${DEFINES} '-DTARGET_CRAY_VECTOR -DWORDLENGTH=4' )
265 set FFLAGS = ( '-m3 -Rabc -N 132')
266 set FOPTIM = ( '-O0' )
267 set NOOPTFLAGS = ( '-O0' )
268 set NOOPTFILES = ( 'barrier.F different_multiple.F external_fields_load.F')
269 breaksw
270 case SV1:
271 case sn3002:
272 set FC = ( 'f90' )
273 set LINK = ( 'f90' )
274 set LN = ( '/bin/ln -fs' )
275 set CPP = ( '/opt/ctl/bin/cpp -N -P' )
276 set DEFINES = ( ${DEFINES} '-DTARGET_CRAY_VECTOR -DWORDLENGTH=4' )
277 set FFLAGS = ( '-m3 -Rabc -ei -eI -s cf77types -N 132')
278 set FOPTIM = ( '-O0' )
279 set NOOPTFLAGS = ( '-O0' )
280 set NOOPTFILES = ( 'barrier.F different_multiple.F external_fields_load.F')
281 breaksw
282 default:
283 echo "Error: platform not recognized: uname -p = " $platform$USEMPI
284 exit
285 breaksw
286 endsw
287
288 ###############################################################################
289 ## ##
290 ## Everything below here should not need to be changed. Platform specific ##
291 ## changes and code specific changes should be configured above this line. ##
292 ## ##
293 ###############################################################################
294
295 # Create list of files
296 set flist = `ls -1 ${SOURCEDIRS} | grep '.*\.[F]$'`
297 if ( $#flist ) then
298 echo -n 'SRCFILES = ' > srclist.inc
299 foreach ff ( ${flist} )
300 set fname = ( ${ff:t} )
301 echo ' \' >> srclist.inc
302 echo -n " " ${fname:r}.F >> srclist.inc
303 end
304 else
305 echo No source files found...\!
306 exit
307 endif
308 echo " " >> srclist.inc
309
310 set flist = `ls -1 ${SOURCEDIRS} | grep '.*\.[c]$'`
311 if ( $#flist ) then
312 echo -n 'CSRCFILES = ' > csrclist.inc
313 foreach ff ( ${flist} )
314 set fname = ( ${ff:t} )
315 echo ' \' >> csrclist.inc
316 echo -n " " ${fname} >> csrclist.inc
317 else
318 echo -n 'CSRCFILES =' > csrclist.inc
319 endif
320 echo " " >> csrclist.inc
321
322 # Convert lists of directories into command-line options
323 foreach inc ($INCLUDEDIRS)
324 set INCLUDES = ($INCLUDES -I$inc)
325 end
326 set SRCSTARS = ( )
327 foreach dr ($SOURCEDIRS)
328 set SRCSTARS = ("${SRCSTARS}" $dr\*.\[Fc\] )
329 end
330
331 set THISHOSTNAME = ( `hostname` )
332 set THISCWD = ( `pwd` )
333 set THISDATE = ( `date` )
334
335 ###########################################
336 ## This is the template for the makefile ##
337 ###########################################
338 echo Creating makefile: $mfile
339 echo "# Multithreaded + multi-processing makefile for $mach" > ${mfile}
340 echo "# This makefile was generated automatically pn" >> ${mfile}
341 echo "# $THISDATE" >> ${mfile}
342 echo "# by the command:" >> ${mfile}
343 echo "# ${0} $argv" >> ${mfile}
344 echo "# executed by:" >> ${mfile}
345 echo "# $USER@${THISHOSTNAME}:${THISCWD}" >> ${mfile}
346 cat >> ${mfile} <<EOF
347 #
348 # BUILDDIR : Directory where object files are written
349 # SOURCEDIRS : Directories containing the source (.F) files
350 # INCLUDEDIRS : Directories containing the header-source (.h) files
351 # EXEDIR : Directory where executable that is generated is written
352 # EXECUTABLE : Full path of executable binary
353 #
354 # CPP : C-preprocessor command
355 # INCLUDES : Directories searched for header files
356 # DEFINES : Macro definitions for CPP
357 # KPP : Special preprocessor command (specific to platform)
358 # KFLAGS : Flags for KPP
359 # FC : Fortran compiler command
360 # FFLAGS : Configuration/debugging options for FC
361 # FOPTIM : Optimization options for FC
362 # LINK : Command for link editor program
363 # LIBS : Library flags /or/ additional optimization/debugging flags
364
365 BUILDDIR = ${BUILDDIR}
366 SOURCEDIRS = ${SOURCEDIRS}
367 INCLUDEDIRS = ${INCLUDEDIRS}
368 EXEDIR = ${EXEDIR}
369 EXECUTABLE = \$(EXEDIR)${EXECUTABLE}
370
371 EOF
372
373
374 # JAM libraries on Hyades
375 if ($?include_jam_libs) then
376 cat >> ${mfile} <<EOF
377 # extra stuff for Hyades ............................................
378 HYADES_DIR = /u/u0/cnh/jam-lib/software
379 HYADES_DIR = /u/u0/cnh/jam-lib-twoproc
380 WORK_DIR = \$(HYADES_DIR)
381 DEPOSIT_DIR = linux_bin
382
383 STARTXOBJDIR = startx_util/\$(DEPOSIT_DIR)
384 STARTXOBJ = \$(WORK_DIR)/startx_util/\$(DEPOSIT_DIR)/startx_timer.o \
385 \$(WORK_DIR)/startx_util/\$(DEPOSIT_DIR)/startx_util.o \
386 \$(WORK_DIR)/startx_util/\$(DEPOSIT_DIR)/client.o \
387 \$(WORK_DIR)/startx_util/\$(DEPOSIT_DIR)/csutil.o
388
389 JAMOBJDIR = jam/\$(DEPOSIT_DIR)
390 JAMOBJ = \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_init.o \
391 \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_kernel.o \
392 \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_malloc.o \
393 \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_vmalloc.o \
394 \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_mutex.o
395
396 JAMCOBJDIR = jam_collective/\$(DEPOSIT_DIR)
397 JAMCOBJ = \$(WORK_DIR)/jam_collective/\$(DEPOSIT_DIR)/jam_collective.o
398
399 XLIBS = \$(STARTXOBJ) \$(JAMOBJ) \$(JAMCOBJ)
400
401 # ..................................................................
402
403 EOF
404 endif
405
406
407 cat >> ${mfile} <<EOF
408 # Unix ln (link)
409 LN = ${LN}
410 # C preprocessor
411 CPP = cat \$< | ../tools/set64bitConst.sh | ${CPP}
412 # Special preprocessor (KAP on DECs, FPP on Crays)
413 KPP = ${KPP}
414 # Fortran compiler
415 FC = ${FC}
416 # Link editor
417 LINK = ${LINK}
418
419 # Defines for CPP
420 DEFINES = ${DEFINES}
421 # Includes for CPP
422 INCLUDES = ${INCLUDES}
423 # Flags for KPP
424 KFLAGS1 = ${KFLAGS1}
425 KFLAGS2 = ${KFLAGS2}
426 # Optim./debug for FC
427 FFLAGS = ${FFLAGS}
428 FOPTIM = ${FOPTIM}
429 # Files that should not be optimized
430 NOOPTFILES = ${NOOPTFILES}
431 NOOPTFLAGS = ${NOOPTFLAGS}
432 # Flags and libraries needed for linking
433 LIBS = ${LIBS} \$(XLIBS)
434
435 EOF
436
437 cat srclist.inc >> ${mfile}
438 cat csrclist.inc >> ${mfile}
439 echo 'F77FILES = $(SRCFILES:.F=.f)' >> ${mfile}
440 echo 'OBJFILES = $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o)' >> ${mfile}
441
442 rm -f srclist.inc
443
444 cat >> ${mfile} <<EOF
445
446 .SUFFIXES:
447 .SUFFIXES: .o .f .p .F .c
448
449 all: \$(EXECUTABLE)
450 \$(EXECUTABLE): \$(OBJFILES)
451 \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
452 links:
453 @-\$(LN) $SRCSTARS .
454 depend:
455 @make links
456 makedepend -o .f \$(INCLUDES) \$(SRCFILES)
457
458 small_f: \$(F77FILES)
459
460 clean:
461 -rm -rf *.o *.f *.p ${RMFILES}
462 Clean:
463 @make clean
464 -find . -type l -exec rm {} \;
465 -rm Makefile.bak
466 CLEAN:
467 @make Clean
468 -find ../verification/ -name "*.meta" -exec rm {} \;
469 -find ../verification/ -name "*.data" -exec rm {} \;
470 -rm \$(EXECUTABLE)
471
472 # The normal chain of rules is ( .F - .f - .o )
473 .F.f:
474 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
475 .f.o:
476 \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
477
478 # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain
479 .F.p:
480 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
481 .p.f:
482 \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
483 EOF
484
485 # Make list of "exceptions" that need ".p" files
486 foreach sf ($KPPFILES)
487 set fname=( ${sf:t} )
488 echo "${fname:r}.f: ${fname:r}.p" >> ${mfile}
489 end
490 foreach sf ($NOOPTFILES)
491 set fname=( ${sf:t} )
492 echo "${fname:r}.o: ${fname:r}.f" >> ${mfile}
493 echo ' $(FC) $(FFLAGS) $(NOOPTFLAGS) -c $<' >> ${mfile}
494 end
495 echo >> ${mfile}
496 echo "# DO NOT DELETE" >> ${mfile}
497
498 exit

  ViewVC Help
Powered by ViewVC 1.1.22