/[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.9 - (show annotations) (download)
Mon Mar 22 16:27:13 1999 UTC (25 years, 1 month ago) by adcroft
Branch: MAIN
CVS Tags: checkpoint20
Changes since 1.8: +9 -9 lines
Changes for linux and command line operation.

1 #!/bin/csh -f
2 #
3 # $Header: /u/gcmpack/models/MITgcmUV/tools/genmake,v 1.8 1998/12/08 18:08:51 adcroft 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 -help:
34 echo "usage: $0 [-help] [-makefile[=...]] [-platform=...] [-mpi]"
35 exit
36 breaksw
37 default:
38 echo "Unknown command-line option: " $arg
39 echo $0 "-help to show usage"
40 exit
41 breaksw
42 endsw
43 shift allargs
44 end
45
46 if ($?platform == 0) then
47 set platform = (`uname`)
48 endif
49 if ($?mfile == 0) set mfile = ( Makefile.$platform )
50 set mach = ( `uname -a` )
51 echo Operating system: $mach
52
53 # Directories for source, includes, binaries and executables
54 # Note
55 # o If you prefer/need everything under a single directory
56 # copy everything in ../eesupp/src, ../model/src,
57 # ../eesupp/inc and ../model/inc into a directory and then
58 # edit the paths below to ./
59 set SOURCEDIRS = ( ../eesupp/src/ ../model/src/ ../diags/src/)
60 set INCLUDEDIRS = ( ../eesupp/inc/ ../model/inc/ ../diags/inc/)
61 set BUILDDIR = ( ../bin/ )
62 set EXEDIR = ( ../exe/ )
63 set EXECUTABLE = ( mitgcmuv )
64
65 # This is the generic configuration.
66 # Platform specific options are chosen below
67 set LN = ( 'ln -sf' )
68 set CPP = ( '/lib/cpp -P' )
69 set KPP = ( )
70 set FC = ( 'f77' )
71 set LINK = ( 'f77' )
72 set DEFINES = ( )
73 set INCLUDES = ( )
74 set FFLAGS = ( )
75 set FOPTIM = ( )
76 set KFLAGS1 = ( )
77 set KFLAGS2 = ( )
78 set LIBS = ( )
79 set KPPFILES = ( )
80 set NOOPTFILES = ( )
81 set NOOPTFLAGS = ( )
82 set RMFILES = ( )
83
84 # We often want to use different compile/link options is using MPI
85 if ($?USEMPI) then
86 set USEMPI = ( '+mpi' )
87 set DEFINES = ( ${DEFINES} '-DALLOW_USE_MPI -DALWAYS_USE_MPI' )
88 else
89 set USEMPI
90 # set DEFINES = ( ${DEFINES} '-UALLOW_USE_MPI -UALWAYS_USE_MPI' )
91 endif
92
93 # Platform specific options
94 switch ($platform$USEMPI)
95 case OSF1:
96 case OSF1+mpi:
97 echo "Configuring for DEC Alpha"
98 set CPP = ( '/usr/bin/cpp -P' )
99 set DEFINES = ( ${DEFINES} '-DTARGET_DEC' )
100 set KPP = ( 'kapf' )
101 set KPPFILES = ( 'main.F' )
102 set KFLAGS1 = ( '-scan=132 -noconc -cmp=' )
103 set FC = ( 'f77' )
104 set FFLAGS = ( '-convert big_endian -r8 -extend_source -u -automatic -call_shared -notransform_loops -align dcommons' )
105 set FOPTIM = ( '-O5 -fast -tune host -inline all' )
106 set NOOPTFLAGS = ( '-O0' )
107 set LIBS = ( '-lfmpi -lmpi -lkmp_osfp10 -pthread' )
108 set NOOPTFILES = ( 'barrier.F different_multiple.F load_external_fields.F')
109 set RMFILES = ( '*.p.out' )
110 breaksw
111 case IRIX64+mpi:
112 echo "Configuring for SGI Mips with MPI"
113 set DEFINES = ( ${DEFINES} '-DTARGET_SGI' )
114 set INCLUDES = ( '-I/usr/local/mpi/include' )
115 set FC = ( 'mpif77' )
116 set LINK = ( 'mpif77' )
117 set FFLAGS = ( '-extend_source -bytereclen -r10000' )
118 set FOPTIM = ( '-O3' )
119 set RMFILES = ( 'rii_files' )
120 breaksw
121 case IRIX64:
122 echo "Configuring for SGI Mips"
123 set DEFINES = ( ${DEFINES} '-DTARGET_SGI' )
124 set INCLUDES = ( '-I/usr/local/mpi/include' )
125 set FFLAGS = ( '-extend_source -mp -mpio -bytereclen -r10000 -mips4' )
126 set FOPTIM = ( '-O2' )
127 set NOOPTFLAGS = ( '-O0' )
128 set NOOPTFILES = ( 'barrier.F different_multiple.F ' \
129 'load_external_fields.F' )
130 set RMFILES = ( 'rii_files' )
131 breaksw
132 case SunOS:
133 set LN = ( '/usr/bin/ln -fs' )
134 set CPP = ( '/usr/ccs/lib/cpp -P' )
135 set DEFINES = ( ${DEFINES} '-DTARGET_SUN' )
136 set FFLAGS = ( '-stackvar -explicitpar -vpara -e -u -noautopar')
137 set FOPTIM = ( '-O5 -fast' )
138 set NOOPTFLAGS = ( '-O0' )
139 set NOOPTFILES = ( 'barrier.F different_multiple.F load_external_fields.F')
140 breaksw
141 case SunOS+mpi:
142 set LN = ( '/usr/bin/ln -fs' )
143 set CPP = ( '/usr/ccs/lib/cpp -P' )
144 set DEFINES = ( ${DEFINES} '-DTARGET_SUN' )
145 set INCLUDES = ( '-I/usr/local/mpi/include' )
146 set FFLAGS = ( '-stackvar -explicitpar -vpara -e -u -noautopar')
147 set FOPTIM = ( '-O5 -fast' )
148 set NOOPTFLAGS = ( '-O0' )
149 set LIBS = ( '-L/usr/local/mpi/lib/solaris/ch_shmem -lmpi -lthread' \
150 '-lsocket -lnsl' )
151 set NOOPTFILES = ( 'barrier.F different_multiple.F load_external_fields.F')
152 breaksw
153 case IRIX32:
154 echo "Configuring for SGI ONYX running IRIX64"
155 set DEFINES = ( ${DEFINES} '-DTARGET_SGI' )
156 set INCLUDES = ( '-I/usr/include' )
157 set FFLAGS = ( '-extend_source -bytereclen -r10000 -64' )
158 set FOPTIM = ( '-O2' )
159 set NOOPTFLAGS = ( '-O0' )
160 set NOOPTFILES = ( 'barrier.F different_multiple.F ' \
161 'load_external_fields.F' )
162 set LIBS = ( '-lmpi' )
163 breaksw
164 case HP-UX:
165 case HP-UX+mpi:
166 echo "Configuring for HP Exemplar"
167 set CPP = ( '/usr/ccs/lbin/cpp -P' )
168 set DEFINES = ( ${DEFINES} '-DTARGET_HP' )
169 set INCLUDES = ( '-I/opt/mpi/include' )
170 set FC = ( 'mpif77' )
171 set LINK = ( 'mpif77' )
172 set FFLAGS = ( '+es +U77 +Onoautopar +Oexemplar_model' \
173 '+Okernel_threads' )
174 set FOPTIM = ( '+O2' )
175 set NOOPTFLAGS = ( '+O0' )
176 set NOOPTFILES = ( 'barrier.F different_multiple.F' \
177 'load_external_fields.F' )
178 breaksw
179 case Linux+mpi:
180 set LIBS = ( '-L/usr/local/lib/LINUX/ch_p4/ -lfmpich -lmpich' )
181 case Linux:
182 set LN = ( '/bin/ln -fs' )
183 set CPP = ( '/usr/lib/gcc-lib/i386-redhat-linux/2.7.2.3/cpp -traditional -P' )
184 set INCLUDES = ( '-I/usr/local/include' )
185 set FC = ( 'g77' )
186 set FFLAGS = ( ' ' )
187 set FOPTIM = ( '-O3 -funroll-loops ' )
188 set LINK = ( 'g77' )
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 -find . -type l -exec rm {} \;
344 -rm Makefile.bak
345
346 # The normal chain of rules is ( .F - .f - .o )
347 .F.f:
348 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
349 .f.o:
350 \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
351
352 # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain
353 .F.p:
354 \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
355 .p.f:
356 \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
357 EOF
358
359 # Make list of "exceptions" that need ".p" files
360 foreach sf ($KPPFILES)
361 set fname=( ${sf:t} )
362 echo "${fname:r}.f: ${fname:r}.p" >> ${mfile}
363 end
364 foreach sf ($NOOPTFILES)
365 set fname=( ${sf:t} )
366 echo "${fname:r}.o: ${fname:r}.f" >> ${mfile}
367 echo ' $(FC) $(FFLAGS) $(NOOPTFLAGS) -c $<' >> ${mfile}
368 end
369 echo >> ${mfile}
370 echo "# DO NOT DELETE" >> ${mfile}
371
372 exit

  ViewVC Help
Powered by ViewVC 1.1.22