/[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.16 - (hide annotations) (download)
Fri Mar 24 19:28:46 2000 UTC (24 years ago) by adcroft
Branch: MAIN
CVS Tags: checkpoint26, checkpoint27, checkpoint28
Changes since 1.15: +2 -1 lines
Added yet another Hyades only path for the two-proc libraries

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

  ViewVC Help
Powered by ViewVC 1.1.22