/[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.7 - (show annotations) (download)
Fri Nov 6 22:44:49 1998 UTC (25 years, 5 months ago) by cnh
Branch: MAIN
CVS Tags: checkpoint18
Changes since 1.6: +2 -2 lines
Changes to allow for atmospheric integration builds of the code

1 #!/bin/csh -f
2 #
3 # $Header: /u/gcmpack/models/MITgcmUV/tools/genmake,v 1.6 1998/10/28 03:11:38 cnh 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 if ($arg == "-makefile") then
16 set mfile = ( Makefile )
17 else
18 set mfile = ( `echo $arg | sed 's/-makefile=//' `)
19 endif
20 breaksw
21 case -platform:
22 case -platform=:
23 echo "To change platform you must specify one with -platform="
24 echo "eg. -platform=sparc or -platform=mips"
25 exit
26 breaksw
27 case -platform*:
28 set platform = ( `echo $arg | sed 's/-platform=//' `)
29 breaksw
30 case -mpi:
31 echo "Enabling MPI options"
32 set USEMPI
33 breaksw
34 case -help:
35 echo "usage: $0 [-help] [-makefile[=...]] [-platform=...] [-mpi]"
36 exit
37 breaksw
38 default:
39 echo "Unknown command-line option: " $arg
40 echo $0 "-help to show usage"
41 exit
42 breaksw
43 endsw
44 shift allargs
45 end
46
47 if ($?platform == 0) then
48 set platform = (`uname`)
49 endif
50 if ($?mfile == 0) set mfile = ( Makefile.$platform )
51 set mach = ( `uname -a` )
52 echo Operating system: $mach
53
54 # Directories for source, includes, binaries and executables
55 # Note
56 # o If you prefer/need everything under a single directory
57 # copy everything in ../eesupp/src, ../model/src,
58 # ../eesupp/inc and ../model/inc into a directory and then
59 # edit the paths below to ./
60 set SOURCEDIRS = ( ../eesupp/src/ ../model/src/ ../diags/src/)
61 set INCLUDEDIRS = ( ../eesupp/inc/ ../model/inc/ ../diags/inc/)
62 set BUILDDIR = ( ../bin/ )
63 set EXEDIR = ( ../exe/ )
64 set EXECUTABLE = ( mitgcmuv )
65
66 # This is the generic configuration.
67 # Platform specific options are chosen below
68 set LN = ( 'ln -sf' )
69 set CPP = ( '/lib/cpp -P' )
70 set KPP = ( )
71 set FC = ( 'f77' )
72 set LINK = ( 'f77' )
73 set DEFINES = ( )
74 set INCLUDES = ( )
75 set FFLAGS = ( )
76 set FOPTIM = ( )
77 set KFLAGS1 = ( )
78 set KFLAGS2 = ( )
79 set LIBS = ( )
80 set KPPFILES = ( )
81 set NOOPTFILES = ( )
82 set NOOPTFLAGS = ( )
83 set RMFILES = ( )
84
85 # We often want to use different compile/link options is using MPI
86 if ($?USEMPI) then
87 set USEMPI = ( '+mpi' )
88 set DEFINES = ( ${DEFINES} '-DALLOW_USE_MPI -DALWAYS_USE_MPI' )
89 else
90 set USEMPI
91 # set DEFINES = ( ${DEFINES} '-UALLOW_USE_MPI -UALWAYS_USE_MPI' )
92 endif
93
94 # Platform specific options
95 switch ($platform$USEMPI)
96 case OSF1:
97 case OSF1+mpi:
98 echo "Configuring for DEC Alpha"
99 set CPP = ( '/usr/bin/cpp -P' )
100 set DEFINES = ( ${DEFINES} '-DTARGET_DEC' )
101 set KPP = ( 'kapf' )
102 set KPPFILES = ( 'main.F' )
103 set KFLAGS1 = ( '-scan=132 -noconc -cmp=' )
104 set FC = ( 'f77' )
105 set FFLAGS = ( '-convert big_endian -r8 -extend_source -u -automatic -call_shared -notransform_loops -align dcommons' )
106 set FOPTIM = ( '-O5 -fast -tune host -inline all' )
107 set NOOPTFLAGS = ( '-O0' )
108 set LIBS = ( '-lfmpi -lmpi -lkmp_osfp10 -pthread' )
109 set NOOPTFILES = ( 'barrier.F different_multiple.F load_external_fields.F')
110 set RMFILES = ( '*.p.out' )
111 breaksw
112 case IRIX64+mpi:
113 echo "Configuring for SGI Mips with MPI"
114 set DEFINES = ( ${DEFINES} '-DTARGET_SGI' )
115 set INCLUDES = ( '-I/usr/local/mpi/include' )
116 set FC = ( 'mpif77' )
117 set LINK = ( 'mpif77' )
118 set FFLAGS = ( '-extend_source -bytereclen -r10000' )
119 set FOPTIM = ( '-O3' )
120 set RMFILES = ( 'rii_files' )
121 breaksw
122 case IRIX64:
123 echo "Configuring for SGI Mips"
124 set DEFINES = ( ${DEFINES} '-DTARGET_SGI' )
125 set INCLUDES = ( '-I/usr/local/mpi/include' )
126 set FFLAGS = ( '-extend_source -mp -mpio -bytereclen -r10000 -mips4' )
127 set FOPTIM = ( '-O2' )
128 set NOOPTFLAGS = ( '-O0' )
129 set NOOPTFILES = ( 'barrier.F different_multiple.F ' \
130 'load_external_fields.F' )
131 set RMFILES = ( 'rii_files' )
132 breaksw
133 case SunOS:
134 set LN = ( '/usr/bin/ln -fs' )
135 set CPP = ( '/usr/ccs/lib/cpp -P' )
136 set DEFINES = ( ${DEFINES} '-DTARGET_SUN' )
137 set FFLAGS = ( '-stackvar -explicitpar -vpara -e -u -noautopar')
138 set FOPTIM = ( '-O5 -fast' )
139 set NOOPTFLAGS = ( '-O0' )
140 set NOOPTFILES = ( 'barrier.F different_multiple.F load_external_fields.F')
141 breaksw
142 case SunOS+mpi:
143 set LN = ( '/usr/bin/ln -fs' )
144 set CPP = ( '/usr/ccs/lib/cpp -P' )
145 set DEFINES = ( ${DEFINES} '-DTARGET_SUN' )
146 set INCLUDES = ( '-I/usr/local/mpi/include' )
147 set FFLAGS = ( '-stackvar -explicitpar -vpara -e -u -noautopar')
148 set FOPTIM = ( '-O5 -fast' )
149 set NOOPTFLAGS = ( '-O0' )
150 set LIBS = ( '-L/usr/local/mpi/lib/solaris/ch_shmem -lmpi -lthread' \
151 '-lsocket -lnsl' )
152 set NOOPTFILES = ( 'barrier.F different_multiple.F load_external_fields.F')
153 breaksw
154 case IRIX32:
155 echo "Configuring for SGI ONYX running IRIX64"
156 set DEFINES = ( ${DEFINES} '-DTARGET_SGI' )
157 set INCLUDES = ( '-I/usr/include' )
158 set FFLAGS = ( '-extend_source -bytereclen -r10000 -64' )
159 set FOPTIM = ( '-O2' )
160 set NOOPTFLAGS = ( '-O0' )
161 set NOOPTFILES = ( 'barrier.F different_multiple.F ' \
162 'load_external_fields.F' )
163 set LIBS = ( '-lmpi' )
164 breaksw
165 case HP-UX:
166 case HP-UX+mpi:
167 echo "Configuring for HP Exemplar"
168 set CPP = ( '/usr/ccs/lbin/cpp -P' )
169 set DEFINES = ( ${DEFINES} '-DTARGET_HP' )
170 set INCLUDES = ( '-I/opt/mpi/include' )
171 set FC = ( 'mpif77' )
172 set LINK = ( 'mpif77' )
173 set FFLAGS = ( '+es +U77 +Onoautopar +Oexemplar_model' \
174 '+Okernel_threads' )
175 set FOPTIM = ( '+O2' )
176 set NOOPTFLAGS = ( '+O0' )
177 set NOOPTFILES = ( 'barrier.F different_multiple.F' \
178 'load_external_fields.F' )
179 breaksw
180 case Linux:
181 set LN = ( '/bin/ln -fs' )
182 set CPP = ( '/usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3/cpp -traditional -P' )
183 set INCLUDES = ( '-I/usr/local/include' )
184 set FC = ( 'g77' )
185 set FFLAGS = ( ' ' )
186 set FOPTIM = ( ' -O3 -funroll-loops ' )
187 set LINK = ( 'g77' )
188 set LIBS = ( '-L/usr/local/lib/LINUX/ch_p4/ -lfmpich -lmpich' )
189 breaksw
190 case Linux+pgi:
191 set LN = ( '/bin/ln -fs' )
192 set CPP = ( '/usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3/cpp -P' )
193 set INCLUDES = ( '-I/usr/local/include' )
194 set FC = ( 'pgf77' )
195 set FFLAGS = ( '-byteswapio' )
196 set FOPTIM = ( '-tp p6 -v -O2 -Munroll -Mvect=cachesize:512000,transform -Kieee' )
197 set LINK = ( 'pgf77' )
198 set LIBS = ( '-L/usr/local/lib/LINUX/ch_p4/ -lfmpich -lmpich -Kieee' )
199 breaksw
200 default:
201 echo "Error: platform not recognized: uname -p = " $platform$USEMPI
202 exit
203 breaksw
204 endsw
205
206 ###############################################################################
207 ## ##
208 ## Everything below here should not need to be changed. Platform specific ##
209 ## changes and code specific changes should be configured above this line. ##
210 ## ##
211 ###############################################################################
212
213 # Create list of files
214 set flist = `ls -1 ${SOURCEDIRS} | grep '.*\.[F]$'`
215 if ( $#flist ) then
216 echo -n "SRCFILES = " > srclist.inc
217 echo -n "F77FILES = " > f77list.inc
218 echo -n "OBJFILES = " > objlist.inc
219 foreach ff ( ${flist} )
220 set fname = ( ${ff:t} )
221 echo ' \' >> srclist.inc
222 echo -n " " ${fname:r}.F >> srclist.inc
223 echo ' \' >> f77list.inc
224 echo -n " " ${fname:r}.f >> f77list.inc
225 echo ' \' >> objlist.inc
226 echo -n " " ${fname:r}.o >> objlist.inc
227 end
228 else
229 echo No source files found...\!
230 exit
231 endif
232 set flist = `ls -1 ${SOURCEDIRS} | grep '.*\.[c]$'`
233 if ( $#flist ) then
234 foreach ff ( ${flist} )
235 set fname = ( ${ff:t} )
236 echo ' \' >> objlist.inc
237 echo -n " " ${fname:r}.o >> objlist.inc
238 endif
239 echo " " >> srclist.inc
240 echo " " >> f77list.inc
241 echo " " >> objlist.inc
242
243 # Convert lists of directories into command-line options
244 foreach inc ($INCLUDEDIRS)
245 set INCLUDES = ($INCLUDES -I$inc)
246 end
247 set SRCSTARS = ( )
248 foreach dr ($SOURCEDIRS)
249 set SRCSTARS = ("${SRCSTARS}" $dr\*.\[Fc\] )
250 end
251
252 set THISHOSTNAME = ( `hostname` )
253 set THISCWD = ( `pwd` )
254 set THISDATE = ( `date` )
255
256 ###########################################
257 ## This is the template for the makefile ##
258 ###########################################
259 echo Creating makefile: $mfile
260 echo "# Multithreaded + multi-processing makefile for $mach" > ${mfile}
261 echo "# This makefile was generated automatically pn" >> ${mfile}
262 echo "# $THISDATE" >> ${mfile}
263 echo "# by the command:" >> ${mfile}
264 echo "# ${0} $argv" >> ${mfile}
265 echo "# executed by:" >> ${mfile}
266 echo "# $USER@${THISHOSTNAME}:${THISCWD}" >> ${mfile}
267 cat >> ${mfile} <<EOF
268 #
269 # BUILDDIR : Directory where object files are written
270 # SOURCEDIRS : Directories containing the source (.F) files
271 # INCLUDEDIRS : Directories containing the header-source (.h) files
272 # EXEDIR : Directory where executable that is generated is written
273 # EXECUTABLE : Full path of executable binary
274 #
275 # CPP : C-preprocessor command
276 # INCLUDES : Directories searched for header files
277 # DEFINES : Macro definitions for CPP
278 # KPP : Special preprocessor command (specific to platform)
279 # KFLAGS : Flags for KPP
280 # FC : Fortran compiler command
281 # FFLAGS : Configuration/debugging options for FC
282 # FOPTIM : Optimization options for FC
283 # LINK : Command for link editor program
284 # LIBS : Library flags /or/ additional optimization/debugging flags
285
286 BUILDDIR = ${BUILDDIR}
287 SOURCEDIRS = ${SOURCEDIRS}
288 INCLUDEDIRS = ${INCLUDEDIRS}
289 EXEDIR = ${EXEDIR}
290 EXECUTABLE = \$(EXEDIR)${EXECUTABLE}
291
292 # Unix ln (link)
293 LN = ${LN}
294 # C preprocessor
295 CPP = cat \$< | ../tools/set64bitConst.sh | ${CPP}
296 # Special preprocessor (KAP on DECs, FPP on Crays)
297 KPP = ${KPP}
298 # Fortran compiler
299 FC = ${FC}
300 # Link editor
301 LINK = ${LINK}
302
303 # Defines for CPP
304 DEFINES = ${DEFINES}
305 # Includes for CPP
306 INCLUDES = ${INCLUDES}
307 # Flags for KPP
308 KFLAGS1 = ${KFLAGS1}
309 KFLAGS2 = ${KFLAGS2}
310 # Optim./debug for FC
311 FFLAGS = ${FFLAGS}
312 FOPTIM = ${FOPTIM}
313 # Files that should not be optimized
314 NOOPTFILES = ${NOOPTFILES}
315 NOOPTFLAGS = ${NOOPTFLAGS}
316 # Flags and libraries needed for linking
317 LIBS = ${LIBS}
318
319 EOF
320
321 cat srclist.inc >> ${mfile}
322 cat f77list.inc >> ${mfile}
323 cat objlist.inc >> ${mfile}
324 rm -f srclist.inc f77list.inc objlist.inc
325
326 cat >> ${mfile} <<EOF
327
328 .SUFFIXES:
329 .SUFFIXES: .o .f .p .F .c
330
331 all: \$(EXECUTABLE)
332 \$(EXECUTABLE): \$(OBJFILES)
333 \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
334 links:
335 @-\$(LN) $SRCSTARS .
336 depend:
337 @make links
338 makedepend -o .f \$(INCLUDES) \$(SRCFILES)
339 clean:
340 -rm -rf *.o *.f *.p ${RMFILES}
341 Clean:
342 @make clean
343 -rm -rf *.[Fc]
344
345 # The normal chain of rules is ( .F - .f - .o )
346 .F.f:
347 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
348 .f.o:
349 \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
350
351 # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain
352 .F.p:
353 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
354 .p.f:
355 \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
356 EOF
357
358 # Make list of "exceptions" that need ".p" files
359 foreach sf ($KPPFILES)
360 set fname=( ${sf:t} )
361 echo "${fname:r}.f: ${fname:r}.p" >> ${mfile}
362 end
363 foreach sf ($NOOPTFILES)
364 set fname=( ${sf:t} )
365 echo "${fname:r}.o: ${fname:r}.f" >> ${mfile}
366 echo ' $(FC) $(FFLAGS) $(NOOPTFLAGS) -c $<' >> ${mfile}
367 end
368 echo >> ${mfile}
369 echo "# DO NOT DELETE" >> ${mfile}
370
371 exit

  ViewVC Help
Powered by ViewVC 1.1.22