/[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.13 - (hide annotations) (download)
Tue Mar 14 20:29:19 2000 UTC (24 years, 1 month ago) by adcroft
Branch: MAIN
CVS Tags: checkpoint25
Changes since 1.12: +9 -1 lines
Minor mods for compiling on T3E.

1 cnh 1.1 #!/bin/csh -f
2     #
3 adcroft 1.13 # $Header: /u/gcmpack/models/MITgcmUV/tools/genmake,v 1.12 2000/03/14 16:21:41 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 adcroft 1.13 breaksw
206     case T3E:
207     case sn6312:
208     set CPP = ( '/opt/ctl/bin/cpp -P')
209     set DEFINES = ( ${DEFINES} '-DTARGET_T3E -DWORDLENGTH=4' )
210     set FC = ( 'f90' )
211     set LINK = ( 'f90' )
212     set FFLAGS = ( '-O 2,fusion' )
213 cnh 1.6 breaksw
214 cnh 1.1 default:
215     echo "Error: platform not recognized: uname -p = " $platform$USEMPI
216     exit
217     breaksw
218     endsw
219    
220     ###############################################################################
221     ## ##
222     ## Everything below here should not need to be changed. Platform specific ##
223     ## changes and code specific changes should be configured above this line. ##
224     ## ##
225     ###############################################################################
226    
227     # Create list of files
228 cnh 1.5 set flist = `ls -1 ${SOURCEDIRS} | grep '.*\.[F]$'`
229 cnh 1.1 if ( $#flist ) then
230     echo -n "SRCFILES = " > srclist.inc
231     echo -n "F77FILES = " > f77list.inc
232     echo -n "OBJFILES = " > objlist.inc
233     foreach ff ( ${flist} )
234     set fname = ( ${ff:t} )
235     echo ' \' >> srclist.inc
236     echo -n " " ${fname:r}.F >> srclist.inc
237     echo ' \' >> f77list.inc
238     echo -n " " ${fname:r}.f >> f77list.inc
239     echo ' \' >> objlist.inc
240     echo -n " " ${fname:r}.o >> objlist.inc
241     end
242     else
243     echo No source files found...\!
244     exit
245     endif
246 cnh 1.5 set flist = `ls -1 ${SOURCEDIRS} | grep '.*\.[c]$'`
247     if ( $#flist ) then
248     foreach ff ( ${flist} )
249     set fname = ( ${ff:t} )
250     echo ' \' >> objlist.inc
251     echo -n " " ${fname:r}.o >> objlist.inc
252     endif
253     echo " " >> srclist.inc
254     echo " " >> f77list.inc
255     echo " " >> objlist.inc
256 cnh 1.1
257     # Convert lists of directories into command-line options
258     foreach inc ($INCLUDEDIRS)
259     set INCLUDES = ($INCLUDES -I$inc)
260     end
261     set SRCSTARS = ( )
262     foreach dr ($SOURCEDIRS)
263 cnh 1.6 set SRCSTARS = ("${SRCSTARS}" $dr\*.\[Fc\] )
264 cnh 1.1 end
265    
266     set THISHOSTNAME = ( `hostname` )
267     set THISCWD = ( `pwd` )
268     set THISDATE = ( `date` )
269    
270     ###########################################
271     ## This is the template for the makefile ##
272     ###########################################
273     echo Creating makefile: $mfile
274     echo "# Multithreaded + multi-processing makefile for $mach" > ${mfile}
275     echo "# This makefile was generated automatically pn" >> ${mfile}
276     echo "# $THISDATE" >> ${mfile}
277     echo "# by the command:" >> ${mfile}
278     echo "# ${0} $argv" >> ${mfile}
279     echo "# executed by:" >> ${mfile}
280     echo "# $USER@${THISHOSTNAME}:${THISCWD}" >> ${mfile}
281     cat >> ${mfile} <<EOF
282     #
283     # BUILDDIR : Directory where object files are written
284     # SOURCEDIRS : Directories containing the source (.F) files
285     # INCLUDEDIRS : Directories containing the header-source (.h) files
286     # EXEDIR : Directory where executable that is generated is written
287     # EXECUTABLE : Full path of executable binary
288     #
289     # CPP : C-preprocessor command
290     # INCLUDES : Directories searched for header files
291     # DEFINES : Macro definitions for CPP
292     # KPP : Special preprocessor command (specific to platform)
293     # KFLAGS : Flags for KPP
294     # FC : Fortran compiler command
295     # FFLAGS : Configuration/debugging options for FC
296     # FOPTIM : Optimization options for FC
297     # LINK : Command for link editor program
298     # LIBS : Library flags /or/ additional optimization/debugging flags
299    
300     BUILDDIR = ${BUILDDIR}
301     SOURCEDIRS = ${SOURCEDIRS}
302     INCLUDEDIRS = ${INCLUDEDIRS}
303     EXEDIR = ${EXEDIR}
304     EXECUTABLE = \$(EXEDIR)${EXECUTABLE}
305    
306 adcroft 1.12 EOF
307    
308    
309     # JAM libraries on Hyades
310     if ($?include_jam_libs) then
311     cat >> ${mfile} <<EOF
312     # extra stuff for Hyades ............................................
313     HYADES_DIR = /u/u0/cnh/jam-lib/software
314     WORK_DIR = \$(HYADES_DIR)
315     DEPOSIT_DIR = linux_bin
316    
317     STARTXOBJDIR = startx_util/\$(DEPOSIT_DIR)
318     STARTXOBJ = \$(WORK_DIR)/startx_util/\$(DEPOSIT_DIR)/startx_timer.o \
319     \$(WORK_DIR)/startx_util/\$(DEPOSIT_DIR)/startx_util.o \
320     \$(WORK_DIR)/startx_util/\$(DEPOSIT_DIR)/client.o \
321     \$(WORK_DIR)/startx_util/\$(DEPOSIT_DIR)/csutil.o
322    
323     JAMOBJDIR = jam/\$(DEPOSIT_DIR)
324     JAMOBJ = \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_init.o \
325     \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_kernel.o \
326     \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_malloc.o \
327     \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_vmalloc.o \
328     \$(WORK_DIR)/jam/\$(DEPOSIT_DIR)/jam_mutex.o
329    
330     JAMCOBJDIR = jam_collective/\$(DEPOSIT_DIR)
331     JAMCOBJ = \$(WORK_DIR)/jam_collective/\$(DEPOSIT_DIR)/jam_collective.o
332    
333     XLIBS = \$(STARTXOBJ) \$(JAMOBJ) \$(JAMCOBJ)
334    
335     # ..................................................................
336    
337     EOF
338     endif
339    
340    
341     cat >> ${mfile} <<EOF
342 cnh 1.1 # Unix ln (link)
343     LN = ${LN}
344     # C preprocessor
345 cnh 1.6 CPP = cat \$< | ../tools/set64bitConst.sh | ${CPP}
346 cnh 1.1 # Special preprocessor (KAP on DECs, FPP on Crays)
347     KPP = ${KPP}
348     # Fortran compiler
349     FC = ${FC}
350     # Link editor
351     LINK = ${LINK}
352    
353     # Defines for CPP
354     DEFINES = ${DEFINES}
355     # Includes for CPP
356     INCLUDES = ${INCLUDES}
357     # Flags for KPP
358     KFLAGS1 = ${KFLAGS1}
359     KFLAGS2 = ${KFLAGS2}
360     # Optim./debug for FC
361     FFLAGS = ${FFLAGS}
362     FOPTIM = ${FOPTIM}
363     # Files that should not be optimized
364     NOOPTFILES = ${NOOPTFILES}
365     NOOPTFLAGS = ${NOOPTFLAGS}
366     # Flags and libraries needed for linking
367     LIBS = ${LIBS}
368    
369     EOF
370    
371     cat srclist.inc >> ${mfile}
372     cat f77list.inc >> ${mfile}
373     cat objlist.inc >> ${mfile}
374     rm -f srclist.inc f77list.inc objlist.inc
375    
376     cat >> ${mfile} <<EOF
377    
378     .SUFFIXES:
379 cnh 1.5 .SUFFIXES: .o .f .p .F .c
380 cnh 1.1
381     all: \$(EXECUTABLE)
382     \$(EXECUTABLE): \$(OBJFILES)
383     \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
384     links:
385     @-\$(LN) $SRCSTARS .
386     depend:
387     @make links
388     makedepend -o .f \$(INCLUDES) \$(SRCFILES)
389     clean:
390     -rm -rf *.o *.f *.p ${RMFILES}
391 cnh 1.6 Clean:
392     @make clean
393 adcroft 1.8 -find . -type l -exec rm {} \;
394     -rm Makefile.bak
395 adcroft 1.12 CLEAN:
396     @make Clean
397     -find ../verification/ -name "*.meta" -exec rm {} \;
398     -find ../verification/ -name "*.data" -exec rm {} \;
399     -rm \$(EXECUTABLE)
400 cnh 1.1
401     # The normal chain of rules is ( .F - .f - .o )
402     .F.f:
403 cnh 1.6 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
404 cnh 1.1 .f.o:
405     \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
406    
407     # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain
408     .F.p:
409 cnh 1.6 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
410 cnh 1.1 .p.f:
411     \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
412     EOF
413    
414     # Make list of "exceptions" that need ".p" files
415     foreach sf ($KPPFILES)
416     set fname=( ${sf:t} )
417     echo "${fname:r}.f: ${fname:r}.p" >> ${mfile}
418     end
419     foreach sf ($NOOPTFILES)
420     set fname=( ${sf:t} )
421     echo "${fname:r}.o: ${fname:r}.f" >> ${mfile}
422     echo ' $(FC) $(FFLAGS) $(NOOPTFLAGS) -c $<' >> ${mfile}
423     end
424     echo >> ${mfile}
425     echo "# DO NOT DELETE" >> ${mfile}
426    
427     exit

  ViewVC Help
Powered by ViewVC 1.1.22