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

source: trunk/UTIL/fait_AA_make @ 590

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

nemo_v2_compil_001: CT : - correct the key word cpunum_prc to cpunum_job in headers of batch jobs (AA_job) for SX8-NEC Brodie (IDRIS)

  • add -I $(NETCDF_INC) in the compilation line for lxiv8 targets (fait_AA_make)
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 24.6 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 :           
201      @\$(F_C) \$(P_P) \$(F_F) \\
202#-Q- fjvpp     -Z \$*.L \\
203#-Q- sxnec     -R2 \\
204#-Q- sx6nec    -R2 \\
205#-Q- sx8brodie    -R2 \\
206#-Q- sxdkrz    -R2 \\
207#-Q- eshpux    -R2 \\
208#-Q- aix    -qsource \\
209      \$*.F || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
210#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
211#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
212#-Q- sx8brodie    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
213#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
214#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
215      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
216      @\$(RM) \$*.[of]
217      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
218#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
219#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
220#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
221      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
222
223# rules for the library from the .f files
224.f.a :     
225      @\$(F_C) \$(F_O) \\
226#-Q- fjvpp     -Z \$*.L \\
227#-Q- sxnec     -R2 \\
228#-Q- sx6nec    -R2 \\
229#-Q- sx8brodie    -R2 \\
230#-Q- sxdkrz    -R2 \\
231#-Q- eshpux    -R2 \\
232#-Q- aix    -qsource \\
233      \$*.f|| { if [ -f \$(PREF)\$*.L ] ; then mv \$*.L \$(TMP) ; fi ; false ; exit ; }
234#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
235#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
236#-Q- sx8brodie    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
237#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
238#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
239      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
240      @\$(RM) -f \$*.o
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 \$*.L \$(TMP) ; fi
245
246end
247#-
248#- Compilation options ---
249exec 1> AA_make
250MAIN="model"
251echo '# $Header$'
252echo '# some variables'
253echo 'TMP = ../../../tmp'
254echo '#-Q- sxnec  # Compiler options for NEMO (IDRIS SX5-NEC) '
255echo '#-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)'
256echo '#-Q- sxnec  F_F = $(F_O)'
257echo '#-Q- sxnec  L_X = $(L_O)'
258echo '#-Q- sx6nec  # Compiler options NEMO (CEA SX6-NEC) '
259echo '#-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)'
260echo '#-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)'
261echo '#-Q- sx6nec  F_F = $(F_O)'
262echo '#-Q- sx6nec  L_X = $(L_O) -ftrace'
263echo '#-Q- sx8brodie  # Compiler options NEMO (CEA SX6-NEC) '
264echo '#-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)'
265echo '#-Q- sx8brodie  F_F = $(F_O)'
266echo '#-Q- sx8brodie  L_X = $(L_O)'
267echo '#-Q- sxdkrz  # Compiler options for NEMO (DKRZ SX6-NEC) '
268echo '#-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)'
269echo '#-Q- sxdkrz  F_F = $(F_O)'
270echo '#-Q- sxdkrz  L_X = $(L_O) -ftrace'
271echo '#-Q- eshpux  # Compiler options for NEMO (Earth Simulator)'
272echo '#-Q- eshpux  # for super perfs!'
273echo '#-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)'
274echo '#-Q- eshpux  # regular options!'
275echo '#-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)'
276echo '#-Q- eshpux  F_F = $(F_O)'
277echo '#-Q- eshpux  L_X = $(L_O)'
278echo '#-Q- linux  # Compiler options for NEMO (pgf version)'
279echo '#-Q- linux  F_O = -Mlist -O3 -byteswapio -r8  -I $(MODDIR) -I$(MODDIR)/oce -I $(NCDF_INC)'
280echo '#-Q- linux  F_F = $(F_O)'
281echo '#-Q- linux  L_X = -r8 -O3'
282echo '#-Q- lxiv7  # Compiler options for NEMO (ifc version)'
283echo '#-Q- lxiv7  F_O = -O3 -r8  -I $(MODDIR) -I$(MODDIR)/oce -I $(NCDF_INC)'
284echo '#-Q- lxiv7  L_X = -r8 -O3'
285echo '#-Q- lxiv8  # Compiler options for NEMO (ifort version)'
286echo '#-Q- lxiv8  F_O = -O3 -r8  -I $(MODDIR) -I$(MODDIR)/oce -I $(NETCDF_INC)'
287echo '#-Q- lxiv8  F_F = $(F_O) '
288echo '#-Q- lxiv8  L_X = -r8 -O3'
289echo '#-Q- g95  # Compiler options for NEMO (g95 version)'
290echo '#-Q- g95  F_O = -O3 -fno-second-underscore -r8 -funroll-all-loops -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)'
291echo '#-Q- g95  F_F = $(F_O)'
292echo '#-Q- g95  L_X = -r8 -O3'
293echo '#-Q- aix    # Compiler options for NEMO (aix version)'
294echo '#-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)' 
295echo '#-Q- aix    F_F = -O3 -qsave -qrealsize=8 -qsuffix=f=f -qsuffix=cpp=F -qfixed -qextname -qsource -q64 -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)' 
296echo '#-Q- aix   L_O = $(F_P) -q64 -O3'
297echo '#-Q- aix   L_X = $(L_O)'
298echo '#-Q- osxxlf    # Compiler options for NEMO (osxxlf version)'
299echo '#-Q- osxxlf    F_O = -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qsource -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)' 
300echo '#-Q- osxxlf    F_F = -O3 -qsave -qrealsize=8 -qsuffix=f=f -qsuffix=cpp=F -qfixed -qsource -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC)' 
301echo '#-Q- osxxlf    L_X = -qrealsize=8 -O3'
302
303echo 'PREF='
304echo '#-Q- sxnec  PREF=i.'
305echo '#-Q- sx6nec PREF=i.'
306echo '#-Q- sx8brodie PREF=i.'
307echo '#-Q- sxdkrz PREF=i.'
308echo '#-Q- eshpux PREF=i.'
309echo ''
310echo '# add suffix to P_P'
311echo 'P_P := $(P_P:%=$(prefix)%)'
312echo ''
313echo '# Some tests to define variables related to Agrif compilation'
314echo '# Please do not change '
315echo 'ifneq (,$(findstring key_agrif,$(P_P)))'
316echo 'AGRIF=use'
317echo 'else'
318echo 'AGRIF=notuse'
319echo 'AGRIF_LIB='
320echo 'endif'
321echo 'ifneq (,$(findstring key_mpp_mpi,$(P_P)))'
322echo 'AGRIF_MPI=-DAGRIF_MPI'
323echo 'else'
324echo 'AGRIF_MPI='
325echo 'endif'
326
327echo ''
328# Write the cpp key list with one key by line
329echo 'KEY_LIST = \c'
330for i in ${liste_cle}
331do
332 echo "\\"
333 echo "     $i \c"
334done
335
336echo ''
337echo '# .o file list in the library'
338echo 'LIB_OBJ = \c'
339#
340# find all .f in the current directory
341# build object files list  LIB_OBJ
342# one dependancy by line
343
344for i in `ls *.f 2> /dev/null`
345do
346  bn=`basename $i .f`
347  if [ "${bn}" != "${MAIN}" ] 
348  then
349  if [ "${bn}" != "agrif2model" ] 
350  then
351    echo "\\"
352    echo "     \$(MODEL_LIB)($bn.o)\c"
353  fi
354  fi
355done
356
357# find all .f90 in the current directory
358# build object files list  LIB_OBJ
359# one dependancy by line
360
361for i in `ls *.f90  `
362do
363  bn=`basename $i .f90`
364  if [ "${bn}" != "${MAIN}" ] 
365  then
366  if [ "${bn}" != "agrif2model" ] 
367  then
368    echo "\\"
369    echo "     \$(MODEL_LIB)($bn.o)\c"
370  fi
371  fi
372done
373
374# find all .F90 in the current directory
375# build object files list  LIB_OBJ
376# one dependancy by line
377
378for i in `ls *.F90  `
379do
380  bn=`basename $i .F90`
381  if [ "${bn}" != "${MAIN}" ] 
382  then
383  if [ "${bn}" != "agrif2model" ] 
384  then
385    echo "\\"
386    echo "     \$(MODEL_LIB)($bn.o)\c"
387  fi
388  fi
389done
390
391# find all .F in the current directory
392# build object files list  LIB_OBJ
393# one dependancy by line
394
395for i in `ls *.F 2> /dev/null `
396do
397  bn=`basename $i .F`
398  if [ "${bn}" != "${MAIN}" ] 
399  then
400  if [ "${bn}" != "agrif2model" ] 
401  then
402    echo "\\"
403    echo "     \$(MODEL_LIB)($bn.o)\c"
404  fi
405  fi
406 done
407
408echo ""
409
410cat tampon
411rm tampon
412#-
413#- Write all dependancies ---
414
415for fic in `ls *.f90 *.F90  *.F 2> /dev/null `
416do
417    if [ "${fic}" != "agrif2model.F90" ]
418    then
419    if [ "${fic}" != "${MAIN}.[Ff]" ]
420    then
421   i=0
422   j=0
423   dep=""
424   inc=""
425   inc2=""
426   inc3=""
427   luse0=""
428   luse1=""
429   luse2=""
430   luse3=""
431        key=""
432#- search include files (old ice model form, should it be suppressed ?)
433   for inc in `sed -n 's/^[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
434   do
435       dep="$dep\n$inc"
436   done
437
438#- take into account CPP dependancies  keys only (par_trc_trp example)
439   for key in `sed -n 's/^#[  eElL]*[iF][fF][   ]*[dD][eE][fF][iI][nN][eE][dD][  ]*//p' $fic | sort -u`
440   do
441       j=1
442   done
443
444#- search include files on 3 levels
445   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
446   do
447       j=1
448       dep="$dep\n$inc"
449      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
450      do
451          dep="$dep\n$inc2"
452          #- search include  in include (third level !!!)
453          for inc3 in `sed -n 's/^#[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc2 | sort -u`
454          do
455         dep="$dep\n$inc3"
456          done
457      done
458   done
459
460#- search USE in include files
461   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
462   do
463      for fuse0 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc | sort -u`
464      do
465           if [ $fuse0 != "ioipsl" ] 
466                then
467                if [ $fuse0 != "Agrif_Util" ] 
468                then
469                if [ $fuse0 != "Agrif_Types" ] 
470                then
471                if [ $fuse0 != "netcdf" ] 
472                then
473          lfuse0=$fuse0.f90
474          [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
475          luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
476                fi
477                fi
478                fi
479                fi
480      done
481
482#- search USE in  files included in included files and add to luse0
483
484      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
485      do
486          for fuse0 in `sed -n 's/^[   ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc2 | sort -u`
487          do
488               if [ $fuse0 != "ioipsl" ] 
489                    then
490                    if [ $fuse0 != "Agrif_Util" ] 
491                    then
492                    if [ $fuse0 != "Agrif_Types" ] 
493                    then
494                    if [ $fuse0 != "netcdf" ] 
495                    then
496              lfuse0=$fuse0.f90
497              [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
498              luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
499                    fi
500                    fi
501                    fi
502                    fi
503          done
504           done
505   done
506
507#- search USE (and USE of USE and so on three levels)
508   for fuse1 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $fic | sort -u`
509   do
510   if [ $fuse1 != "ioipsl" ] 
511        then
512        if [ $fuse1 != "Agrif_Util" ] 
513        then
514        if [ $fuse1 != "Agrif_Types" ] 
515        then
516        if [ $fuse1 != "netcdf" ] 
517        then
518       lfuse1=$fuse1.f90
519       [ -f $fuse1.F90 ] && lfuse1=$fuse1.F90
520       luse1="$luse1\n$lfuse1\n\$(MODEL_LIB)($fuse1.o)"
521      for fuse2 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse1 | sort -u`
522      do
523           if [ $fuse2 != "ioipsl" ] 
524                then
525                if [ $fuse2 != "Agrif_Util" ] 
526                then
527                if [ $fuse2 != "Agrif_Types" ] 
528                then
529                if [ $fuse2 != "netcdf" ] 
530                then
531          lfuse2=$fuse2.f90
532          [ -f $fuse2.F90 ] && lfuse2=$fuse2.F90
533          luse2="$luse2\n$lfuse2\n\$(MODEL_LIB)($fuse2.o)"
534          # on cherche les USE  dans le fichier deja USE (3eme niveau! balaise!)
535          for fuse3 in `sed -n 's/^#[     ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse2 | sort -u`
536          do
537          if [ $fuse3 != "ioipsl" ] 
538                    then
539                    if [ $fuse3 != "Agrif_Util" ] 
540                    then
541                    if [ $fuse3 != "Agrif_Types" ] 
542                    then
543                    if [ $fuse3 != "netcdf" ] 
544                    then
545         luse3="$luse3\n$lfuse3\n\$(MODEL_LIB)($fuse3.o)"
546                    fi         
547                    fi         
548                    fi         
549                    fi         
550                    done
551                fi
552                fi
553                fi
554                fi
555      done
556        fi
557        fi
558        fi
559        fi
560   done
561#-
562#-  dep contains all dependancies
563   echo "\$(MODEL_LIB)(`echo $fic|awk -F. '{print $1}'`.o) :   \c"
564   for depele in `echo $luse3 | sort -u` `echo $luse2 | sort -u` `echo $luse1 | sort -u` `echo $luse0 | sort -u` `echo $dep | sort -u`
565   do
566       echo "\\"
567       echo "  $depele \c"
568       let i=i+1 # pour signaler le premier
569   done
570
571#-
572#- add dependancies with IOIPSL library (if source files contains IOIPSL)
573        grep -i 'use *ioipsl' ${fic} >/dev/null && ( echo "\\" ; echo " \$(IOIPSL_LIB) \c")
574
575#-
576#- add dependancies with IOIPSL library (if source files contains Agrif_*)
577        grep -i 'use Agrif_*' ${fic} >/dev/null && ( echo "\\" ; echo " \$(AGRIF_LIB) \c")
578
579#-
580#- add dependancies with KEY_CPP (if source file includes cpp  keys)
581   if [ ${j} != "0" ] 
582        then
583     echo "\\"
584     echo " KEY_CPP \c" 
585   fi
586#-
587#- end with the file itself
588        echo "\\"
589              echo " $fic"
590    fi
591    fi
592echo $fic done >/dev/tty
593done
594#-
595#- Write some special rules ---
596echo '# agrif previous use'
597echo "firstagrif:"
598echo "ifeq (\$(AGRIF),use)"
599echo '   @if [ -z "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) model.o $(MODDIR)/oce/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
600echo "else"
601echo '   @if [ -n "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) -r OPAFILES model.o $(MODDIR)/oce/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
602echo "endif"
603#-
604echo '#- RB : this rule is a pretty miserable trick to be able to re-compile NEMP-AGRIF-mono after NEMO-AGRIF-mpp'
605echo '#- I guess the good correction should be in AGRIF/LIB/toamr.c for the conv, to remove useless allocation declarations in AGRIF_INC'
606echo '# recompile all in this case' 
607echo "mpiagrif:"
608echo "ifeq (\$(AGRIF),use)"
609echo "ifeq (,\$(AGRIF_MPI))"
610echo '   @if [ -n "`cat KEY_CPP | grep key_mpp_mpi`" ]; then $(RM) -r OPAFILES model.o $(MODDIR)/oce/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
611echo "endif"
612echo "endif"
613#-
614echo '# key changing control'
615echo "key: "
616echo "   @echo CHANGE of CPP KEYS yes/no ?"
617echo "   -@if [ \"\`cat KEY_CPP\`\" != \"\$(P_P:\$(prefix)%=%)\" ] ; then \\"
618echo "      echo CPP options changed ; echo \"\$(P_P:\$(prefix)%=%)\" > KEY_CPP ; fi "
619#-
620echo '# check key values'
621echo "keyverif:"
622echo '   @echo CHECKING KEY'
623echo '   @echo KEY USED : '
624echo '   @for v in ` echo $(P_P:$(prefix)%=%) ` ; \'
625echo '   do \'
626echo '   echo $$v ;\'
627echo '        w=`echo $$v | cut -c1-3` ; \'
628echo '        if [ $$w = `echo "key"` ] ; then \'
629echo '        r=n ; \'
630echo '        echo " $(KEY_LIST) " | (grep $$v >/dev/null 2>&1) || r=o ; \'
631echo '           if [ $$r != "n" ] ; then \'
632echo '              echo "UNKNOWN KEY" ;\'
633echo '              false ;  \'
634echo '              exit ;  \'
635echo '           fi \'
636echo '        fi \'
637echo '   done'
638echo '# Checking the number of routines'
639echo "src_file_list: "
640echo '   @echo CHECKING THE NUMBER AND NAMES OF SOURCE FILES '
641echo '   @$(RM) `ls | fgrep -v -f .patron` '
642echo '   @check=`grep OPA_SRC .config`              ; \'
643echo '   if [ -n "$$check" ] ; then                   \'
644echo '   echo "   use OPA_SRC files"                ; \'
645echo '       ln -sf ../OPA_SRC/*.[Ffh]90          . ; \'
646echo '       ln -sf ../OPA_SRC/DYN/*.[Ffh]90      . ; \'
647echo '       ln -sf ../OPA_SRC/TRA/*.[Ffh]90      . ; \'
648echo '       ln -sf ../OPA_SRC/TRD/*.[Ffh]90      . ; \'
649echo '       ln -sf ../OPA_SRC/DIA/*.[Ffh]90      . ; \'
650echo '       ln -sf ../OPA_SRC/DOM/*.[Ffh]90      . ; \'
651echo '       ln -sf ../OPA_SRC/OBC/*.[Ffh]90      . ; \'
652echo '       ln -sf ../OPA_SRC/FLO/*.[Ffh]90      . ; \'
653echo '       ln -sf ../OPA_SRC/LDF/*.[Ffh]90      . ; \'
654echo '       ln -sf ../OPA_SRC/ZDF/*.[Ffh]90      . ; \'
655echo '       ln -sf ../OPA_SRC/SOL/*.[Ffh]90      . ; \'
656echo '       ln -sf ../OPA_SRC/DTA/*.[Ffh]90      . ; \'
657echo '       ln -sf ../OPA_SRC/SBC/*.[Ffh]90      . ; \'
658echo '       ln -sf ../OPA_SRC/IOM/*.[Ffh]90      . ; \'
659echo '  fi '
660echo '   @check=`grep LIM_SRC .config`              ; \'
661echo '   if [ -n "$$check" ] ; then                   \'
662echo '   echo "   use LIM_SRC files"                ; \'
663echo '      ln -sf ../LIM_SRC/*.[Ffh]90          . ; \'
664echo '  fi '
665echo '   @check=`grep NST_SRC .config`              ; \'
666echo '   if [ -n "$$check" ] ; then                   \'
667echo '   echo "   use NST_SRC files"                ; \'
668echo '      \$(RM) agrif_opa_interp.F90           ; \'
669echo '      \$(RM) agrif_opa_sponge.F90           ; \'
670echo '      \$(RM) agrif_opa_update.F90           ; \'
671echo '      ln -sf ../NST_SRC/*.[Ffh]90      .     ; \'
672echo '  fi '
673echo '   @check=`grep C1D_SRC .config`              ; \'
674echo '   if [ -n "$$check" ] ; then                   \'
675echo '   echo "   use C1D_SRC files"                ; \'
676echo '      ln -sf ../C1D_SRC/*.[Ffh]90          . ; \'
677echo '  fi '
678echo '   @check=`grep TOP_SRC .config`              ; \'
679echo '   if [ -n "$$check" ] ; then  \'
680echo '   echo "   use TOP_SRC files"                ; \'
681echo '      \$(RM) trcstp.F90                      ; \'
682echo '      \$(RM) sms.F90                         ; \'
683echo '      \$(RM) initrc.F90                      ; \'
684echo '      ln -sf ../TOP_SRC/*.[Ffh]90          . ; \'
685echo '      ln -sf ../TOP_SRC/SMS/*.[Ffh]        . ; \'
686echo '      ln -sf ../TOP_SRC/SMS/*.[Ffh]90      . ; \'
687echo '      ln -sf ../TOP_SRC/TRP/*.[Ffh]90      . ; \'
688echo '  fi '
689echo '   @check=`grep OFF_SRC .config`              ; \'
690echo '   if [ -n "$$check" ] ; then                   \'
691echo '   echo "   use OFF_SRC files"                ; \'
692echo '      ln -sf ../OFF_SRC/*.[Ffh]90          . ; \'
693echo '      ln -sf ../OFF_SRC/*/*.[Ffh]90        . ; \'
694echo '  fi '
695echo '   @\$(RM) tmplist'
696echo '   @ls -1 | fgrep -v -f .patron  >tmplist'
697echo '   @cmp tmplist SRC_FILE_LIST.temp || { echo some routines have been added or suppressed ; \'
698echo '   sdiff -s tmplist SRC_FILE_LIST.temp ; cp tmplist SRC_FILE_LIST.temp ; \'
699echo '   \$(RM) model.o \$(MODEL_LIB) \$(SXMODEL_LIB) \$(EXEC_BIN) ; \'
700echo '   echo "Rebuilding the AA_make files" ; \'
701echo '   cd ..  ; ../UTIL/fait_AA_make ; echo " " ; \'
702echo '   echo "THE ins_make COMMAND in modipsl/util MUST BE RERUN PLEASE DO SO BEFORE gmake" ; \'
703echo '   echo "========================================== " ; \'
704echo '   ../../util/ins_make ; echo " " ;  false ; exit ; }'
705exec > /dev/null
706
Note: See TracBrowser for help on using the repository browser.