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/dev_001_GM/VALID – NEMO

source: branches/dev_001_GM/VALID/fait_AA_make @ 3325

Last change on this file since 3325 was 697, checked in by ctlod, 17 years ago

NVTK installation

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