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

source: branches/TAM_V3_0/UTIL/fait_AA_make @ 1883

Last change on this file since 1883 was 1203, checked in by rblod, 16 years ago

Update BB_make and co

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 24.7 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- babel     -qsuffix=f=F90 \\
87#-Q- osxxlf    -qsuffix=f=F90 \\
88   \$(P_P) \$(F_O) \\
89#-Q- fjvpp     -Z \$*.L \\
90#-Q- sx8mercure      -R2 \\
91#-Q- sx8brodie    -R2 \\
92#-Q- sxdkrz    -R2 \\
93#-Q- eshpux    -R2 \\
94#-Q- aix    -qsource \\
95#-Q- babel     -qsource \\
96      OPAFILES/\$*.F90 || { mv \$(PREF).L \$(TMP) ; false ; exit ; }
97#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
98#-Q- eshpux       @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
99endif
100
101# IOIPSL library
102libioipsl :
103   (cd ../../IOIPSL/src ; \$(M_K) -f Makefile )
104
105# Main program
106model.o :   model.f90
107      @\$(F_C) \$(F_O) -c model.f90
108
109# if the make script is stopped, one doesn't destroy library
110.PRECIOUS : \$(MODEL_LIB)
111#-Q- sxdkrz .PRECIOUS : \$(SXMODEL_LIB)
112#-Q- eshpux .PRECIOUS : \$(SXMODEL_LIB)
113
114# library dependancies
115\$(MODEL_LIB): \$(LIB_OBJ)
116      @echo
117      @echo The library is up-to-date
118      @echo
119
120# Default rules
121.DEFAULTS:
122
123# rules for the .f90 files
124.f90.a :           
125      @\$(F_C) \$(P_P) \$(F_O) \\
126#-Q- fjvpp     -Z \$*.L \\
127#-Q- sx8mercure      -R2 \\
128#-Q- sx8brodie    -R2 \\
129#-Q- sxdkrz    -R2 \\
130#-Q- eshpux    -R2 \\
131#-Q- aix    -qsource \\
132#-Q- babel     -qsource \\
133      \$*.f90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
134#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
135#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
136      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
137      @\$(RM) \$*.[of]
138      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
139#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
140#-Q- babel     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
141#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
142#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
143      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
144
145# rules for the .F90 files
146.F90.a : 
147ifeq (\$(AGRIF),use) 
148      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F90 > OPAFILES/\$*.F90
149      @(cd OPAFILES ; ./conv agrif_opa.in -rm \\
150#-Q- linux     -SubloopScalar \\
151#-Q- g95       -SubloopScalar \\
152#-Q- f95       -SubloopScalar \\
153#-Q- osf1         -SubloopScalar \\
154      -comdirin ./ -comdirout AGRIF_MODELFILES/. -convfile \$*.F90)
155      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
156      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC OPAFILES/\$*.F90 > OPAFILES/AGRIF_MODELFILES/\$*.F90
157      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
158      @\$(F_C) \$(P_P) \$(F_O) \\
159#-Q- fjvpp     -Z \$*.L \\
160#-Q- sx8mercure      -R2 \\
161#-Q- sx8brodie    -R2 \\
162#-Q- sxdkrz    -R2 \\
163#-Q- eshpux    -R2 \\
164#-Q- aix    -qsource \\
165#-Q- babel     -qsource \\
166      OPAFILES/\$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; } 
167else
168      @\$(F_C) \$(P_P) \$(F_O) \\
169#-Q- fjvpp     -Z \$*.L \\
170#-Q- sx8mercure      -R2 \\
171#-Q- sx8brodie    -R2 \\
172#-Q- sxdkrz    -R2 \\
173#-Q- eshpux    -R2 \\
174#-Q- aix    -qsource \\
175#-Q- babel     -qsource \\
176      \$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
177endif
178#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
179#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
180      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
181      @\$(RM) \$*.[of]
182      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
183#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
184#-Q- babel     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
185#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
186#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
187      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
188
189# rules for the .F files
190.F.a :           
191ifeq (\$(AGRIF),use) 
192      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F > OPAFILES/\$*.F
193      @(cd OPAFILES ; ./conv agrif_opa.in -rm \\
194#-Q- linux     -SubloopScalar \\
195#-Q- g95       -SubloopScalar \\
196#-Q- f95       -SubloopScalar \\
197#-Q- osf1         -SubloopScalar \\
198      -comdirin ./ -comdirout AGRIF_MODELFILES/. -convfile \$*.F)
199      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F OPAFILES/\$*.F
200      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC OPAFILES/\$*.F > OPAFILES/AGRIF_MODELFILES/\$*.F
201      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F OPAFILES/\$*.F
202      @\$(F_C) \$(P_P) \$(F_F) \\
203#-Q- fjvpp     -Z \$*.L \\
204#-Q- sx8mercure      -R2 \\
205#-Q- sx8brodie    -R2 \\
206#-Q- sxdkrz    -R2 \\
207#-Q- eshpux    -R2 \\
208#-Q- aix    -qsource \\
209#-Q- babel     -qsource \\
210      OPAFILES/\$*.F || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; } 
211else
212      @\$(F_C) \$(P_P) \$(F_O) \\
213#-Q- fjvpp     -Z \$*.L \\
214#-Q- sx8mercure      -R2 \\
215#-Q- sx8brodie    -R2 \\
216#-Q- sxdkrz    -R2 \\
217#-Q- eshpux    -R2 \\
218#-Q- aix    -qsource \\
219#-Q- babel     -qsource \\
220      \$*.F || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
221endif
222#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
223#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
224      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
225      @\$(RM) \$*.[of]
226      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
227#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
228#-Q- babel     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
229#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
230#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
231      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
232
233# rules for the library from the .f files
234.f.a :     
235      @\$(F_C) \$(F_O) \\
236#-Q- fjvpp     -Z \$*.L \\
237#-Q- sx8mercure      -R2 \\
238#-Q- sx8brodie    -R2 \\
239#-Q- sxdkrz    -R2 \\
240#-Q- eshpux    -R2 \\
241#-Q- aix    -qsource \\
242#-Q- babel     -qsource \\
243      \$*.f|| { if [ -f \$(PREF)\$*.L ] ; then mv \$*.L \$(TMP) ; fi ; false ; exit ; }
244#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
245#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
246      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
247      @\$(RM) -f \$*.o
248#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
249#-Q- babel     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
250#-Q- linux  @mv \$(PREF)\$*.lst \$(PREF)\$*.L
251#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
252      @if [ -f \$(PREF)\$*.L ] ; then mv \$*.L \$(TMP) ; fi
253
254end
255#-
256#- Compilation options ---
257exec 1> AA_make
258MAIN="model"
259echo '# $Header$'
260echo '# some variables'
261echo 'TMP = ../../../tmp'
262echo ''
263echo '#WARNING : NEMO does NOT support fortran 95 signed zero behaviour when using intrinsec SIGN function'
264echo '#          This doesnt happen whith Fortran 90 compilers but'
265echo '#          Check your compilers option in consequence when using real F95 compilers'
266echo ''
267echo '#-Q- sx8mercure  # Compiler options NEMO (CEA SX6-NEC) '
268echo '#-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)/oce -I $(NCDF_INC)'
269echo '#-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)/oce -I $(NCDF_INC)'
270echo '#-Q- sx8mercure  F_F = $(F_O) -f3'
271echo '#-Q- sx8mercure  L_X = $(L_O) -ftrace'
272echo '#-Q- sx8brodie  # Compiler options NEMO (CEA SX6-NEC) '
273echo '#-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)/oce -I $(NCDF_INC)'
274echo '#-Q- sx8brodie  F_F = $(F_O) -f3'
275echo '#-Q- sx8brodie  L_X = $(L_O)'
276echo '#-Q- sxdkrz  # Compiler options for NEMO (DKRZ SX6-NEC) '
277echo '#-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)/oce -I $(NCDF_INC)'
278echo '#-Q- sxdkrz  F_F = $(F_O) -f3'
279echo '#-Q- sxdkrz  L_X = $(L_O) -ftrace'
280echo '#-Q- eshpux  # Compiler options for NEMO (Earth Simulator)'
281echo '#-Q- eshpux  # for super perfs!'
282echo '#-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)/oce -I $(NCDF_INC)'
283echo '#-Q- eshpux  # regular options!'
284echo '#-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)/oce -I $(NCDF_INC)'
285echo '#-Q- eshpux  F_F = $(F_O) -f3'
286echo '#-Q- eshpux  L_X = $(L_O)'
287echo '#-Q- linux  # Compiler options for NEMO (pgf version)'
288echo '#-Q- linux  F_O = -Mlist -O3 -byteswapio -r8  -I $(MODDIR) -I$(MODDIR)/oce -I $(NCDF_INC)'
289echo '#-Q- linux  F_F = $(F_O)'-Mextend
290echo '#-Q- linux  L_X = -r8 -O3'
291echo '#-Q- lxiv7  # Compiler options for NEMO (ifc version)'
292echo '#-Q- lxiv7  F_O = -O3 -r8  -I $(MODDIR) -I$(MODDIR)/oce -I $(NCDF_INC)'
293echo '#-Q- lxiv7  F_F = $(F_O) -extend_source '
294echo '#-Q- lxiv7  L_X = -r8 -O3'
295echo '#-Q- lxiv8  # Compiler options for NEMO (ifort version)'
296echo '#-Q- lxiv8  F_O = -O3 -r8  -I $(MODDIR) -I$(MODDIR)/oce -I $(NCDF_INC)'
297echo '#-Q- lxiv8  F_F = $(F_O) -extend_source '
298echo '#-Q- lxiv8  L_X = -r8 -O3'
299echo '#-Q- g95  # Compiler options for NEMO (g95 version)'
300echo '#-Q- g95  F_O = -O3 -fno-second-underscore -r8 -funroll-all-loops -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)'
301echo '#-Q- g95  F_F = $(F_O)'-ffixed-form -ffixed-line-length-132
302echo '#-Q- g95  L_X = -r8 -O3'
303echo '#-Q- gfortran  # Compiler options for NEMO (gfortran version)'
304echo '#-Q- gfortran  F_O = -fno-second-underscore -fdefault-real-8 -funroll-all-loops -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)'
305echo '#-Q- gfortran  F_F = $(F_O)-ffixed-form -ffixed-line-length-132'
306echo '#-Q- gfortran  L_X = -fdefault-real-8'
307echo '#-Q- aix    # Compiler options for NEMO (aix version)'
308echo '#-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)' 
309echo '#-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)' 
310echo '#-Q- aix   L_O = $(F_P) -q64 -O3'
311echo '#-Q- aix   L_X = $(L_O)'
312echo '#-Q- babel  # Compiler options for NEMO (blue gene version)'
313echo '#-Q- babel  F_O =  -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qsource -qextname=flush -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)'
314echo '#-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)/oce -I $(NCDF_INC)'
315echo '#-Q- babel  L_X = $(L_O)'
316echo '#-Q- osxxlf    # Compiler options for NEMO (osxxlf version)'
317echo '#-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)' 
318echo '#-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)' 
319echo '#-Q- osxxlf    L_X = -qrealsize=8 -O3'
320
321echo 'PREF='
322echo '#-Q- sx8mercure   PREF=i.'
323echo '#-Q- sx8brodie PREF=i.'
324echo '#-Q- sxdkrz PREF=i.'
325echo '#-Q- eshpux PREF=i.'
326echo ''
327echo '# add suffix to P_P'
328echo 'P_P := $(P_P:%=$(prefix)%)'
329echo ''
330echo '# Some tests to define variables related to Agrif compilation'
331echo '# Please do not change '
332echo 'ifneq (,$(findstring key_agrif,$(P_P)))'
333echo 'AGRIF=use'
334echo 'else'
335echo 'AGRIF=notuse'
336echo 'AGRIF_LIB='
337echo 'endif'
338echo 'ifneq (,$(findstring key_mpp_mpi,$(P_P)))'
339echo 'AGRIF_MPI=-DAGRIF_MPI'
340echo 'else'
341echo 'AGRIF_MPI='
342echo 'endif'
343
344echo ''
345# Write the cpp key list with one key by line
346echo 'KEY_LIST = \c'
347for i in ${liste_cle}
348do
349 echo "\\"
350 echo "     $i \c"
351done
352
353echo ''
354echo '# .o file list in the library'
355echo 'LIB_OBJ = \c'
356#
357# find all .f in the current directory
358# build object files list  LIB_OBJ
359# one dependancy by line
360
361for i in `ls *.f 2> /dev/null`
362do
363  bn=`basename $i .f`
364    echo "\\"
365    echo "     \$(MODEL_LIB)($bn.o)\c"
366done
367
368# find all .f90 in the current directory
369# build object files list  LIB_OBJ
370# one dependancy by line
371
372for i in `ls *.f90  `
373do
374  bn=`basename $i .f90`
375  if [ "${bn}" != "${MAIN}" ] 
376  then
377  if [ "${bn}" != "agrif2model" ] 
378  then
379    echo "\\"
380    echo "     \$(MODEL_LIB)($bn.o)\c"
381  fi
382  fi
383done
384
385# find all .F90 in the current directory
386# build object files list  LIB_OBJ
387# one dependancy by line
388
389for i in `ls *.F90  `
390do
391  bn=`basename $i .F90`
392  if [ "${bn}" != "${MAIN}" ] 
393  then
394  if [ "${bn}" != "agrif2model" ] 
395  then
396    echo "\\"
397    echo "     \$(MODEL_LIB)($bn.o)\c"
398  fi
399  fi
400done
401
402# find all .F in the current directory
403# build object files list  LIB_OBJ
404# one dependancy by line
405
406for i in `ls *.F 2> /dev/null `
407do
408  bn=`basename $i .F`
409    echo "\\"
410    echo "     \$(MODEL_LIB)($bn.o)\c"
411 done
412
413echo ""
414
415cat tampon
416rm tampon
417#-
418#- Write all dependancies ---
419
420for fic in `ls *.f90 *.F90  *.F 2> /dev/null `
421do
422    if [ "${fic}" != "agrif2model.F90" ]
423    then
424    if [ "${fic}" != "${MAIN}.[Ff]" ]
425    then
426   i=0
427   j=0
428   dep=""
429   inc=""
430   inc2=""
431   inc3=""
432   luse0=""
433   luse1=""
434   luse2=""
435   luse3=""
436        key=""
437#- search include files (old ice model form, should it be suppressed ?)
438   for inc in `sed -n 's/^[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
439   do
440       dep="$dep\n$inc"
441   done
442
443#- take into account CPP dependancies  keys only (par_trc_trp example)
444   for key in `sed -n 's/^#[  eElL]*[iF][fF][   ]*[dD][eE][fF][iI][nN][eE][dD][  ]*//p' $fic | sort -u`
445   do
446       j=1
447   done
448
449#- search include files on 3 levels
450   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
451   do
452       j=1
453       dep="$dep\n$inc"
454      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
455      do
456          dep="$dep\n$inc2"
457          #- search include  in include (third level !!!)
458          for inc3 in `sed -n 's/^#[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc2 | sort -u`
459          do
460         dep="$dep\n$inc3"
461          done
462      done
463   done
464
465#- search USE in include files
466   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
467   do
468      for fuse0 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc | sort -u`
469      do
470                    [ -f $fuse0.[hfF]90 ] || continue
471          lfuse0=$fuse0.f90
472          [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
473          luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
474      done
475
476#- search USE in  files included in included files and add to luse0
477
478      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
479      do
480          for fuse0 in `sed -n 's/^[   ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc2 | sort -u`
481          do
482                        [ -f $fuse0.[hfF]90 ] || continue
483              lfuse0=$fuse0.f90
484              [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
485              luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
486          done
487           done
488   done
489
490#- search USE (and USE of USE and so on three levels)
491   for fuse1 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $fic | sort -u`
492   do
493            [ -f $fuse1.[hfF]90 ] || continue
494       lfuse1=$fuse1.f90
495       [ -f $fuse1.F90 ] && lfuse1=$fuse1.F90
496       luse1="$luse1\n$lfuse1\n\$(MODEL_LIB)($fuse1.o)"
497      for fuse2 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse1 | sort -u`
498      do
499                    [ -f $fuse2.[hfF]90 ] || continue
500          lfuse2=$fuse2.f90
501          [ -f $fuse2.F90 ] && lfuse2=$fuse2.F90
502          luse2="$luse2\n$lfuse2\n\$(MODEL_LIB)($fuse2.o)"
503          # on cherche les USE  dans le fichier deja USE (3eme niveau! balaise!)
504          for fuse3 in `sed -n 's/^#[     ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse2 | sort -u`
505          do
506                        [ -f $fuse3.[hfF]90 ] || continue
507         luse3="$luse3\n$lfuse3\n\$(MODEL_LIB)($fuse3.o)"
508                    done
509      done
510   done
511#-
512#-  dep contains all dependancies
513   echo "\$(MODEL_LIB)(`echo $fic|awk -F. '{print $1}'`.o) :   \c"
514   for depele in `echo $luse3 | sort -u` `echo $luse2 | sort -u` `echo $luse1 | sort -u` `echo $luse0 | sort -u` `echo $dep | sort -u`
515   do
516       echo "\\"
517       echo "  $depele \c"
518       let i=i+1 # pour signaler le premier
519   done
520
521#-
522#- add dependancies with IOIPSL library (if source files contains IOIPSL)
523        grep -i 'use *ioipsl' ${fic} >/dev/null && ( echo "\\" ; echo " \$(IOIPSL_LIB) \c")
524
525#-
526#- add dependancies with IOIPSL library (if source files contains Agrif_*)
527        grep -i 'use Agrif_*' ${fic} >/dev/null && ( echo "\\" ; echo " \$(AGRIF_LIB) \c")
528
529#-
530#- add dependancies with KEY_CPP (if source file includes cpp  keys)
531   if [ ${j} != "0" ] 
532        then
533     echo "\\"
534     echo " KEY_CPP \c" 
535   fi
536#-
537#- end with the file itself
538        echo "\\"
539              echo " $fic"
540    fi
541    fi
542echo $fic done >/dev/tty
543done
544#-
545#- Write some special rules ---
546echo '# agrif previous use'
547echo "firstagrif:"
548echo "ifeq (\$(AGRIF),use)"
549echo '   @if [ -z "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) model.o $(MODDIR)/oce/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
550echo "else"
551echo '   @if [ -n "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) -r OPAFILES model.o $(MODDIR)/oce/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
552echo "endif"
553#-
554echo '#- RB : this rule is a pretty miserable trick to be able to re-compile NEMP-AGRIF-mono after NEMO-AGRIF-mpp'
555echo '#- I guess the good correction should be in AGRIF/LIB/toamr.c for the conv, to remove useless allocation declarations in AGRIF_INC'
556echo '# recompile all in this case' 
557echo "mpiagrif:"
558echo "ifeq (\$(AGRIF),use)"
559echo "ifeq (,\$(AGRIF_MPI))"
560echo '   @if [ -n "`cat KEY_CPP | grep key_mpp_mpi`" ]; then $(RM) -r OPAFILES model.o $(MODDIR)/oce/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
561echo "endif"
562echo "endif"
563#-
564echo '# key changing control'
565echo "key: "
566echo "   @echo CHANGE of CPP KEYS yes/no ?"
567echo "   -@if [ \"\`cat KEY_CPP\`\" != \"\$(P_P:\$(prefix)%=%)\" ] ; then \\"
568echo "      echo CPP options changed ; echo \"\$(P_P:\$(prefix)%=%)\" > KEY_CPP ; fi "
569#-
570echo '# check key values'
571echo "keyverif:"
572echo '   @echo CHECKING KEY'
573echo '   @echo KEY USED : '
574echo '   @for v in ` echo $(P_P:$(prefix)%=%) ` ; \'
575echo '   do \'
576echo '   echo $$v ;\'
577echo '        w=`echo $$v | cut -c1-3` ; \'
578echo '        if [ $$w = `echo "key"` ] ; then \'
579echo '        r=n ; \'
580echo '        echo " $(KEY_LIST) " | (grep $$v >/dev/null 2>&1) || r=o ; \'
581echo '           if [ $$r != "n" ] ; then \'
582echo '              echo "UNKNOWN KEY" ;\'
583echo '              false ;  \'
584echo '              exit ;  \'
585echo '           fi \'
586echo '        fi \'
587echo '   done'
588echo '# Checking the number of routines'
589echo "src_file_list: "
590echo '   @echo CHECKING THE NUMBER AND NAMES OF SOURCE FILES '
591echo '   @$(RM) `ls | fgrep -v -f .patron` '
592echo '   @check=`grep OPA_SRC .config`              ; \'
593echo '   if [ -n "$$check" ] ; then                   \'
594echo '   echo "   use OPA_SRC files"                ; \'
595echo '       ln -sf ../OPA_SRC/*.[Ffh]90          . ; \'
596echo '       ln -sf ../OPA_SRC/DYN/*.[Ffh]90      . ; \'
597echo '       ln -sf ../OPA_SRC/TRA/*.[Ffh]90      . ; \'
598echo '       ln -sf ../OPA_SRC/TRD/*.[Ffh]90      . ; \'
599echo '       ln -sf ../OPA_SRC/DIA/*.[Ffh]90      . ; \'
600echo '       ln -sf ../OPA_SRC/DOM/*.[Ffh]90      . ; \'
601echo '       ln -sf ../OPA_SRC/OBC/*.[Ffh]90      . ; \'
602echo '       ln -sf ../OPA_SRC/FLO/*.[Ffh]90      . ; \'
603echo '       ln -sf ../OPA_SRC/LDF/*.[Ffh]90      . ; \'
604echo '       ln -sf ../OPA_SRC/ZDF/*.[Ffh]90      . ; \'
605echo '       ln -sf ../OPA_SRC/SOL/*.[Ffh]90      . ; \'
606echo '       ln -sf ../OPA_SRC/DTA/*.[Ffh]90      . ; \'
607echo '       ln -sf ../OPA_SRC/SBC/*.[Ffh]90      . ; \'
608echo '       ln -sf ../OPA_SRC/IOM/*.[Ffh]90      . ; \'
609echo '      ln -sf ../OPA_SRC/BDY/*.[Ffh]90      . ; \'
610echo '  fi '
611echo '   @check=`grep LIM_SRC_3 .config`              ; \'
612echo '   if [ -n "$$check" ] ; then                   \'
613echo '   echo "   use LIM_SRC_3 files"                ; \'
614echo '      ln -sf ../LIM_SRC_3/*.[Ffh]90          . ; \'
615echo '  fi '
616echo '   @check=`grep LIM_SRC_2 .config`              ; \'
617echo '   if [ -n "$$check" ] ; then                   \'
618echo '   echo "   use LIM_SRC_2 files"                ; \'
619echo '      ln -sf ../LIM_SRC_2/*.[Ffh]90          . ; \'
620echo '  fi '
621echo '   @check=`grep C1D_SRC .config`              ; \'
622echo '   if [ -n "$$check" ] ; then                   \'
623echo '   echo "   use C1D_SRC files"                ; \'
624echo '      ln -sf ../C1D_SRC/*.[Ffh]90          . ; \'
625echo '  fi '
626echo '   @check=`grep TOP_SRC .config`              ; \'
627echo '   if [ -n "$$check" ] ; then  \'
628echo '   echo "   use TOP_SRC files"                ; \'
629echo '      \$(RM) trcstp.F90                      ; \'
630echo '      \$(RM) sms.F90                         ; \'
631echo '      \$(RM) trcini.F90                      ; \'
632echo '      ln -sf ../TOP_SRC/*.[Ffh]90          . ; \'
633echo '      ln -sf ../TOP_SRC/TRP/*.[Ffh]90      . ; \'
634echo '      ln -sf ../TOP_SRC/PISCES/*.[Ffh]90   . ; \'
635echo '      ln -sf ../TOP_SRC/LOBSTER/*.[Ffh]90  . ; \'
636echo '      ln -sf ../TOP_SRC/CFC/*.[Ffh]90      . ; \'
637echo '      ln -sf ../TOP_SRC/MY_TRC/*.[Ffh]90   . ; \'
638echo '      ln -sf ../TOP_SRC/SED/*.[Ffh]90      . ; \'
639echo '      ln -sf ../TOP_SRC/DUMMY/*.[Ffh]90    . ; \'
640echo '  fi '
641echo '   @check=`grep OFF_SRC .config`              ; \'
642echo '   if [ -n "$$check" ] ; then                   \'
643echo '   echo "   use OFF_SRC files"                ; \'
644echo '      ln -sf ../OFF_SRC/*.[Ffh]90          . ; \'
645echo '      ln -sf ../OFF_SRC/*/*.[Ffh]90        . ; \'
646echo '  fi '
647echo '   @check=`grep NST_SRC .config`              ; \'
648echo '   if [ -n "$$check" ] ; then                   \'
649echo '   echo "   use NST_SRC files"                ; \'
650echo '      \$(RM) agrif_opa_interp.F90           ; \'
651echo '      \$(RM) agrif_opa_sponge.F90           ; \'
652echo '      \$(RM) agrif_opa_update.F90           ; \'
653echo '      ln -sf ../NST_SRC/*.[Ffh]90      .     ; \'
654echo '  fi '
655echo '   @\$(RM) tmplist'
656echo '   @ls -1 | fgrep -v -f .patron  >tmplist'
657echo '   @cmp tmplist SRC_FILE_LIST.temp || { echo some routines have been added or suppressed ; \'
658echo '   sdiff -s tmplist SRC_FILE_LIST.temp ; cp tmplist SRC_FILE_LIST.temp ; \'
659echo '   \$(RM) model.o \$(MODEL_LIB) \$(SXMODEL_LIB) \$(EXEC_BIN) ; \'
660echo '   echo "Rebuilding the AA_make files" ; \'
661echo '   cd ..  ; ../UTIL/fait_AA_make ; echo " " ; \'
662echo '   echo "THE ins_make COMMAND in modipsl/util MUST BE RERUN PLEASE DO SO BEFORE gmake" ; \'
663echo '   echo "========================================== " ; \'
664echo '   ../../util/ins_make ; echo " " ;  false ; exit ; }'
665exec > /dev/null
666
Note: See TracBrowser for help on using the repository browser.