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

Annotation of /MITgcm/tools/genmake

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


Revision 1.12 - (hide annotations) (download)
Tue Mar 14 16:21:41 2000 UTC (24 years, 1 month ago) by adcroft
Branch: MAIN
Changes since 1.11: +46 -1 lines
Added "JAM" routines for use with Artic network (Hyades cluster).

1 cnh 1.1 #!/bin/csh -f
2     #
3 adcroft 1.12 # $Header: /u/gcmpack/models/MITgcmUV/tools/genmake,v 1.11 1999/05/07 18:12:29 adcroft Exp $
4 cnh 1.1 #
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 adcroft 1.9 case -makefile:
15     set mfile = ( Makefile )
16     breaksw
17     case -makefile=*:
18     set mfile = ( `echo $arg | sed 's/-makefile=//' `)
19 cnh 1.1 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 adcroft 1.12 case -jam:
34     set include_jam_libs
35     echo "Including paths to JAM libraries"
36     breaksw
37 cnh 1.1 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 cnh 1.6
50     if ($?platform == 0) then
51     set platform = (`uname`)
52     endif
53 cnh 1.1 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/)
64     set INCLUDEDIRS = ( ../eesupp/inc/ ../model/inc/ ../diags/inc/)
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 cnh 1.6 case OSF1:
100     case OSF1+mpi:
101 cnh 1.1 echo "Configuring for DEC Alpha"
102     set CPP = ( '/usr/bin/cpp -P' )
103 adcroft 1.10 set DEFINES = ( ${DEFINES} '-DTARGET_DEC -DWORDLENGTH=1' )
104 cnh 1.1 set KPP = ( 'kapf' )
105 cnh 1.4 set KPPFILES = ( 'main.F' )
106 cnh 1.1 set KFLAGS1 = ( '-scan=132 -noconc -cmp=' )
107     set FC = ( 'f77' )
108 adcroft 1.2 set FFLAGS = ( '-convert big_endian -r8 -extend_source -u -automatic -call_shared -notransform_loops -align dcommons' )
109 cnh 1.1 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 load_external_fields.F')
113     set RMFILES = ( '*.p.out' )
114     breaksw
115 cnh 1.6 case IRIX64+mpi:
116 cnh 1.1 echo "Configuring for SGI Mips with MPI"
117 adcroft 1.11 set DEFINES = ( ${DEFINES} '-DTARGET_SGI -DWORDLENGTH=4' )
118 cnh 1.1 set INCLUDES = ( '-I/usr/local/mpi/include' )
119     set FC = ( 'mpif77' )
120     set LINK = ( 'mpif77' )
121 adcroft 1.11 set FFLAGS = ( '-extend_source -bytereclen -r10000 -mips4' )
122 cnh 1.1 set FOPTIM = ( '-O3' )
123     set RMFILES = ( 'rii_files' )
124     breaksw
125 cnh 1.6 case IRIX64:
126 cnh 1.1 echo "Configuring for SGI Mips"
127 adcroft 1.11 set DEFINES = ( ${DEFINES} '-DTARGET_SGI -DWORDLENGTH=4' )
128 cnh 1.1 set INCLUDES = ( '-I/usr/local/mpi/include' )
129     set FFLAGS = ( '-extend_source -mp -mpio -bytereclen -r10000 -mips4' )
130 adcroft 1.11 set FOPTIM = ( '-O3' )
131     # set NOOPTFLAGS = ( '-O0' )
132     # set NOOPTFILES = ( 'barrier.F different_multiple.F ' \
133     # 'load_external_fields.F' )
134 cnh 1.1 set RMFILES = ( 'rii_files' )
135     breaksw
136 cnh 1.6 case SunOS:
137     set LN = ( '/usr/bin/ln -fs' )
138     set CPP = ( '/usr/ccs/lib/cpp -P' )
139 adcroft 1.11 set DEFINES = ( ${DEFINES} '-DTARGET_SUN -DWORDLENGTH=4' )
140 cnh 1.6 set FFLAGS = ( '-stackvar -explicitpar -vpara -e -u -noautopar')
141 adcroft 1.11 set FOPTIM = ( '-fast -O4' )
142 cnh 1.6 set NOOPTFLAGS = ( '-O0' )
143 adcroft 1.11 set NOOPTFILES = ( 'barrier.F different_multiple.F load_external_fields.F ini_vertical_grid.F')
144 cnh 1.6 breaksw
145     case SunOS+mpi:
146 cnh 1.1 set LN = ( '/usr/bin/ln -fs' )
147     set CPP = ( '/usr/ccs/lib/cpp -P' )
148 adcroft 1.11 set DEFINES = ( ${DEFINES} '-DTARGET_SUN -DWORDLENGTH=4' )
149 cnh 1.1 set INCLUDES = ( '-I/usr/local/mpi/include' )
150     set FFLAGS = ( '-stackvar -explicitpar -vpara -e -u -noautopar')
151 adcroft 1.11 set FOPTIM = ( '-fast -O4' )
152 cnh 1.1 set NOOPTFLAGS = ( '-O0' )
153     set LIBS = ( '-L/usr/local/mpi/lib/solaris/ch_shmem -lmpi -lthread' \
154 cnh 1.6 '-lsocket -lnsl' )
155 adcroft 1.11 set NOOPTFILES = ( 'barrier.F different_multiple.F load_external_fields.F ini_vertical_grid.F')
156 cnh 1.3 breaksw
157 cnh 1.6 case IRIX32:
158 cnh 1.3 echo "Configuring for SGI ONYX running IRIX64"
159 adcroft 1.11 set DEFINES = ( ${DEFINES} '-DTARGET_SGI -DWORDLENGTH=4' )
160 cnh 1.3 set INCLUDES = ( '-I/usr/include' )
161     set FFLAGS = ( '-extend_source -bytereclen -r10000 -64' )
162     set FOPTIM = ( '-O2' )
163     set NOOPTFLAGS = ( '-O0' )
164     set NOOPTFILES = ( 'barrier.F different_multiple.F ' \
165     'load_external_fields.F' )
166     set LIBS = ( '-lmpi' )
167     breaksw
168 adcroft 1.11 case HP-UX+mpi:
169     set FC = ( 'mpif77' )
170     set LINK = ( 'mpif77' )
171     set INCLUDES = ( '-I/opt/mpi/include' )
172 cnh 1.6 case HP-UX:
173 cnh 1.3 echo "Configuring for HP Exemplar"
174     set CPP = ( '/usr/ccs/lbin/cpp -P' )
175 adcroft 1.11 set DEFINES = ( ${DEFINES} '-DTARGET_HP -DWORDLENGTH=4' )
176 cnh 1.3 set FFLAGS = ( '+es +U77 +Onoautopar +Oexemplar_model' \
177     '+Okernel_threads' )
178     set FOPTIM = ( '+O2' )
179 cnh 1.6 set NOOPTFLAGS = ( '+O0' )
180 cnh 1.3 set NOOPTFILES = ( 'barrier.F different_multiple.F' \
181     'load_external_fields.F' )
182 cnh 1.1 breaksw
183 adcroft 1.9 case Linux+mpi:
184     set LIBS = ( '-L/usr/local/lib/LINUX/ch_p4/ -lfmpich -lmpich' )
185 cnh 1.6 case Linux:
186     set LN = ( '/bin/ln -fs' )
187 cnh 1.7 set CPP = ( '/usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3/cpp -traditional -P' )
188 adcroft 1.11 set DEFINES = ( ${DEFINES} '-D_BYTESWAPIO -DWORDLENGTH=4' )
189 cnh 1.6 set INCLUDES = ( '-I/usr/local/include' )
190     set FC = ( 'g77' )
191     set FFLAGS = ( ' ' )
192 adcroft 1.9 set FOPTIM = ( '-O3 -funroll-loops ' )
193 cnh 1.6 set LINK = ( 'g77' )
194     breaksw
195     case Linux+pgi:
196     set LN = ( '/bin/ln -fs' )
197     set CPP = ( '/usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3/cpp -P' )
198 adcroft 1.10 set DEFINES = ( ${DEFINES} '-DWORDLENGTH=4' )
199 cnh 1.6 set INCLUDES = ( '-I/usr/local/include' )
200     set FC = ( 'pgf77' )
201     set FFLAGS = ( '-byteswapio' )
202     set FOPTIM = ( '-tp p6 -v -O2 -Munroll -Mvect=cachesize:512000,transform -Kieee' )
203     set LINK = ( 'pgf77' )
204     set LIBS = ( '-L/usr/local/lib/LINUX/ch_p4/ -lfmpich -lmpich -Kieee' )
205     breaksw
206 cnh 1.1 default:
207     echo "Error: platform not recognized: uname -p = " $platform$USEMPI
208     exit
209     breaksw
210     endsw
211    
212     ###############################################################################
213     ## ##
214     ## Everything below here should not need to be changed. Platform specific ##
215     ## changes and code specific changes should be configured above this line. ##
216     ## ##
217     ###############################################################################
218    
219     # Create list of files
220 cnh 1.5 set flist = `ls -1 ${SOURCEDIRS} | grep '.*\.[F]$'`
221 cnh 1.1 if ( $#flist ) then
222     echo -n "SRCFILES = " > srclist.inc
223     echo -n "F77FILES = " > f77list.inc
224     echo -n "OBJFILES = " > objlist.inc
225     foreach ff ( ${flist} )
226     set fname = ( ${ff:t} )
227     echo ' \' >> srclist.inc
228     echo -n " " ${fname:r}.F >> srclist.inc
229     echo ' \' >> f77list.inc
230     echo -n " " ${fname:r}.f >> f77list.inc
231     echo ' \' >> objlist.inc
232     echo -n " " ${fname:r}.o >> objlist.inc
233     end
234     else
235     echo No source files found...\!
236     exit
237     endif
238 cnh 1.5 set flist = `ls -1 ${SOURCEDIRS} | grep '.*\.[c]$'`
239     if ( $#flist ) then
240     foreach ff ( ${flist} )
241     set fname = ( ${ff:t} )
242     echo ' \' >> objlist.inc
243     echo -n " " ${fname:r}.o >> objlist.inc
244     endif
245     echo " " >> srclist.inc
246     echo " " >> f77list.inc
247     echo " " >> objlist.inc
248 cnh 1.1
249     # Convert lists of directories into command-line options
250     foreach inc ($INCLUDEDIRS)
251     set INCLUDES = ($INCLUDES -I$inc)
252     end
253     set SRCSTARS = ( )
254     foreach dr ($SOURCEDIRS)
255 cnh 1.6 set SRCSTARS = ("${SRCSTARS}" $dr\*.\[Fc\] )
256 cnh 1.1 end
257    
258     set THISHOSTNAME = ( `hostname` )
259     set THISCWD = ( `pwd` )
260     set THISDATE = ( `date` )
261    
262     ###########################################
263     ## This is the template for the makefile ##
264     ###########################################
265     echo Creating makefile: $mfile
266     echo "# Multithreaded + multi-processing makefile for $mach" > ${mfile}
267     echo "# This makefile was generated automatically pn" >> ${mfile}
268     echo "# $THISDATE" >> ${mfile}
269     echo "# by the command:" >> ${mfile}
270     echo "# ${0} $argv" >> ${mfile}
271     echo "# executed by:" >> ${mfile}
272     echo "# $USER@${THISHOSTNAME}:${THISCWD}" >> ${mfile}
273     cat >> ${mfile} <<EOF
274     #
275     # BUILDDIR : Directory where object files are written
276     # SOURCEDIRS : Directories containing the source (.F) files
277     # INCLUDEDIRS : Directories containing the header-source (.h) files
278     # EXEDIR : Directory where executable that is generated is written
279     # EXECUTABLE : Full path of executable binary
280     #
281     # CPP : C-preprocessor command
282     # INCLUDES : Directories searched for header files
283     # DEFINES : Macro definitions for CPP
284     # KPP : Special preprocessor command (specific to platform)
285     # KFLAGS : Flags for KPP
286     # FC : Fortran compiler command
287     # FFLAGS : Configuration/debugging options for FC
288     # FOPTIM : Optimization options for FC
289     # LINK : Command for link editor program
290     # LIBS : Library flags /or/ additional optimization/debugging flags
291    
292     BUILDDIR = ${BUILDDIR}
293     SOURCEDIRS = ${SOURCEDIRS}
294     INCLUDEDIRS = ${INCLUDEDIRS}
295     EXEDIR = ${EXEDIR}
296     EXECUTABLE = \$(EXEDIR)${EXECUTABLE}
297    
298 adcroft 1.12 EOF
299    
300    
301     # JAM libraries on Hyades
302     if ($?include_jam_libs) then
303     cat >> ${mfile} <<EOF
304     # extra stuff for Hyades ............................................
305     HYADES_DIR = /u/u0/cnh/jam-lib/software
306     WORK_DIR = \$(HYADES_DIR)
307     DEPOSIT_DIR = linux_bin
308    
309     STARTXOBJDIR = startx_util/\$(DEPOSIT_DIR)
310     STARTXOBJ = \$(WORK_DIR)/startx_util/\$(DEPOSIT_DIR)/startx_timer.o \
311     \$(WORK_DIR)/startx_util/\$(DEPOSIT_DIR)/startx_util.o \
312     \$(WORK_DIR)/startx_util/\$(DEPOSIT_DIR)/client.o \
313     \$(WORK_DIR)/startx_util/\$(DEPOSIT_DIR)/csutil.o
314    
315     JAMOBJDIR = jam/\$(DEPOSIT_DIR)
316     JAMOBJ = \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_init.o \
317     \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_kernel.o \
318     \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_malloc.o \
319     \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_vmalloc.o \
320     \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_mutex.o
321    
322     JAMCOBJDIR = jam_collective/\$(DEPOSIT_DIR)
323     JAMCOBJ = \$(WORK_DIR)/jam_collective/\$(DEPOSIT_DIR)/jam_collective.o
324    
325     XLIBS = \$(STARTXOBJ) \$(JAMOBJ) \$(JAMCOBJ)
326    
327     # ..................................................................
328    
329     EOF
330     endif
331    
332    
333     cat >> ${mfile} <<EOF
334 cnh 1.1 # Unix ln (link)
335     LN = ${LN}
336     # C preprocessor
337 cnh 1.6 CPP = cat \$< | ../tools/set64bitConst.sh | ${CPP}
338 cnh 1.1 # Special preprocessor (KAP on DECs, FPP on Crays)
339     KPP = ${KPP}
340     # Fortran compiler
341     FC = ${FC}
342     # Link editor
343     LINK = ${LINK}
344    
345     # Defines for CPP
346     DEFINES = ${DEFINES}
347     # Includes for CPP
348     INCLUDES = ${INCLUDES}
349     # Flags for KPP
350     KFLAGS1 = ${KFLAGS1}
351     KFLAGS2 = ${KFLAGS2}
352     # Optim./debug for FC
353     FFLAGS = ${FFLAGS}
354     FOPTIM = ${FOPTIM}
355     # Files that should not be optimized
356     NOOPTFILES = ${NOOPTFILES}
357     NOOPTFLAGS = ${NOOPTFLAGS}
358     # Flags and libraries needed for linking
359     LIBS = ${LIBS}
360    
361     EOF
362    
363     cat srclist.inc >> ${mfile}
364     cat f77list.inc >> ${mfile}
365     cat objlist.inc >> ${mfile}
366     rm -f srclist.inc f77list.inc objlist.inc
367    
368     cat >> ${mfile} <<EOF
369    
370     .SUFFIXES:
371 cnh 1.5 .SUFFIXES: .o .f .p .F .c
372 cnh 1.1
373     all: \$(EXECUTABLE)
374     \$(EXECUTABLE): \$(OBJFILES)
375     \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
376     links:
377     @-\$(LN) $SRCSTARS .
378     depend:
379     @make links
380     makedepend -o .f \$(INCLUDES) \$(SRCFILES)
381     clean:
382     -rm -rf *.o *.f *.p ${RMFILES}
383 cnh 1.6 Clean:
384     @make clean
385 adcroft 1.8 -find . -type l -exec rm {} \;
386     -rm Makefile.bak
387 adcroft 1.12 CLEAN:
388     @make Clean
389     -find ../verification/ -name "*.meta" -exec rm {} \;
390     -find ../verification/ -name "*.data" -exec rm {} \;
391     -rm \$(EXECUTABLE)
392 cnh 1.1
393     # The normal chain of rules is ( .F - .f - .o )
394     .F.f:
395 cnh 1.6 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
396 cnh 1.1 .f.o:
397     \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
398    
399     # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain
400     .F.p:
401 cnh 1.6 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
402 cnh 1.1 .p.f:
403     \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
404     EOF
405    
406     # Make list of "exceptions" that need ".p" files
407     foreach sf ($KPPFILES)
408     set fname=( ${sf:t} )
409     echo "${fname:r}.f: ${fname:r}.p" >> ${mfile}
410     end
411     foreach sf ($NOOPTFILES)
412     set fname=( ${sf:t} )
413     echo "${fname:r}.o: ${fname:r}.f" >> ${mfile}
414     echo ' $(FC) $(FFLAGS) $(NOOPTFLAGS) -c $<' >> ${mfile}
415     end
416     echo >> ${mfile}
417     echo "# DO NOT DELETE" >> ${mfile}
418    
419     exit

  ViewVC Help
Powered by ViewVC 1.1.22