New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
fait_AA_make in tags/nemo_v2_3_beta/UTIL – NEMO

source: tags/nemo_v2_3_beta/UTIL/fait_AA_make @ 9309

Last change on this file since 9309 was 639, checked in by opalod, 17 years ago

nemo_v2_compil_002:RB: update fait_AA_make for agrif with TOP

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 25.5 KB
Line 
1#!/bin/ksh
2#set -vx
3############################################################
4#
5# Purpose :
6# This script aims to create create the AA_make file
7# in the WORK directory.
8# AA_make contains :
9#    - compilation options speccific to NEMO
10#    - compilation rules
11#    - dependancies
12# Running the modipsl/util/ins_make command is needed AFTER
13# fait_AA_make.
14#
15# Method :
16# We use temporary files to perform the following steps :
17#    1- search all CPP keys in the code
18#    2- write compilation rules
19#    3- add compilation options add the beginning of AA_make
20#    4- search and write dependancies
21#    5- add some specific rules (links creation in the WORK)
22#
23# Modification : - add F_F for .F file compiler option on aix
24#                - add KEY_CPP dependancy for source containing
25#                              only #if defined CPP statement
26#
27############################################################
28#-
29echo "This script must be run while in the modipsl/modeles/NEMO directory"
30cd WORK
31pwd
32
33#-
34#- Search CPP keys ---
35liste_cle=$(egrep '^# *if[!( &]*def|^# *elif' *.[Fh] *.[Fh]90  2> /dev/null | grep key_ | sed 's/||/\
36/' | sed 's/\&\&/\
37/' | sed 's/^.*key_/key_/' | sed 's/ *[) ] *$//' | sort -u  )
38
39#-
40#- Write main compilation rules ---
41cat > tampon <<end
42
43.SUFFIXES: .f90 .F90 .F
44
45# Target
46all:     diroce \$(EXEC_BIN)
47      @cp SRC_FILE_LIST.temp SRC_FILE_LIST
48      @echo OPA model is OK
49# Cleaning objects, libraries and executables
50clean:
51ifeq (\$(AGRIF),use)
52      -@(cd OPAFILES; ./efface)
53endif
54      \$(RM) model.o \$(MODDIR)/oce/*.mod \$(MODEL_LIB) \$(SXMODEL_LIB) \$(EXEC_BIN)
55      @echo OPA model \(.o .mod libraries and executables are removed\)
56
57# Dependancies
58diroce:
59      @if [ ! -d ../../../lib/oce ] ; then mkdir ../../../lib/oce ; fi
60
61\$(EXEC_BIN) : libioipsl firstagrif mpiagrif key keyverif src_file_list libagrif \$(MODEL_LIB) \$(IOIPSL_LIB) \$(AGRIF_LIB) agrif2model.o model.o
62ifeq (\$(AGRIF),use)
63      \$(F_L) \$(L_X) -o \$(EXEC_BIN) model.o agrif2model.o \$(SXMODEL_LIB) \$(OASISMPI2_LIB) \$(IOIPSL_LIB) \$(AGRIF_LIB) \$(NCDF_LIB) \$(LIBMPI) \$(LIBMP)
64else
65      \$(F_L) \$(L_X) -o \$(EXEC_BIN) model.o \$(SXMODEL_LIB) \$(OASISMPI2_LIB) \$(IOIPSL_LIB) \$(NCDF_LIB) \$(LIBMPI) \$(LIBMP)
66endif
67
68# Agrif library and conv
69libagrif :
70ifeq (\$(AGRIF),use)
71   @( if [ ! -d OPAFILES ]; then mkdir OPAFILES; fi )
72   @( if [ ! -d OPAFILES/AGRIF_INC ]; then mkdir OPAFILES/AGRIF_INC ; fi )
73   @( if [ ! -d OPAFILES/AGRIF_MODELFILES ]; then mkdir OPAFILES/AGRIF_MODELFILES ; fi )
74   @(cd ../../AGRIF ; \$(M_K) -f Makefile P_P="\$(AGRIF_MPI)" )
75   @cp -rf ../../AGRIF/agrif_opa.in OPAFILES/.
76   @cp -rf ../../AGRIF/conv OPAFILES/.
77   @cp -rf ../../AGRIF/efface OPAFILES/.
78endif
79
80# Agrif interface with NEMO
81agrif2model.o :
82ifeq (\$(AGRIF),use)
83   @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F90 > OPAFILES/\$*.F90
84   @\$(F_C) \\
85#-Q- aix    -qsuffix=f=F90 \\
86#-Q- osxxlf    -qsuffix=f=F90 \\
87   \$(P_P) \$(F_O) \\
88#-Q- fjvpp     -Z \$*.L \\
89#-Q- sxnec     -R2 \\
90#-Q- sx6nec    -R2 \\
91#-Q- sx8brodie    -R2 \\
92#-Q- sxdkrz    -R2 \\
93#-Q- eshpux    -R2 \\
94#-Q- aix    -qsource \\
95      OPAFILES/\$*.F90 || { mv \$(PREF).L \$(TMP) ; false ; exit ; }
96#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
97#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
98#-Q- sx8brodie    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
99#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
100#-Q- hpux         @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
101endif
102
103# IOIPSL library
104libioipsl :
105   (cd ../../IOIPSL/src ; \$(M_K) -f Makefile )
106
107# Main program
108model.o :   model.f90
109      @\$(F_C) \$(F_O) -c model.f90
110
111# if the make script is stopped, one doesn't destroy library
112.PRECIOUS : \$(MODEL_LIB)
113#-Q- sxnec .PRECIOUS : \$(SXMODEL_LIB)
114#-Q- sx6nec .PRECIOUS : \$(SXMODEL_LIB)
115#-Q- sx8brodie .PRECIOUS : \$(SXMODEL_LIB)
116#-Q- sxdkrz .PRECIOUS : \$(SXMODEL_LIB)
117#-Q- eshpux .PRECIOUS : \$(SXMODEL_LIB)
118
119# library dependancies
120\$(MODEL_LIB): \$(LIB_OBJ)
121      @echo
122      @echo La bibliotheque est a jour
123      @echo
124
125# Default rules
126.DEFAULTS:
127
128# rules for the .f90 files
129.f90.a :           
130      @\$(F_C) \$(P_P) \$(F_O) \\
131#-Q- fjvpp     -Z \$*.L \\
132#-Q- sxnec     -R2 \\
133#-Q- sx6nec    -R2 \\
134#-Q- sx8brodie    -R2 \\
135#-Q- sxdkrz    -R2 \\
136#-Q- eshpux    -R2 \\
137#-Q- aix    -qsource \\
138      \$*.f90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
139#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
140#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
141#-Q- sx8brodie    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
142#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
143#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
144      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
145      @\$(RM) \$*.[of]
146      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
147#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
148#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
149#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
150      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
151
152# rules for the .F90 files
153.F90.a : 
154ifeq (\$(AGRIF),use) 
155      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F90 > OPAFILES/\$*.F90
156      @(cd OPAFILES ; ./conv agrif_opa.in -rm \\
157#-Q- linux     -SubloopScalar \\
158#-Q- lxiv8     -SubloopScalar \\
159#-Q- g95       -SubloopScalar \\
160#-Q- f95       -SubloopScalar \\
161#-Q- osf1         -SubloopScalar \\
162      -comdirin ./ -comdirout AGRIF_MODELFILES/. -convfile \$*.F90)
163      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
164      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC OPAFILES/\$*.F90 > OPAFILES/AGRIF_MODELFILES/\$*.F90
165      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
166      @\$(F_C) \$(P_P) \$(F_O) \\
167#-Q- fjvpp     -Z \$*.L \\
168#-Q- sxnec     -R2 \\
169#-Q- sx6nec    -R2 \\
170#-Q- sx8brodie    -R2 \\
171#-Q- sxdkrz    -R2 \\
172#-Q- eshpux    -R2 \\
173#-Q- aix    -qsource \\
174      OPAFILES/\$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; } 
175else
176      @\$(F_C) \$(P_P) \$(F_O) \\
177#-Q- fjvpp     -Z \$*.L \\
178#-Q- sxnec     -R2 \\
179#-Q- sx6nec    -R2 \\
180#-Q- sx8brodie    -R2 \\
181#-Q- sxdkrz    -R2 \\
182#-Q- eshpux    -R2 \\
183#-Q- aix    -qsource \\
184      \$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
185endif
186#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
187#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
188#-Q- sx8brodie    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
189#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
190#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
191      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
192      @\$(RM) \$*.[of]
193      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
194#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
195#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
196#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
197      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
198
199# rules for the .F files
200.F.a :           
201ifeq (\$(AGRIF),use) 
202      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F > OPAFILES/\$*.F
203      @(cd OPAFILES ; ./conv agrif_opa.in -rm \\
204#-Q- linux     -SubloopScalar \\
205#-Q- lxiv8     -SubloopScalar \\
206#-Q- g95       -SubloopScalar \\
207#-Q- f95       -SubloopScalar \\
208#-Q- osf1         -SubloopScalar \\
209      -comdirin ./ -comdirout AGRIF_MODELFILES/. -convfile \$*.F)
210      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F OPAFILES/\$*.F
211      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC OPAFILES/\$*.F > OPAFILES/AGRIF_MODELFILES/\$*.F
212      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F OPAFILES/\$*.F
213      @\$(F_C) \$(P_P) \$(F_F) \\
214#-Q- fjvpp     -Z \$*.L \\
215#-Q- sxnec     -R2 \\
216#-Q- sx6nec    -R2 \\
217#-Q- sx8brodie    -R2 \\
218#-Q- sxdkrz    -R2 \\
219#-Q- eshpux    -R2 \\
220#-Q- aix    -qsource \\
221      OPAFILES/\$*.F || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; } 
222else
223      @\$(F_C) \$(P_P) \$(F_O) \\
224#-Q- fjvpp     -Z \$*.L \\
225#-Q- sxnec     -R2 \\
226#-Q- sx6nec    -R2 \\
227#-Q- sx8brodie    -R2 \\
228#-Q- sxdkrz    -R2 \\
229#-Q- eshpux    -R2 \\
230#-Q- aix    -qsource \\
231      \$*.F || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
232endif
233#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
234#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
235#-Q- sx8brodie    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
236#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
237#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
238      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
239      @\$(RM) \$*.[of]
240      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
241#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
242#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
243#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
244      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
245
246# rules for the library from the .f files
247.f.a :     
248      @\$(F_C) \$(F_O) \\
249#-Q- fjvpp     -Z \$*.L \\
250#-Q- sxnec     -R2 \\
251#-Q- sx6nec    -R2 \\
252#-Q- sx8brodie    -R2 \\
253#-Q- sxdkrz    -R2 \\
254#-Q- eshpux    -R2 \\
255#-Q- aix    -qsource \\
256      \$*.f|| { if [ -f \$(PREF)\$*.L ] ; then mv \$*.L \$(TMP) ; fi ; false ; exit ; }
257#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
258#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
259#-Q- sx8brodie    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
260#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
261#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
262      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
263      @\$(RM) -f \$*.o
264#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
265#-Q- linux  @mv \$(PREF)\$*.lst \$(PREF)\$*.L
266#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
267      @if [ -f \$(PREF)\$*.L ] ; then mv \$*.L \$(TMP) ; fi
268
269end
270#-
271#- Compilation options ---
272exec 1> AA_make
273MAIN="model"
274echo '# $Header$'
275echo '# some variables'
276echo 'TMP = ../../../tmp'
277echo '#-Q- sxnec  # Compiler options for NEMO (IDRIS SX5-NEC) '
278echo '#-Q- sxnec  F_O = -dw -Wf\"-A idbl4\" -sx5 -C vopt -Wf"-init stack=nan" -Wl"-f nan" -Wf"-P nh" -Wf,-pvctl noassume loopcnt=10000 -L transform -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)'
279echo '#-Q- sxnec  F_F = $(F_O) -f3'
280echo '#-Q- sxnec  L_X = $(L_O)'
281echo '#-Q- sx6nec  # Compiler options NEMO (CEA SX6-NEC) '
282echo '#-Q- sx6nec  F_O = -size_t64 -dw -Wf\"-A dbl4\" -sx6 -C vopt -Wf"-P nh" -Wf',-pvctl noassume loopcnt=10000 -L transform' -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)'
283echo '#-Q- sx6nec  F_O = -size_t64 -dw -Wf\"-A dbl4\" -sx6 -ftrace -C vopt -Wf"-init stack=nan" -Wl"-f nan" -Wf"-P nh" -Wf,-pvctl noassume loopcnt=10000 -L transform -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)'
284echo '#-Q- sx6nec  F_F = $(F_O) -f3'
285echo '#-Q- sx6nec  L_X = $(L_O) -ftrace'
286echo '#-Q- sx8brodie  # Compiler options NEMO (CEA SX6-NEC) '
287echo '#-Q- sx8brodie  F_O = -dw -Wf\"-A idbl4\" -sx8 -C vopt -Wf"-init stack=nan" -Wl"-f nan" -Wf"-P nh" -Wf,-pvctl noassume loopcnt=10000 -L transform -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)'
288echo '#-Q- sx8brodie  F_F = $(F_O) -f3'
289echo '#-Q- sx8brodie  L_X = $(L_O)'
290echo '#-Q- sxdkrz  # Compiler options for NEMO (DKRZ SX6-NEC) '
291echo '#-Q- sxdkrz  F_O = -ew -sx6 -ftrace -C vopt -Wf"-init stack=nan" -Wl"-f nan" -Wf"-P nh" -Wf"-pvctl noassume loopcnt=10000" -L transform -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)'
292echo '#-Q- sxdkrz  F_F = $(F_O) -f3'
293echo '#-Q- sxdkrz  L_X = $(L_O) -ftrace'
294echo '#-Q- eshpux  # Compiler options for NEMO (Earth Simulator)'
295echo '#-Q- eshpux  # for super perfs!'
296echo '#-Q- eshpux  # F_O = $(FTRACE) -pi nest=5 line=10000 expin=Fmpplib.F -Wf,-A idbl4 -C hopt -Wf"-P nh" -Wf,-pvctl noassume loopcnt=10000 -L transform -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)'
297echo '#-Q- eshpux  # regular options!'
298echo '#-Q- eshpux  F_O = $(FTRACE) -Wf,-A idbl4 -C vopt -P stack -Wf"-P nh" -Wf,-pvctl noassume loopcnt=10000 -L transform -Wf,-pvctl nomsg -Wf"-O nomsg" -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)'
299echo '#-Q- eshpux  F_F = $(F_O) -f3'
300echo '#-Q- eshpux  L_X = $(L_O)'
301echo '#-Q- linux  # Compiler options for NEMO (pgf version)'
302echo '#-Q- linux  F_O = -Mlist -O3 -byteswapio -r8  -I $(MODDIR) -I$(MODDIR)/oce -I $(NCDF_INC)'
303echo '#-Q- linux  F_F = $(F_O)'-Mextend
304echo '#-Q- linux  L_X = -r8 -O3'
305echo '#-Q- lxiv7  # Compiler options for NEMO (ifc version)'
306echo '#-Q- lxiv7  F_O = -O3 -r8  -I $(MODDIR) -I$(MODDIR)/oce -I $(NCDF_INC)'
307echo '#-Q- lxiv7  F_F = $(F_O) -extend_source '
308echo '#-Q- lxiv7  L_X = -r8 -O3'
309echo '#-Q- lxiv8  # Compiler options for NEMO (ifort version)'
310echo '#-Q- lxiv8  F_O = -O3 -r8  -I $(MODDIR) -I$(MODDIR)/oce -I $(NETCDF_INC)'
311echo '#-Q- lxiv8  F_F = $(F_O) -extend_source '
312echo '#-Q- lxiv8  L_X = -r8 -O3'
313echo '#-Q- g95  # Compiler options for NEMO (g95 version)'
314echo '#-Q- g95  F_O = -O3 -fno-second-underscore -r8 -funroll-all-loops -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)'
315echo '#-Q- g95  F_F = $(F_O)'-ffixed-form -ffixed-line-length-132
316echo '#-Q- g95  L_X = -r8 -O3'
317echo '#-Q- aix    # Compiler options for NEMO (aix version)'
318echo '#-Q- aix    F_O = -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qextname -qsource -q64 -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)' 
319echo '#-Q- aix    F_F = -O3 -qsave -qrealsize=8 -qsuffix=f=f -qsuffix=cpp=F -qfixed=132 -qextname -qsource -q64 -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)' 
320echo '#-Q- aix   L_O = $(F_P) -q64 -O3'
321echo '#-Q- aix   L_X = $(L_O)'
322echo '#-Q- osxxlf    # Compiler options for NEMO (osxxlf version)'
323echo '#-Q- osxxlf    F_O = -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qsource -qextname -qstrict -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)' 
324echo '#-Q- osxxlf    F_F = -O3 -qsave -qrealsize=8 -qsuffix=f=f -qsuffix=cpp=F -qfixed=132 -qsource -qextname -qstrict -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)' 
325echo '#-Q- osxxlf    L_X = -qrealsize=8 -O3'
326
327echo 'PREF='
328echo '#-Q- sxnec  PREF=i.'
329echo '#-Q- sx6nec PREF=i.'
330echo '#-Q- sx8brodie PREF=i.'
331echo '#-Q- sxdkrz PREF=i.'
332echo '#-Q- eshpux PREF=i.'
333echo ''
334echo '# add suffix to P_P'
335echo 'P_P := $(P_P:%=$(prefix)%)'
336echo ''
337echo '# Some tests to define variables related to Agrif compilation'
338echo '# Please do not change '
339echo 'ifneq (,$(findstring key_agrif,$(P_P)))'
340echo 'AGRIF=use'
341echo 'else'
342echo 'AGRIF=notuse'
343echo 'AGRIF_LIB='
344echo 'endif'
345echo 'ifneq (,$(findstring key_mpp_mpi,$(P_P)))'
346echo 'AGRIF_MPI=-DAGRIF_MPI'
347echo 'else'
348echo 'AGRIF_MPI='
349echo 'endif'
350
351echo ''
352# Write the cpp key list with one key by line
353echo 'KEY_LIST = \c'
354for i in ${liste_cle}
355do
356 echo "\\"
357 echo "     $i \c"
358done
359
360echo ''
361echo '# .o file list in the library'
362echo 'LIB_OBJ = \c'
363#
364# find all .f in the current directory
365# build object files list  LIB_OBJ
366# one dependancy by line
367
368for i in `ls *.f 2> /dev/null`
369do
370  bn=`basename $i .f`
371  if [ "${bn}" != "${MAIN}" ] 
372  then
373  if [ "${bn}" != "agrif2model" ] 
374  then
375    echo "\\"
376    echo "     \$(MODEL_LIB)($bn.o)\c"
377  fi
378  fi
379done
380
381# find all .f90 in the current directory
382# build object files list  LIB_OBJ
383# one dependancy by line
384
385for i in `ls *.f90  `
386do
387  bn=`basename $i .f90`
388  if [ "${bn}" != "${MAIN}" ] 
389  then
390  if [ "${bn}" != "agrif2model" ] 
391  then
392    echo "\\"
393    echo "     \$(MODEL_LIB)($bn.o)\c"
394  fi
395  fi
396done
397
398# find all .F90 in the current directory
399# build object files list  LIB_OBJ
400# one dependancy by line
401
402for i in `ls *.F90  `
403do
404  bn=`basename $i .F90`
405  if [ "${bn}" != "${MAIN}" ] 
406  then
407  if [ "${bn}" != "agrif2model" ] 
408  then
409    echo "\\"
410    echo "     \$(MODEL_LIB)($bn.o)\c"
411  fi
412  fi
413done
414
415# find all .F in the current directory
416# build object files list  LIB_OBJ
417# one dependancy by line
418
419for i in `ls *.F 2> /dev/null `
420do
421  bn=`basename $i .F`
422  if [ "${bn}" != "${MAIN}" ] 
423  then
424  if [ "${bn}" != "agrif2model" ] 
425  then
426    echo "\\"
427    echo "     \$(MODEL_LIB)($bn.o)\c"
428  fi
429  fi
430 done
431
432echo ""
433
434cat tampon
435rm tampon
436#-
437#- Write all dependancies ---
438
439for fic in `ls *.f90 *.F90  *.F 2> /dev/null `
440do
441    if [ "${fic}" != "agrif2model.F90" ]
442    then
443    if [ "${fic}" != "${MAIN}.[Ff]" ]
444    then
445   i=0
446   j=0
447   dep=""
448   inc=""
449   inc2=""
450   inc3=""
451   luse0=""
452   luse1=""
453   luse2=""
454   luse3=""
455        key=""
456#- search include files (old ice model form, should it be suppressed ?)
457   for inc in `sed -n 's/^[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
458   do
459       dep="$dep\n$inc"
460   done
461
462#- take into account CPP dependancies  keys only (par_trc_trp example)
463   for key in `sed -n 's/^#[  eElL]*[iF][fF][   ]*[dD][eE][fF][iI][nN][eE][dD][  ]*//p' $fic | sort -u`
464   do
465       j=1
466   done
467
468#- search include files on 3 levels
469   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
470   do
471       j=1
472       dep="$dep\n$inc"
473      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
474      do
475          dep="$dep\n$inc2"
476          #- search include  in include (third level !!!)
477          for inc3 in `sed -n 's/^#[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc2 | sort -u`
478          do
479         dep="$dep\n$inc3"
480          done
481      done
482   done
483
484#- search USE in include files
485   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
486   do
487      for fuse0 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc | sort -u`
488      do
489           if [ $fuse0 != "ioipsl" ] 
490                then
491                if [ $fuse0 != "Agrif_Util" ] 
492                then
493                if [ $fuse0 != "Agrif_Types" ] 
494                then
495                if [ $fuse0 != "netcdf" ] 
496                then
497          lfuse0=$fuse0.f90
498          [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
499          luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
500                fi
501                fi
502                fi
503                fi
504      done
505
506#- search USE in  files included in included files and add to luse0
507
508      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
509      do
510          for fuse0 in `sed -n 's/^[   ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc2 | sort -u`
511          do
512               if [ $fuse0 != "ioipsl" ] 
513                    then
514                    if [ $fuse0 != "Agrif_Util" ] 
515                    then
516                    if [ $fuse0 != "Agrif_Types" ] 
517                    then
518                    if [ $fuse0 != "netcdf" ] 
519                    then
520              lfuse0=$fuse0.f90
521              [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
522              luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
523                    fi
524                    fi
525                    fi
526                    fi
527          done
528           done
529   done
530
531#- search USE (and USE of USE and so on three levels)
532   for fuse1 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $fic | sort -u`
533   do
534   if [ $fuse1 != "ioipsl" ] 
535        then
536        if [ $fuse1 != "Agrif_Util" ] 
537        then
538        if [ $fuse1 != "Agrif_Types" ] 
539        then
540        if [ $fuse1 != "netcdf" ] 
541        then
542       lfuse1=$fuse1.f90
543       [ -f $fuse1.F90 ] && lfuse1=$fuse1.F90
544       luse1="$luse1\n$lfuse1\n\$(MODEL_LIB)($fuse1.o)"
545      for fuse2 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse1 | sort -u`
546      do
547           if [ $fuse2 != "ioipsl" ] 
548                then
549                if [ $fuse2 != "Agrif_Util" ] 
550                then
551                if [ $fuse2 != "Agrif_Types" ] 
552                then
553                if [ $fuse2 != "netcdf" ] 
554                then
555          lfuse2=$fuse2.f90
556          [ -f $fuse2.F90 ] && lfuse2=$fuse2.F90
557          luse2="$luse2\n$lfuse2\n\$(MODEL_LIB)($fuse2.o)"
558          # on cherche les USE  dans le fichier deja USE (3eme niveau! balaise!)
559          for fuse3 in `sed -n 's/^#[     ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse2 | sort -u`
560          do
561          if [ $fuse3 != "ioipsl" ] 
562                    then
563                    if [ $fuse3 != "Agrif_Util" ] 
564                    then
565                    if [ $fuse3 != "Agrif_Types" ] 
566                    then
567                    if [ $fuse3 != "netcdf" ] 
568                    then
569         luse3="$luse3\n$lfuse3\n\$(MODEL_LIB)($fuse3.o)"
570                    fi         
571                    fi         
572                    fi         
573                    fi         
574                    done
575                fi
576                fi
577                fi
578                fi
579      done
580        fi
581        fi
582        fi
583        fi
584   done
585#-
586#-  dep contains all dependancies
587   echo "\$(MODEL_LIB)(`echo $fic|awk -F. '{print $1}'`.o) :   \c"
588   for depele in `echo $luse3 | sort -u` `echo $luse2 | sort -u` `echo $luse1 | sort -u` `echo $luse0 | sort -u` `echo $dep | sort -u`
589   do
590       echo "\\"
591       echo "  $depele \c"
592       let i=i+1 # pour signaler le premier
593   done
594
595#-
596#- add dependancies with IOIPSL library (if source files contains IOIPSL)
597        grep -i 'use *ioipsl' ${fic} >/dev/null && ( echo "\\" ; echo " \$(IOIPSL_LIB) \c")
598
599#-
600#- add dependancies with IOIPSL library (if source files contains Agrif_*)
601        grep -i 'use Agrif_*' ${fic} >/dev/null && ( echo "\\" ; echo " \$(AGRIF_LIB) \c")
602
603#-
604#- add dependancies with KEY_CPP (if source file includes cpp  keys)
605   if [ ${j} != "0" ] 
606        then
607     echo "\\"
608     echo " KEY_CPP \c" 
609   fi
610#-
611#- end with the file itself
612        echo "\\"
613              echo " $fic"
614    fi
615    fi
616echo $fic done >/dev/tty
617done
618#-
619#- Write some special rules ---
620echo '# agrif previous use'
621echo "firstagrif:"
622echo "ifeq (\$(AGRIF),use)"
623echo '   @if [ -z "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) model.o $(MODDIR)/oce/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
624echo "else"
625echo '   @if [ -n "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) -r OPAFILES model.o $(MODDIR)/oce/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
626echo "endif"
627#-
628echo '#- RB : this rule is a pretty miserable trick to be able to re-compile NEMP-AGRIF-mono after NEMO-AGRIF-mpp'
629echo '#- I guess the good correction should be in AGRIF/LIB/toamr.c for the conv, to remove useless allocation declarations in AGRIF_INC'
630echo '# recompile all in this case' 
631echo "mpiagrif:"
632echo "ifeq (\$(AGRIF),use)"
633echo "ifeq (,\$(AGRIF_MPI))"
634echo '   @if [ -n "`cat KEY_CPP | grep key_mpp_mpi`" ]; then $(RM) -r OPAFILES model.o $(MODDIR)/oce/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
635echo "endif"
636echo "endif"
637#-
638echo '# key changing control'
639echo "key: "
640echo "   @echo CHANGE of CPP KEYS yes/no ?"
641echo "   -@if [ \"\`cat KEY_CPP\`\" != \"\$(P_P:\$(prefix)%=%)\" ] ; then \\"
642echo "      echo CPP options changed ; echo \"\$(P_P:\$(prefix)%=%)\" > KEY_CPP ; fi "
643#-
644echo '# check key values'
645echo "keyverif:"
646echo '   @echo CHECKING KEY'
647echo '   @echo KEY USED : '
648echo '   @for v in ` echo $(P_P:$(prefix)%=%) ` ; \'
649echo '   do \'
650echo '   echo $$v ;\'
651echo '        w=`echo $$v | cut -c1-3` ; \'
652echo '        if [ $$w = `echo "key"` ] ; then \'
653echo '        r=n ; \'
654echo '        echo " $(KEY_LIST) " | (grep $$v >/dev/null 2>&1) || r=o ; \'
655echo '           if [ $$r != "n" ] ; then \'
656echo '              echo "UNKNOWN KEY" ;\'
657echo '              false ;  \'
658echo '              exit ;  \'
659echo '           fi \'
660echo '        fi \'
661echo '   done'
662echo '# Checking the number of routines'
663echo "src_file_list: "
664echo '   @echo CHECKING THE NUMBER AND NAMES OF SOURCE FILES '
665echo '   @$(RM) `ls | fgrep -v -f .patron` '
666echo '   @check=`grep OPA_SRC .config`              ; \'
667echo '   if [ -n "$$check" ] ; then                   \'
668echo '   echo "   use OPA_SRC files"                ; \'
669echo '       ln -sf ../OPA_SRC/*.[Ffh]90          . ; \'
670echo '       ln -sf ../OPA_SRC/DYN/*.[Ffh]90      . ; \'
671echo '       ln -sf ../OPA_SRC/TRA/*.[Ffh]90      . ; \'
672echo '       ln -sf ../OPA_SRC/TRD/*.[Ffh]90      . ; \'
673echo '       ln -sf ../OPA_SRC/DIA/*.[Ffh]90      . ; \'
674echo '       ln -sf ../OPA_SRC/DOM/*.[Ffh]90      . ; \'
675echo '       ln -sf ../OPA_SRC/OBC/*.[Ffh]90      . ; \'
676echo '       ln -sf ../OPA_SRC/FLO/*.[Ffh]90      . ; \'
677echo '       ln -sf ../OPA_SRC/LDF/*.[Ffh]90      . ; \'
678echo '       ln -sf ../OPA_SRC/ZDF/*.[Ffh]90      . ; \'
679echo '       ln -sf ../OPA_SRC/SOL/*.[Ffh]90      . ; \'
680echo '       ln -sf ../OPA_SRC/DTA/*.[Ffh]90      . ; \'
681echo '       ln -sf ../OPA_SRC/SBC/*.[Ffh]90      . ; \'
682echo '       ln -sf ../OPA_SRC/IOM/*.[Ffh]90      . ; \'
683echo '  fi '
684echo '   @check=`grep LIM_SRC .config`              ; \'
685echo '   if [ -n "$$check" ] ; then                   \'
686echo '   echo "   use LIM_SRC files"                ; \'
687echo '      ln -sf ../LIM_SRC/*.[Ffh]90          . ; \'
688echo '  fi '
689echo '   @check=`grep C1D_SRC .config`              ; \'
690echo '   if [ -n "$$check" ] ; then                   \'
691echo '   echo "   use C1D_SRC files"                ; \'
692echo '      ln -sf ../C1D_SRC/*.[Ffh]90          . ; \'
693echo '  fi '
694echo '   @check=`grep TOP_SRC .config`              ; \'
695echo '   if [ -n "$$check" ] ; then  \'
696echo '   echo "   use TOP_SRC files"                ; \'
697echo '      \$(RM) trcstp.F90                      ; \'
698echo '      \$(RM) sms.F90                         ; \'
699echo '      \$(RM) initrc.F90                      ; \'
700echo '      ln -sf ../TOP_SRC/*.[Ffh]90          . ; \'
701echo '      ln -sf ../TOP_SRC/SMS/*.[Ffh]        . ; \'
702echo '      ln -sf ../TOP_SRC/SMS/*.[Ffh]90      . ; \'
703echo '      ln -sf ../TOP_SRC/TRP/*.[Ffh]90      . ; \'
704echo '  fi '
705echo '   @check=`grep OFF_SRC .config`              ; \'
706echo '   if [ -n "$$check" ] ; then                   \'
707echo '   echo "   use OFF_SRC files"                ; \'
708echo '      ln -sf ../OFF_SRC/*.[Ffh]90          . ; \'
709echo '      ln -sf ../OFF_SRC/*/*.[Ffh]90        . ; \'
710echo '  fi '
711echo '   @check=`grep NST_SRC .config`              ; \'
712echo '   if [ -n "$$check" ] ; then                   \'
713echo '   echo "   use NST_SRC files"                ; \'
714echo '      \$(RM) agrif_opa_interp.F90           ; \'
715echo '      \$(RM) agrif_opa_sponge.F90           ; \'
716echo '      \$(RM) agrif_opa_update.F90           ; \'
717echo '      ln -sf ../NST_SRC/*.[Ffh]90      .     ; \'
718echo '  fi '
719echo '   @\$(RM) tmplist'
720echo '   @ls -1 | fgrep -v -f .patron  >tmplist'
721echo '   @cmp tmplist SRC_FILE_LIST.temp || { echo some routines have been added or suppressed ; \'
722echo '   sdiff -s tmplist SRC_FILE_LIST.temp ; cp tmplist SRC_FILE_LIST.temp ; \'
723echo '   \$(RM) model.o \$(MODEL_LIB) \$(SXMODEL_LIB) \$(EXEC_BIN) ; \'
724echo '   echo "Rebuilding the AA_make files" ; \'
725echo '   cd ..  ; ../UTIL/fait_AA_make ; echo " " ; \'
726echo '   echo "THE ins_make COMMAND in modipsl/util MUST BE RERUN PLEASE DO SO BEFORE gmake" ; \'
727echo '   echo "========================================== " ; \'
728echo '   ../../util/ins_make ; echo " " ;  false ; exit ; }'
729exec > /dev/null
730
Note: See TracBrowser for help on using the repository browser.