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_tam in branches/TAM_V3_0/UTIL – NEMO

source: branches/TAM_V3_0/UTIL/fait_AA_make_tam @ 1947

Last change on this file since 1947 was 1947, checked in by rblod, 14 years ago

adjustement for TAM branch

  • Property svn:executable set to *
File size: 22.9 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 NEMOTAM
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/NEMOTAM directory"
30cd WORK
31pwd
32
33# Test version of echo
34stringtest=`echo "\c"`
35if [ "$stringtest" ]; then
36   echo 'aliasing echo with /bin/echo -e ...'
37   alias echo='echo -e'
38fi
39
40#-
41#- Search CPP keys ---
42liste_cle=$(egrep '^# *if[!( &]*def|^# *elif' *.[Fh] *.[Fh]90  2> /dev/null | grep key_ | sed 's/||/\
43/' | sed 's/\&\&/\
44/' | sed 's/^.*key_/key_/' | sed 's/ *[) ] *$//' | sort -u  )
45
46#-
47#- Write main compilation rules ---
48cat > tampon <<end
49
50.SUFFIXES: .f90 .F90 .F
51
52# Target
53all:     diroce \$(EXEC_BIN)
54      @cp SRC_FILE_LIST.temp SRC_FILE_LIST
55      @echo OPATAM model is OK
56# Cleaning objects, libraries and executables
57clean:
58ifeq (\$(AGRIF),use)
59      -@(cd OPAFILES; ./efface)
60endif
61      \$(RM) model_tam.o \$(MODDIR)/ocetam/*.mod \$(MODEL_LIB) \$(SXMODEL_LIB) \$(EXEC_BIN)
62      @echo OPATAM model \(.o .mod libraries and executables are removed\)
63
64# Dependancies
65diroce:
66      @if [ ! -d ../../../lib/ocetam ] ; then mkdir ../../../lib/ocetam ; fi
67
68\$(EXEC_BIN) : libioipsl firstagrif mpiagrif key keyverif  src_file_list libagrif \$(MODEL_LIB) \$(IOIPSL_LIB) \$(AGRIF_LIB) agrif2model.o model_tam.o
69ifeq (\$(AGRIF),use)
70      \$(F_L) \$(L_X) -o \$(EXEC_BIN) model_tam.o agrif2model.o \$(SXMODEL_LIB) \$(OASISMPI2_LIB) \$(IOIPSL_LIB) \$(AGRIF_LIB) \$(NCDF_LIB) \$(LIBMPI) \$(LIBMP)
71else
72      \$(F_L) \$(L_X) -o \$(EXEC_BIN) model_tam.o \$(SXMODEL_LIB) \$(OASISMPI2_LIB) \$(IOIPSL_LIB) \$(NCDF_LIB) \$(LIBMPI) \$(LIBMP)
73endif
74
75# Agrif library and conv
76libagrif :
77ifeq (\$(AGRIF),use)
78   @( if [ ! -d OPAFILES ]; then mkdir OPAFILES; fi )
79   @( if [ ! -d OPAFILES/AGRIF_INC ]; then mkdir OPAFILES/AGRIF_INC ; fi )
80   @( if [ ! -d OPAFILES/AGRIF_MODELFILES ]; then mkdir OPAFILES/AGRIF_MODELFILES ; fi )
81   @(cd ../../AGRIF ; \$(M_K) -f Makefile P_P="\$(AGRIF_MPI)" )
82   @cp -rf ../../AGRIF/agrif_opa.in OPAFILES/.
83   @cp -rf ../../AGRIF/conv OPAFILES/.
84   @cp -rf ../../AGRIF/efface OPAFILES/.
85endif
86
87# Agrif interface with NEMO
88agrif2model.o :
89ifeq (\$(AGRIF),use)
90   @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F90 > OPAFILES/\$*.F90
91   @\$(F_C) \\
92#-Q- aix    -qsuffix=f=F90 \\
93#-Q- babel     -qsuffix=f=F90 \\
94#-Q- osxxlf    -qsuffix=f=F90 \\
95   \$(P_P) \$(F_O) \\
96#-Q- fjvpp     -Z \$*.L \\
97#-Q- sx8mercure      -R2 \\
98#-Q- sx8brodie    -R2 \\
99#-Q- sxdkrz    -R2 \\
100#-Q- eshpux    -R2 \\
101#-Q- aix    -qsource \\
102#-Q- babel     -qsource \\
103      OPAFILES/\$*.F90 || { mv \$(PREF).L \$(TMP) ; false ; exit ; }
104#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
105#-Q- eshpux       @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
106endif
107
108# IOIPSL library
109libioipsl :
110   (cd ../../IOIPSL/src ; \$(M_K) -f Makefile )
111
112# Main program
113model_tam.o :  model_tam.F90
114      @\$(F_C) \$(F_O) -c model_tam.F90
115
116# if the make script is stopped, one doesn't destroy library
117.PRECIOUS : \$(MODEL_LIB)
118#-Q- sxdkrz .PRECIOUS : \$(SXMODEL_LIB)
119#-Q- eshpux .PRECIOUS : \$(SXMODEL_LIB)
120
121# library dependancies
122\$(MODEL_LIB): \$(LIB_OBJ)
123      @echo
124      @echo The library is up-to-date
125      @echo
126
127# Default rules
128.DEFAULTS:
129
130# rules for the .f90 files
131.f90.a :           
132      @\$(F_C) \$(P_P) \$(F_O) \\
133#-Q- fjvpp     -Z \$*.L \\
134#-Q- sx8mercure      -R2 \\
135#-Q- sx8brodie    -R2 \\
136#-Q- sxdkrz    -R2 \\
137#-Q- eshpux    -R2 \\
138#-Q- aix    -qsource \\
139#-Q- babel     -qsource \\
140      \$*.f90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
141#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
142#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
143      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
144      @\$(RM) \$*.[of]
145      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/ocetam ; fi
146#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
147#-Q- babel     @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- g95       -SubloopScalar \\
159#-Q- f95       -SubloopScalar \\
160#-Q- osf1         -SubloopScalar \\
161      -comdirin ./ -comdirout AGRIF_MODELFILES/. -convfile \$*.F90)
162      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
163      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC OPAFILES/\$*.F90 > OPAFILES/AGRIF_MODELFILES/\$*.F90
164      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
165      @\$(F_C) \$(P_P) \$(F_O) \\
166#-Q- fjvpp     -Z \$*.L \\
167#-Q- sx8mercure      -R2 \\
168#-Q- sx8brodie    -R2 \\
169#-Q- sxdkrz    -R2 \\
170#-Q- eshpux    -R2 \\
171#-Q- aix    -qsource \\
172#-Q- babel     -qsource \\
173      OPAFILES/\$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; } 
174else
175      @\$(F_C) \$(P_P) \$(F_O) \\
176#-Q- fjvpp     -Z \$*.L \\
177#-Q- sx8mercure      -R2 \\
178#-Q- sx8brodie    -R2 \\
179#-Q- sxdkrz    -R2 \\
180#-Q- eshpux    -R2 \\
181#-Q- aix    -qsource \\
182#-Q- babel     -qsource \\
183      \$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
184endif
185#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
186#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
187      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
188      @\$(RM) \$*.[of]
189      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/ocetam ; fi
190#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
191#-Q- babel     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
192#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
193#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
194      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
195
196# rules for the .F files
197.F.a :           
198ifeq (\$(AGRIF),use) 
199      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F > OPAFILES/\$*.F
200      @(cd OPAFILES ; ./conv agrif_opa.in -rm \\
201#-Q- linux     -SubloopScalar \\
202#-Q- g95       -SubloopScalar \\
203#-Q- f95       -SubloopScalar \\
204#-Q- osf1         -SubloopScalar \\
205      -comdirin ./ -comdirout AGRIF_MODELFILES/. -convfile \$*.F)
206      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F OPAFILES/\$*.F
207      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC OPAFILES/\$*.F > OPAFILES/AGRIF_MODELFILES/\$*.F
208      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F OPAFILES/\$*.F
209      @\$(F_C) \$(P_P) \$(F_F) \\
210#-Q- fjvpp     -Z \$*.L \\
211#-Q- sx8mercure      -R2 \\
212#-Q- sx8brodie    -R2 \\
213#-Q- sxdkrz    -R2 \\
214#-Q- eshpux    -R2 \\
215#-Q- aix    -qsource \\
216#-Q- babel     -qsource \\
217      OPAFILES/\$*.F || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; } 
218else
219      @\$(F_C) \$(P_P) \$(F_O) \\
220#-Q- fjvpp     -Z \$*.L \\
221#-Q- sx8mercure      -R2 \\
222#-Q- sx8brodie    -R2 \\
223#-Q- sxdkrz    -R2 \\
224#-Q- eshpux    -R2 \\
225#-Q- aix    -qsource \\
226#-Q- babel     -qsource \\
227      \$*.F || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
228endif
229#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
230#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
231      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
232      @\$(RM) \$*.[of]
233      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/ocetam ; fi
234#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
235#-Q- babel     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
236#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
237#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
238      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
239
240# rules for the library from the .f files
241.f.a :     
242      @\$(F_C) \$(F_O) \\
243#-Q- fjvpp     -Z \$*.L \\
244#-Q- sx8mercure      -R2 \\
245#-Q- sx8brodie    -R2 \\
246#-Q- sxdkrz    -R2 \\
247#-Q- eshpux    -R2 \\
248#-Q- aix    -qsource \\
249#-Q- babel     -qsource \\
250      \$*.f|| { if [ -f \$(PREF)\$*.L ] ; then mv \$*.L \$(TMP) ; fi ; false ; exit ; }
251#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
252#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
253      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
254      @\$(RM) -f \$*.o
255#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
256#-Q- babel     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
257#-Q- linux  @mv \$(PREF)\$*.lst \$(PREF)\$*.L
258#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
259      @if [ -f \$(PREF)\$*.L ] ; then mv \$*.L \$(TMP) ; fi
260
261end
262#-
263#- Compilation options ---
264exec 1> AA_make
265MAIN="model"
266echo '# $Header$'
267echo '# some variables'
268echo 'TMP = ../../../tmp'
269echo ''
270echo '#WARNING : NEMOTAM does NOT support fortran 95 signed zero behaviour when using intrinsec SIGN function'
271echo '#          This doesnt happen whith Fortran 90 compilers but'
272echo '#          Check your compilers option in consequence when using real F95 compilers'
273echo ''
274echo '#-Q- sx8mercure  # Compiler options NEMOTAM (CEA SX6-NEC) '
275echo '#-Q- sx8mercure  F_O = -f2003 nocbind noopt_ieee -size_t64 -dw -Wf\"-A dbl4\" -sx6 -C vopt -Wf"-P nh" -Wf',-pvctl noassume loopcnt=10000 -L transform' -I $(MODDIR) -I $(MODDIR)/ocetam -I $(NCDF_INC)'
276echo '#-Q- sx8mercure  F_O = -f2003 nocbind noopt_ieee -size_t64 -dw -Wf\"-A dbl4\" -sx6 -ftrace -C vopt -Wf"-init stack=nan" -Wl"-f nan" -Wf"-P nh -O overlap" -Wf,-pvctl noassume loopcnt=10000 -L transform -I $(MODDIR) -I $(MODDIR)/ocetam -I $(NCDF_INC)'
277echo '#-Q- sx8mercure  F_F = $(F_O) -f3'
278echo '#-Q- sx8mercure  L_X = $(L_O) -ftrace'
279echo '#-Q- sx8brodie  # Compiler options NEMOTAM (CEA SX6-NEC) '
280echo '#-Q- sx8brodie  F_O =  -f2003 nocbind noopt_ieee -dw -Wf\"-A idbl4\" -sx8 -C vopt -Wf"-init stack=nan" -Wl"-f nan" -Wf"-P nh -O overlap" -Wf,-pvctl noassume loopcnt=10000 -L transform -I $(MODDIR) -I $(MODDIR)/ocetam -I $(NCDF_INC)'
281echo '#-Q- sx8brodie  F_F = $(F_O) -f3'
282echo '#-Q- sx8brodie  L_X = $(L_O)'
283echo '#-Q- sxdkrz  # Compiler options for NEMOTAM (DKRZ SX6-NEC) '
284echo '#-Q- sxdkrz  F_O =  -f2003 nocbind noopt_ieee -ew -sx6 -ftrace -C vopt -Wf"-init stack=nan" -Wl"-f nan" -Wf"-P nh -O overlap" -Wf"-pvctl noassume loopcnt=10000" -L transform -I $(MODDIR) -I $(MODDIR)/ocetam -I $(NCDF_INC)'
285echo '#-Q- sxdkrz  F_F = $(F_O) -f3'
286echo '#-Q- sxdkrz  L_X = $(L_O) -ftrace'
287echo '#-Q- eshpux  # Compiler options for NEMOTAM (Earth Simulator)'
288echo '#-Q- eshpux  # for super perfs!'
289echo '#-Q- eshpux  # F_O = -f2003 nocbind noopt_ieee $(FTRACE) -pi nest=5 line=10000 expin=Fmpplib.F -Wf,-A idbl4 -C hopt -Wf"-P nh -O overlap" -Wf,-pvctl noassume loopcnt=10000 -L transform -I $(MODDIR) -I $(MODDIR)/ocetam -I $(NCDF_INC)'
290echo '#-Q- eshpux  # regular options!'
291echo '#-Q- eshpux  F_O = -f2003 nocbind noopt_ieee $(FTRACE) -Wf,-A idbl4 -C vopt -P stack -Wf"-P nh -O overlap" -Wf,-pvctl noassume loopcnt=10000 -L transform -Wf,-pvctl nomsg -Wf"-O nomsg" -I $(MODDIR) -I $(MODDIR)/ocetam -I $(NCDF_INC)'
292echo '#-Q- eshpux  F_F = $(F_O) -f3'
293echo '#-Q- eshpux  L_X = $(L_O)'
294echo '#-Q- linux  # Compiler options for NEMOTAM (pgf version)'
295echo '#-Q- linux  F_O = -Mlist -O3 -byteswapio -r8  -I $(MODDIR) -I$(MODDIR)/ocetam -I $(NCDF_INC)'
296echo '#-Q- linux  F_F = $(F_O)'-Mextend
297echo '#-Q- linux  L_X = -r8 -O3'
298echo '#-Q- lxiv7  # Compiler options for NEMOTAM (ifc version)'
299echo '#-Q- lxiv7  F_O = -O3 -r8  -I $(MODDIR) -I$(MODDIR)/ocetam -I $(NCDF_INC)'
300echo '#-Q- lxiv7  F_F = $(F_O) -extend_source '
301echo '#-Q- lxiv7  L_X = -r8 -O3'
302echo '#-Q- lxiv8  # Compiler options for NEMOTAM (ifort version)'
303echo '#-Q- lxiv8  F_O = -O3 -r8  -I $(MODDIR) -I$(MODDIR)/ocetam -I $(NCDF_INC)'
304echo '#-Q- lxiv8  F_F = $(F_O) -extend_source '
305echo '#-Q- lxiv8  L_X = -r8 -O3'
306echo '#-Q- g95  # Compiler options for NEMOTAM (g95 version)'
307echo '#-Q- g95  F_O = -O3 -fno-second-underscore -r8 -funroll-all-loops -I $(MODDIR) -I $(MODDIR)/ocetam -I $(NCDF_INC)'
308echo '#-Q- g95  F_F = $(F_O)'-ffixed-form -ffixed-line-length-132
309echo '#-Q- g95  L_X = -r8 -O3'
310echo '#-Q- gfortran  # Compiler options for NEMOTAM (gfortran version)'
311echo '#-Q- gfortran  F_O = -fno-second-underscore -fdefault-real-8 -funroll-all-loops -I $(MODDIR) -I $(MODDIR)/ocetam -I $(NCDF_INC)'
312echo '#-Q- gfortran  F_F = $(F_O)-ffixed-form -ffixed-line-length-132'
313echo '#-Q- gfortran  L_X = -fdefault-real-8'
314echo '#-Q- aix    # Compiler options for NEMOTAM (aix version)'
315echo '#-Q- aix    F_O = -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qextname -qsource -q64 -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/ocetam -I $(NCDF_INC)' 
316echo '#-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)/ocetam -I $(NCDF_INC)' 
317echo '#-Q- aix   L_O = $(F_P) -q64 -O3'
318echo '#-Q- aix   L_X = $(L_O)'
319echo '#-Q- babel  # Compiler options for NEMOTAM (blue gene version)'
320echo '#-Q- babel  F_O =  -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qsource -qextname=flush -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/ocetam -I $(NCDF_INC)'
321echo '#-Q- babel  F_F = -O3 -qsave -qrealsize=8 -qsuffix=f=f -qsuffix=cpp=F -qfixed=132 -qsource -qextname=flush -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/ocetam -I $(NCDF_INC)'
322echo '#-Q- babel  L_X = $(L_O)'
323echo '#-Q- osxxlf    # Compiler options for NEMOTAM (osxxlf version)'
324echo '#-Q- osxxlf    F_O = -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qsource -qextname -qstrict -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/ocetam -I $(NCDF_INC)' 
325echo '#-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)/ocetam -I $(NCDF_INC)' 
326echo '#-Q- osxxlf    L_X = -qrealsize=8 -O3'
327
328echo 'PREF='
329echo '#-Q- sx8mercure   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    echo "\\"
372    echo "     \$(MODEL_LIB)($bn.o)\c"
373done
374
375# find all .f90 in the current directory
376# build object files list  LIB_OBJ
377# one dependancy by line
378
379for i in `ls *.f90  `
380do
381  bn=`basename $i .f90`
382  if [ "${bn}" != "${MAIN}" ] 
383  then
384  if [ "${bn}" != "agrif2model" ] 
385  then
386    echo "\\"
387    echo "     \$(MODEL_LIB)($bn.o)\c"
388  fi
389  fi
390done
391
392# find all .F90 in the current directory
393# build object files list  LIB_OBJ
394# one dependancy by line
395
396for i in `ls *.F90  `
397do
398  bn=`basename $i .F90`
399  if [ "${bn}" != "${MAIN}" ] 
400  then
401  if [ "${bn}" != "agrif2model" ] 
402  then
403    echo "\\"
404    echo "     \$(MODEL_LIB)($bn.o)\c"
405  fi
406  fi
407done
408
409# find all .F in the current directory
410# build object files list  LIB_OBJ
411# one dependancy by line
412
413for i in `ls *.F 2> /dev/null `
414do
415  bn=`basename $i .F`
416    echo "\\"
417    echo "     \$(MODEL_LIB)($bn.o)\c"
418 done
419
420echo ""
421
422cat tampon
423rm tampon
424#-
425#- Write all dependancies ---
426
427for fic in `ls *.f90 *.F90  *.F 2> /dev/null `
428do
429    if [ "${fic}" != "agrif2model.F90" ]
430    then
431    if [ "${fic}" != "${MAIN}.[Ff]" ]
432    then
433   i=0
434   j=0
435   dep=""
436   inc=""
437   inc2=""
438   inc3=""
439   luse0=""
440   luse1=""
441   luse2=""
442   luse3=""
443        key=""
444#- search include files (old ice model form, should it be suppressed ?)
445   for inc in `sed -n 's/^[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
446   do
447       dep="$dep\n$inc"
448   done
449
450#- take into account CPP dependancies  keys only (par_trc_trp example)
451   for key in `sed -n 's/^#[  eElL]*[iF][fF][   ]*[dD][eE][fF][iI][nN][eE][dD][  ]*//p' $fic | sort -u`
452   do
453       j=1
454   done
455
456#- search include files on 3 levels
457   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
458   do
459       j=1
460       dep="$dep\n$inc"
461      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
462      do
463          dep="$dep\n$inc2"
464          #- search include  in include (third level !!!)
465          for inc3 in `sed -n 's/^#[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc2 | sort -u`
466          do
467         dep="$dep\n$inc3"
468          done
469      done
470   done
471
472#- search USE in include files
473   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
474   do
475      for fuse0 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc | sort -u`
476      do
477                    [ -f $fuse0.[hfF]90 ] || continue
478          lfuse0=$fuse0.f90
479          [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
480          luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
481      done
482
483#- search USE in  files included in included files and add to luse0
484
485      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
486      do
487          for fuse0 in `sed -n 's/^[   ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc2 | sort -u`
488          do
489                        [ -f $fuse0.[hfF]90 ] || continue
490              lfuse0=$fuse0.f90
491              [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
492              luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
493          done
494           done
495   done
496
497#- search USE (and USE of USE and so on three levels)
498   for fuse1 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $fic | sort -u`
499   do
500            [ -f $fuse1.[hfF]90 ] || continue
501       lfuse1=$fuse1.f90
502       [ -f $fuse1.F90 ] && lfuse1=$fuse1.F90
503       luse1="$luse1\n$lfuse1\n\$(MODEL_LIB)($fuse1.o)"
504      for fuse2 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse1 | sort -u`
505      do
506                    [ -f $fuse2.[hfF]90 ] || continue
507          lfuse2=$fuse2.f90
508          [ -f $fuse2.F90 ] && lfuse2=$fuse2.F90
509          luse2="$luse2\n$lfuse2\n\$(MODEL_LIB)($fuse2.o)"
510          # on cherche les USE  dans le fichier deja USE (3eme niveau! balaise!)
511          for fuse3 in `sed -n 's/^#[     ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse2 | sort -u`
512          do
513                        [ -f $fuse3.[hfF]90 ] || continue
514         luse3="$luse3\n$lfuse3\n\$(MODEL_LIB)($fuse3.o)"
515                    done
516      done
517   done
518#-
519#-  dep contains all dependancies
520   echo "\$(MODEL_LIB)(`echo $fic|awk -F. '{print $1}'`.o) :   \c"
521   for depele in `echo $luse3 | sort -u` `echo $luse2 | sort -u` `echo $luse1 | sort -u` `echo $luse0 | sort -u` `echo $dep | sort -u`
522   do
523       echo "\\"
524       echo "  $depele \c"
525       let i=i+1 # pour signaler le premier
526   done
527
528#-
529#- add dependancies with IOIPSL library (if source files contains IOIPSL)
530        grep -i 'use *ioipsl' ${fic} >/dev/null && ( echo "\\" ; echo " \$(IOIPSL_LIB) \c")
531
532#-
533#- add dependancies with IOIPSL library (if source files contains Agrif_*)
534        grep -i 'use Agrif_*' ${fic} >/dev/null && ( echo "\\" ; echo " \$(AGRIF_LIB) \c")
535
536#-
537#- add dependancies with KEY_CPP (if source file includes cpp  keys)
538   if [ ${j} != "0" ] 
539        then
540     echo "\\"
541     echo " KEY_CPP \c" 
542   fi
543#-
544#- end with the file itself
545        echo "\\"
546              echo " $fic"
547    fi
548    fi
549echo $fic done >/dev/tty
550done
551#-
552#- Write some special rules ---
553echo '# agrif previous use'
554echo "firstagrif:"
555echo "ifeq (\$(AGRIF),use)"
556echo '   @if [ -z "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) model_tam.o $(MODDIR)/ocetam/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
557echo "else"
558echo '   @if [ -n "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) -r OPAFILES model_tam.o $(MODDIR)/ocetam/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
559echo "endif"
560#-
561echo '#- RB : this rule is a pretty miserable trick to be able to re-compile NEMP-AGRIF-mono after NEMO-AGRIF-mpp'
562echo '#- I guess the good correction should be in AGRIF/LIB/toamr.c for the conv, to remove useless allocation declarations in AGRIF_INC'
563echo '# recompile all in this case' 
564echo "mpiagrif:"
565echo "ifeq (\$(AGRIF),use)"
566echo "ifeq (,\$(AGRIF_MPI))"
567echo '   @if [ -n "`cat KEY_CPP | grep key_mpp_mpi`" ]; then $(RM) -r OPAFILES model_tam.o $(MODDIR)/ocetam/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
568echo "endif"
569echo "endif"
570#-
571echo '# key changing control'
572echo "key: "
573echo "   @echo CHANGE of CPP KEYS yes/no ?"
574echo "   -@if [ \"\`cat KEY_CPP\`\" != \"\$(P_P:\$(prefix)%=%)\" ] ; then \\"
575echo "      echo CPP options changed ; echo \"\$(P_P:\$(prefix)%=%)\" > KEY_CPP ; fi "
576#-
577echo '# check key values'
578echo "keyverif:"
579echo '   @echo CHECKING KEY'
580echo '   @echo KEY USED : '
581echo '   @for v in ` echo $(P_P:$(prefix)%=%) ` ; \'
582echo '   do \'
583echo '   echo $$v ;\'
584echo '        w=`echo $$v | cut -c1-3` ; \'
585echo '        if [ $$w = `echo "key"` ] ; then \'
586echo '        r=n ; \'
587echo '        echo " $(KEY_LIST) " | (grep $$v >/dev/null 2>&1) || r=o ; \'
588echo '           if [ $$r != "n" ] ; then \'
589echo '              echo "UNKNOWN KEY" ;\'
590echo '              false ;  \'
591echo '              exit ;  \'
592echo '           fi \'
593echo '        fi \'
594echo '   done'
595echo '# Checking the number of routines'
596echo "src_file_list: "
597echo '   @echo CHECKING THE NUMBER AND NAMES OF SOURCE FILES '
598echo '   @$(RM) `ls | fgrep -v -f .patron` '
599echo '   @check=`grep OPA_SRC .config`              ; \'
600echo '   if [ -n "$$check" ] ; then                   \'
601echo '   echo "   use OPA_SRC files"                ; \'
602echo '       ln -sf ../../NEMO/OPA_SRC/*.[Ffh]90          . ; \'
603echo '       ln -sf ../../NEMO/OPA_SRC/*/*.[Ffh]90      . ; \'
604echo '   fi '
605echo '   @check=`grep OPATAM_SRC .config`              ; \'
606echo '   if [ -n "$$check" ] ; then                   \'
607echo '   echo "   use OPATAM_SRC files"                ; \'
608echo '       ln -sf ../OPATAM_SRC/*.[Ffh]90          . ; \'
609echo '       ln -sf ../OPATAM_SRC/*/*.[Ffh]90      . ; \'
610echo '   fi '
611echo '   @check=`grep LIM_SRC_2 .config`              ; \'
612echo '   if [ -n "$$check" ] ; then                   \'
613echo '   echo "   use LIM_SRC_2 files"                ; \'
614echo '       ln -sf ../../NEMO/LIM_SRC_2/*.[Ffh]90          . ; \'
615echo '   fi '
616echo '   @check=`grep C1D_SRC .config`              ; \'
617echo '   if [ -n "$$check" ] ; then                   \'
618echo '   echo "   use C1D_SRC files"                ; \'
619echo '       ln -sf ../../NEMO/C1D_SRC/*.[Ffh]90          . ; \'
620echo '   fi '
621echo '   @\$(RM) tmplist'
622echo '   @ls -1 | fgrep -v -f .patron  >tmplist'
623echo '   @cmp tmplist SRC_FILE_LIST.temp || { echo some routines have been added or suppressed ; \'
624echo '   sdiff -s tmplist SRC_FILE_LIST.temp ; cp tmplist SRC_FILE_LIST.temp ; \'
625echo '   \$(RM) model_tam.o \$(MODEL_LIB) \$(SXMODEL_LIB) \$(EXEC_BIN) ; \'
626echo '   echo "Rebuilding the AA_make files" ; \'
627echo '   cd ..  ; ../UTIL/fait_AA_make_tam ; echo " " ; \'
628echo '   echo "THE ins_make COMMAND in modipsl/util MUST BE RERUN PLEASE DO SO BEFORE gmake" ; \'
629echo '   echo "========================================== " ; \'
630echo '   ../../util/ins_make ; echo " " ;  false ; exit ; }'
631exec > /dev/null
632
Note: See TracBrowser for help on using the repository browser.