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/NVTK – NEMO

source: trunk/NVTK/fait_AA_make @ 1155

Last change on this file since 1155 was 1155, checked in by ctlod, 16 years ago

add svn Id

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 26.6 KB
Line 
1#!/bin/ksh
2# $Id$
3##set -vx
4############################################################
5#
6# Purpose :
7# This script aims to create create the AA_make file
8# in the WORK directory.
9# AA_make contains :
10#    - compilation options speccific to NEMO
11#    - compilation rules
12#    - dependancies
13# Running the modipsl/util/ins_make command is needed AFTER
14# fait_AA_make.
15#
16# Method :
17# We use temporary files to perform the following steps :
18#    1- search all CPP keys in the code
19#    2- write compilation rules
20#    3- add compilation options add the beginning of AA_make
21#    4- search and write dependancies
22#    5- add some specific rules (links creation in the WORK)
23#
24############################################################
25#-
26echo "This script must be run from the ../modipsl/config/CONFIG_NAME directory"
27echo ""
28
29#- Save the previous BB_make file before its rebuild
30echo "Save the previous BB_make file before its rebuild"
31cp scripts/BB_make scripts/BB_make_save
32
33#- Start the BB_make rebuild step
34echo "Start the BB_make rebuild step"
35
36cd WORK
37pwd
38
39#-
40#- Search CPP keys ---
41liste_cle=$(egrep '^# *if[!( &]*def|^# *elif' *.[Fh] *.[Fh]90  2> /dev/null | grep key_ | sed 's/||/\
42/' | sed 's/\&\&/\
43/' | sed 's/^.*key_/key_/' | sed 's/ *[) ] *$//' | sort -u  )
44
45#-
46#- Write main compilation rules ---
47cat > tampon <<end
48
49.SUFFIXES: .f90 .F90 .F
50
51# Target
52all : diroce libioipsl key keyverif src_file_list libagrif \$(IOIPSL_LIB) \$(AGRIF_LIB)
53      @echo --------------------------------------------
54      time gmake \$(EXEC_BIN) -j \$(NBPRC)
55      @echo --------------------------------------------
56      @cp SRC_FILE_LIST.temp SRC_FILE_LIST
57      @echo OPA model is OK
58
59# Cleaning objects, libraries and executables
60clean:
61ifeq (\$(AGRIF),use)
62      -@(cd OPAFILES; ./efface)
63endif
64      \$(RM) model.o \$(EXEC_BIN)
65      \$(RM) \$(MODDIR)/oce_\$(NEMOLIB)/\$(COMP)/*.mod
66      \$(RM) \$(MODEL_LIB)/*.o
67      \$(RM) ../../../tmp/tmp_\$(NEMOLIB)/\$(COMP)/*
68      @echo OPA model \(.o .mod libraries and executables are removed\)
69
70# Dependancies
71diroce:
72      @if [ ! -d ../../../lib/oce_\$(NEMOLIB) ] ; then mkdir ../../../lib/oce_\$(NEMOLIB) ; fi
73      @if [ ! -d ../../../tmp/tmp_\$(NEMOLIB) ] ; then mkdir ../../../tmp/tmp_\$(NEMOLIB) ; fi
74      @if [ ! -d ../../../lib/oce_\$(NEMOLIB)/\$(COMP) ] ; then mkdir ../../../lib/oce_\$(NEMOLIB)/\$(COMP) ; fi
75      @if [ ! -d ../../../tmp/tmp_\$(NEMOLIB)/\$(COMP) ] ; then mkdir ../../../tmp/tmp_\$(NEMOLIB)/\$(COMP) ; fi
76
77\$(EXEC_BIN) :  \$(MODEL_LIB) agrif2model.o model.o
78ifeq (\$(AGRIF),use)
79      \$(F_L) \$(L_X) -o \$(EXEC_BIN) model.o agrif2model.o \$(MODEL_LIB)/*.o \$(OASISMPI2_LIB) \$(IOIPSL_LIB) \$(AGRIF_LIB) \$(NCDF_LIB) \$(LIBMPI) \$(LIBMP)
80else
81      \$(F_L) \$(L_X) -o \$(EXEC_BIN) model.o \$(MODEL_LIB)/*.o \$(OASISMPI2_LIB) \$(IOIPSL_LIB) \$(NCDF_LIB) \$(LIBMPI) \$(LIBMP)
82endif
83
84# Agrif library and conv
85libagrif : firstagrif mpiagrif
86ifeq (\$(AGRIF),use)
87   @( if [ ! -d OPAFILES ]; then mkdir OPAFILES; fi )
88   @( if [ ! -d OPAFILES/AGRIF_INC ]; then mkdir OPAFILES/AGRIF_INC ; fi )
89   @( if [ ! -d OPAFILES/AGRIF_MODELFILES ]; then mkdir OPAFILES/AGRIF_MODELFILES ; fi )
90   @(cd ../../../modeles/AGRIF ; \$(M_K) -f Makefile P_P="\$(AGRIF_MPI)" )
91   @cp -rf ../../../modeles/AGRIF/agrif_opa.in OPAFILES/.
92   @cp -rf ../../../modeles/AGRIF/conv OPAFILES/.
93   @cp -rf ../../../modeles/AGRIF/efface OPAFILES/.
94endif
95
96# Agrif interface with NEMO
97agrif2model.o :
98ifeq (\$(AGRIF),use)
99   @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F90 > OPAFILES/\$*.F90
100   @\$(F_C) \\
101#-Q- aix    -qsuffix=f=F90 \\
102#-Q- ax_mono      -qsuffix=f=F90 \\
103#-Q- babel     -qsuffix=f=F90 \\
104#-Q- osxxlf    -qsuffix=f=F90 \\
105   \$(P_P) \$(F_O) \\
106#-Q- fjvpp     -Z \$*.L \\
107#-Q- sx8mercure      -R2 \\
108#-Q- sx8brodie    -R2 \\
109#-Q- sxdkrz    -R2 \\
110#-Q- eshpux    -R2 \\
111#-Q- aix    -qsource \\
112#-Q- ax_mono      -qsource \\
113#-Q- babel     -qsource \\
114      OPAFILES/\$*.F90 || { mv \$(PREF).L \$(TMP) ; false ; exit ; }
115endif
116
117# IOIPSL library
118libioipsl :
119   (cd ../../../modeles/IOIPSL/src ; \$(M_K) -f Makefile )
120
121# Main program
122model.o :   \$(MODEL_LIB) model.f90
123      @\$(F_C) \$(F_O) -c model.f90
124
125# if the make script is stopped, one doesn't destroy library
126.PRECIOUS : \$(MODEL_LIB)
127#-Q- sxdkrz .PRECIOUS : \$(SXMODEL_LIB)
128#-Q- eshpux .PRECIOUS : \$(SXMODEL_LIB)
129
130# library dependancies
131\$(MODEL_LIB): \$(LIB_OBJ)
132      @echo
133      @echo The library is up-to-date
134      @echo
135
136# Default rules
137.DEFAULTS:
138
139# rules for the .f90 files
140\$(MODEL_LIB)/%.o : %.f90           
141      @\$(F_C) \$(P_P) \$(F_O) \\
142#-Q- fjvpp     -Z \$*.L \\
143#-Q- sx8mercure      -R2 \\
144#-Q- sx8brodie    -R2 \\
145#-Q- sxdkrz    -R2 \\
146#-Q- eshpux    -R2 \\
147#-Q- aix    -qsource \\
148#-Q- ax_mono      -qsource \\
149#-Q- babel     -qsource \\
150      \$*.f90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
151      @mv \$*.o \$(MODEL_LIB)/.
152      @\$(RM) \$*.[f]
153      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce_\$(NEMOLIB)/\$(COMP) ; fi
154#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
155#-Q- ax_mono      @mv \$(PREF)\$*.lst \$(PREF)\$*.L
156#-Q- babel     @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- g95       -SubloopScalar \\
168#-Q- f95       -SubloopScalar \\
169#-Q- osf1         -SubloopScalar \\
170      -comdirin ./ -comdirout AGRIF_MODELFILES/. -convfile \$*.F90)
171      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
172      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC OPAFILES/\$*.F90 > OPAFILES/AGRIF_MODELFILES/\$*.F90
173      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
174      @\$(F_C) \$(P_P) \$(F_O) \\
175#-Q- fjvpp     -Z \$*.L \\
176#-Q- sx8mercure      -R2 \\
177#-Q- sx8brodie    -R2 \\
178#-Q- sxdkrz    -R2 \\
179#-Q- eshpux    -R2 \\
180#-Q- aix    -qsource \\
181#-Q- ax_mono      -qsource \\
182#-Q- babel     -qsource \\
183      OPAFILES/\$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; } 
184else
185      @\$(F_C) \$(P_P) \$(F_O) \\
186#-Q- fjvpp     -Z \$*.L \\
187#-Q- sx8mercure      -R2 \\
188#-Q- sx8brodie    -R2 \\
189#-Q- sxdkrz    -R2 \\
190#-Q- eshpux    -R2 \\
191#-Q- aix    -qsource \\
192#-Q- ax_mono      -qsource \\
193#-Q- babel     -qsource \\
194      \$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
195endif
196      @mv \$*.o \$(MODEL_LIB)/.
197      @\$(RM) \$*.[f]
198      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce_\$(NEMOLIB)/\$(COMP) ; fi
199#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
200#-Q- ax_mono      @mv \$(PREF)\$*.lst \$(PREF)\$*.L
201#-Q- babel     @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- sx8mercure      -R2 \\
211#-Q- sx8brodie    -R2 \\
212#-Q- sxdkrz    -R2 \\
213#-Q- eshpux    -R2 \\
214#-Q- aix    -qsource \\
215#-Q- ax_mono      -qsource \\
216#-Q- babel        -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- babel     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
224#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
225#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
226      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
227
228# rules for the library from the .f files
229\$(MODEL_LIB)/%.o : %.f           
230      @\$(F_C) \$(F_O) \\
231#-Q- fjvpp     -Z \$*.L \\
232#-Q- sx8mercure      -R2 \\
233#-Q- sx8brodie    -R2 \\
234#-Q- sxdkrz    -R2 \\
235#-Q- eshpux    -R2 \\
236#-Q- aix    -qsource \\
237#-Q- ax_mono      -qsource \\
238#-Q- babel     -qsource \\
239      \$*.f|| { if [ -f \$(PREF)\$*.L ] ; then mv \$*.L \$(TMP) ; fi ; false ; exit ; }
240      @mv \$*.o \$(MODEL_LIB)/.
241#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
242#-Q- ax_mono      @mv \$(PREF)\$*.lst \$(PREF)\$*.L
243#-Q- babel     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
244#-Q- linux  @mv \$(PREF)\$*.lst \$(PREF)\$*.L
245#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
246      @if [ -f \$(PREF)\$*.L ] ; then mv \$*.L \$(TMP) ; fi
247
248end
249#-
250#- Compilation options ---
251exec 1> AA_make
252MAIN="model"
253echo '# some variables'
254echo 'TMP = ../../../tmp/tmp_$(NEMOLIB)/$(COMP)'
255echo ''
256echo '#WARNING : NEMO does NOT support fortran 95 signed zero behaviour when using intrinsec SIGN function'
257echo '#          This doesnt happen whith Fortran 90 compilers but'
258echo '#          Check your compilers option in consequence when using real F95 compilers'
259echo ''
260echo '#-Q- sx8mercure  # Compiler options NEMO (CEA SX6-NEC) '
261echo '#-Q- sx8mercure  F_O = -size_t64 -dw -Wf\"-A dbl4\" -sx6 -C vopt -Wf"-P nh" -Wf',-pvctl noassume loopcnt=10000 -L transform' -I $(MODDIR) -I $(MODEL_LIB) -I $(NCDF_INC)'
262echo '#-Q- sx8mercure  F_O = -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 $(MODEL_LIB) -I $(NCDF_INC)'
263echo '#-Q- sx8mercure  F_F = $(F_O) -f3'
264echo '#-Q- sx8mercure  L_X = $(L_O) -ftrace'
265echo '#-Q- sx8brodie  # Compiler options NEMO (CEA SX6-NEC) '
266echo '#-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)'
267echo '#-Q- sx8brodie  F_F = $(F_O) -f3'
268echo '#-Q- sx8brodie  L_X = $(L_O)'
269echo '#-Q- sxdkrz  # Compiler options for NEMO (DKRZ SX6-NEC) '
270echo '#-Q- sxdkrz  F_O = -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 $(MODEL_LIB) -I $(NCDF_INC)'
271echo '#-Q- sxdkrz  F_F = $(F_O) -f3'
272echo '#-Q- sxdkrz  L_X = $(L_O) -ftrace'
273echo '#-Q- eshpux  # Compiler options for NEMO (Earth Simulator)'
274echo '#-Q- eshpux  # for super perfs!'
275echo '#-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)'
276echo '#-Q- eshpux  # regular options!'
277echo '#-Q- eshpux  F_O = $(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 $(MODEL_LIB) -I $(NCDF_INC)'
278echo '#-Q- eshpux  F_F = $(F_O) -f3'
279echo '#-Q- eshpux  L_X = $(L_O)'
280echo '#-Q- linux  # Compiler options for NEMO (pgf version)'
281echo '#-Q- linux  F_O = -Mlist -O3 -byteswapio -r8  -I $(MODDIR) -I$(MODEL_LIB) -I $(NCDF_INC)'
282echo '#-Q- linux  F_F = $(F_O) -Mextend'
283echo '#-Q- linux  L_X = -r8 -O3'
284echo '#-Q- lxiv7  # Compiler options for NEMO (ifc version)'
285echo '#-Q- lxiv7  F_O = -O3 -r8  -I $(MODDIR) -I$(MODEL_LIB) -I $(NCDF_INC)'
286echo '#-Q- lxiv7  F_F = $(F_O) -extend_source '
287echo '#-Q- lxiv7  L_X = -r8 -O3'
288echo '#-Q- lxiv8  # Compiler options for NEMO (ifort version)'
289echo '#-Q- lxiv8  F_O = -O3 -r8  -I $(MODDIR) -I$(MODEL_LIB) -I $(NCDF_INC)'
290echo '#-Q- lxiv8  F_F = $(F_O) -extend_source '
291echo '#-Q- lxiv8  L_X = -r8 -O3'
292echo '#-Q- g95  # Compiler options for NEMO (g95 version)'
293echo '#-Q- g95  F_O = -O3 -fno-second-underscore -r8 -funroll-all-loops -I $(MODDIR) -I $(MODEL_LIB) -I $(NCDF_INC)'
294echo '#-Q- g95  F_F = $(F_O)'-ffixed-form -ffixed-line-length-132
295echo '#-Q- g95  L_X = -r8 -O3'
296echo '#-Q- gfortran  # Compiler options for NEMO (gfortran version)'
297echo '#-Q- gfortran  F_O = -fno-second-underscore -fdefault-real-8 -funroll-all-loops -I $(MODDIR) -I $(MODEL_LIB) -I $(NCDF_INC)'
298echo '#-Q- gfortran  F_F = $(F_O)-ffixed-form -ffixed-line-length-132'
299echo '#-Q- gfortran  L_X = -fdefault-real-8'
300echo '#-Q- aix  # Compiler options for NEMO (aix version)'
301echo '#-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)' 
302echo '#-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)' 
303echo '#-Q- aix  L_O = $(F_P) -q64 -O3'
304echo '#-Q- aix  L_X = $(L_O)'
305echo '#-Q- ax_mono    # Compiler options for NEMO (aix version)'
306echo '#-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)' 
307echo '#-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)' 
308echo '#-Q- ax_mono   L_O = $(F_P) -q64 -O3'
309echo '#-Q- ax_mono   L_X = $(L_O)'
310echo '#-Q- babel  # Compiler options for NEMO (blue gene version)'
311echo '#-Q- babel  F_O =  -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qsource -qextname=flush -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODEL_LIB) -I $(NCDF_INC)'
312echo '#-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 $(MODEL_LIB) -I $(NCDF_INC)'
313echo '#-Q- babel  L_X = $(L_O)'
314echo '#-Q- osxxlf    # Compiler options for NEMO (osxxlf version)'
315echo '#-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)' 
316echo '#-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)' 
317echo '#-Q- osxxlf    L_X = -qrealsize=8 -O3'
318
319
320echo 'PREF='
321echo '#-Q- sx8mercure   PREF=i.'
322echo '#-Q- sx8brodie PREF=i.'
323echo '#-Q- sxdkrz PREF=i.'
324echo '#-Q- eshpux PREF=i.'
325echo ''
326echo '#Run type: mon, mpi or omp '
327echo 'ifeq ($(COMP),mon)'
328echo '#-Q- osxxlf  override F_C = xlf90 -c'
329echo '#-Q- osxxlf  override F_L = xlf90'
330echo 'endif'
331echo ''
332echo 'ifeq ($(COMP),memo)'
333echo '#-Q- sx8brodie  F_O := $(F_O) -P static'
334echo '#-Q- ax_mono    F_O := $(F_O) -qnosave'
335echo '#-Q- osxxlf     F_O := $(F_O) -qnosave'
336echo 'endif'
337echo ''
338echo 'ifeq ($(COMP),mpi)'
339echo 'P_P := $(P_P) key_mpp_mpi'
340echo '#-Q- osxxlf  override F_C = mpif90 -c'
341echo '#-Q- osxxlf  override F_L = mpif90'
342echo 'endif'
343echo ''
344echo 'ifeq ($(COMP),omp)'
345echo 'P_P := $(P_P) key_mpp_omp'
346echo '#-Q- sx8brodie F_O := $(F_O) -P auto'
347echo '#-Q- sx8brodie override F_F = $(F_O) '
348echo '#-Q- sx8brodie L_X := $(L_X) -P auto'
349echo 'endif'
350echo ''
351echo '# add suffix to P_P'
352echo 'P_P := $(P_P:%=$(prefix)%)'
353echo ''
354echo '# Some tests to define variables related to Agrif compilation'
355echo '# Please do not change '
356echo 'ifneq (,$(findstring key_agrif,$(P_P)))'
357echo 'AGRIF=use'
358echo 'else'
359echo 'AGRIF=notuse'
360echo 'AGRIF_LIB='
361echo 'endif'
362echo 'ifneq (,$(findstring key_mpp_mpi,$(P_P)))'
363echo 'AGRIF_MPI=-DAGRIF_MPI'
364echo 'else'
365echo 'AGRIF_MPI='
366echo 'endif'
367
368echo ''
369# Write the cpp key list with one key by line
370echo 'KEY_LIST = \c'
371for i in ${liste_cle}
372do
373 echo "\\"
374 echo "     $i \c"
375done
376
377echo ''
378echo '# .o file list in the library'
379echo 'LIB_OBJ = \c'
380#
381# find all .f in the current directory
382# build object files list  LIB_OBJ
383# one dependancy by line
384
385for i in `ls *.f 2> /dev/null`
386do
387  bn=`basename $i .f`
388    echo "\\"
389    echo "     \$(MODEL_LIB)/$bn.o\c"
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 .F90 in the current directory
410# build object files list  LIB_OBJ
411# one dependancy by line
412
413for i in `ls *.F90  `
414do
415  bn=`basename $i .F90`
416  if [ "${bn}" != "${MAIN}" ] 
417  then
418  if [ "${bn}" != "agrif2model" ] 
419  then
420    echo "\\"
421    echo "     \$(MODEL_LIB)/$bn.o\c"
422  fi
423  fi
424done
425
426# find all .F in the current directory
427# build object files list  LIB_OBJ
428# one dependancy by line
429
430for i in `ls *.F 2> /dev/null `
431do
432  bn=`basename $i .F`
433    echo "\\"
434    echo "     \$(MODEL_LIB)/$bn.o\c"
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                    [ -f $fuse0.[hfF]90 ] || continue
495          lfuse0=$fuse0.f90
496          [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
497          luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)/$fuse0.o"
498      done
499
500#- search USE in  files included in included files and add to luse0
501
502      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
503      do
504          for fuse0 in `sed -n 's/^[   ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc2 | sort -u`
505          do
506                        [ -f $fuse0.[hfF]90 ] || continue
507              lfuse0=$fuse0.f90
508              [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
509              luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)/$fuse0.o"
510          done
511           done
512   done
513
514#- search USE (and USE of USE and so on three levels)
515   for fuse1 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $fic | sort -u`
516   do
517            [ -f $fuse1.[hfF]90 ] || continue
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                    [ -f $fuse2.[hfF]90 ] || continue
524          lfuse2=$fuse2.f90
525          [ -f $fuse2.F90 ] && lfuse2=$fuse2.F90
526          luse2="$luse2\n$lfuse2\n\$(MODEL_LIB)/$fuse2.o"
527          # on cherche les USE  dans le fichier deja USE (3eme niveau! balaise!)
528          for fuse3 in `sed -n 's/^#[     ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse2 | sort -u`
529          do
530                        [ -f $fuse3.[hfF]90 ] || continue
531         luse3="$luse3\n$lfuse3\n\$(MODEL_LIB)($fuse3.o)"
532                    done
533      done
534   done
535#-
536#-  dep contains all dependancies
537   echo "\$(MODEL_LIB)/`echo $fic|awk -F. '{print $1}'`.o :       \c"
538   for depele in `echo $luse3 | sort -u` `echo $luse2 | sort -u` `echo $luse1 | sort -u` `echo $luse0 | sort -u` `echo $dep | sort -u`
539   do
540       echo "\\"
541       echo "  $depele \c"
542       let i=i+1 # pour signaler le premier
543   done
544
545#-
546#- add dependancies with IOIPSL library (if source files contains IOIPSL)
547        grep -i 'use *ioipsl' ${fic} >/dev/null && ( echo "\\" ; echo " \$(IOIPSL_LIB) \c")
548
549#-
550#- add dependancies with IOIPSL library (if source files contains Agrif_*)
551        grep -i 'use Agrif_*' ${fic} >/dev/null && ( echo "\\" ; echo " \$(AGRIF_LIB) \c")
552
553#-
554#- add dependancies with KEY_CPP (if source file includes cpp  keys)
555   if [ ${j} != "0" ] 
556        then
557     echo "\\"
558     echo " KEY_CPP \c" 
559   fi
560#-
561#- end with the file itself
562        echo "\\"
563              echo " $fic"
564    fi
565    fi
566echo $fic done >/dev/tty
567done
568#-
569#- Write some special rules ---
570echo '# agrif previous use'
571echo "firstagrif:"
572echo "ifeq (\$(AGRIF),use)"
573echo '   @if [ -z "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) model.o $(MODDIR)/oce_$(NEMOLIB)/$(COMP)/*.mod $(SXMODEL_LIB); fi'
574echo "else"
575echo '   @if [ -n "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) -r OPAFILES model.o $(MODDIR)/oce_$(NEMOLIB)/$(COMP)/*.mod $(SXMODEL_LIB); fi'
576echo "endif"
577#-
578echo '#- RB : this rule is a pretty miserable trick to be able to re-compile NEMP-AGRIF-mono after NEMO-AGRIF-mpp'
579echo '#- I guess the good correction should be in AGRIF/LIB/toamr.c for the conv, to remove useless allocation declarations in AGRIF_INC'
580echo '# recompile all in this case' 
581echo "mpiagrif:"
582echo "ifeq (\$(AGRIF),use)"
583echo "ifeq (,\$(AGRIF_MPI))"
584echo '   @if [ -n "`cat KEY_CPP | grep key_mpp_mpi`" ]; then $(RM) -r OPAFILES model.o $(MODDIR)/oce_$(NEMOLIB)/$(COMP)/*.mod $(SXMODEL_LIB); fi'
585echo "endif"
586echo "endif"
587#-
588echo '# key changing control'
589echo "key: "
590echo "   @echo CHANGE of CPP KEYS yes/no ?"
591echo "   -@if [ \"\`cat KEY_CPP\`\" != \"\$(P_P:\$(prefix)%=%)\" ] ; then \\"
592echo "      echo CPP options changed ; echo \"\$(P_P:\$(prefix)%=%)\" > KEY_CPP ; fi "
593#-
594echo '# check key values'
595echo "keyverif:"
596echo '   @echo CHECKING KEY'
597echo '   @echo KEY USED : '
598echo '   @for v in ` echo $(P_P:$(prefix)%=%) ` ; \'
599echo '   do \'
600echo '   echo $$v ;\'
601echo '        w=`echo $$v | cut -c1-3` ; \'
602echo '        if [ $$w = `echo "key"` ] ; then \'
603echo '        r=n ; \'
604echo '        echo " $(KEY_LIST) " | (grep $$v >/dev/null 2>&1) || r=o ; \'
605echo '           if [ $$r != "n" ] ; then \'
606echo '              echo "UNKNOWN KEY" ;\'
607echo '              false ;  \'
608echo '              exit ;  \'
609echo '           fi \'
610echo '        fi \'
611echo '   done'
612echo '# Checking the number of routines'
613echo "src_file_list: EMPTY"
614echo '   @echo CHECKING THE NUMBER AND NAMES OF SOURCE FILES '
615echo '   @$(RM) `ls | fgrep -v -f .patron` '
616echo '   @check=`grep OPA_SRC .config`              ; \'
617echo '   if [ -n "$$check" ] ; then                   \'
618echo '   echo "   use OPA_SRC files"                ; \'
619echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/*.[Ffh]90          . ; \'
620echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/DYN/*.[Ffh]90      . ; \'
621echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/TRA/*.[Ffh]90      . ; \'
622echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/TRD/*.[Ffh]90      . ; \'
623echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/DIA/*.[Ffh]90      . ; \'
624echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/DOM/*.[Ffh]90      . ; \'
625echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/OBC/*.[Ffh]90      . ; \'
626echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/BDY/*.[Ffh]90      . ; \'
627echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/FLO/*.[Ffh]90      . ; \'
628echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/LDF/*.[Ffh]90      . ; \'
629echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/ZDF/*.[Ffh]90      . ; \'
630echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/SOL/*.[Ffh]90      . ; \'
631echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/DTA/*.[Ffh]90      . ; \'
632echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/SBC/*.[Ffh]90      . ; \'
633echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/IOM/*.[Ffh]90      . ; \'
634echo '  fi '
635echo '   @check=`grep LIM_SRC_2 .config`              ; \'
636echo '   if [ -n "$$check" ] ; then                   \'
637echo '   echo "   use LIM_SRC_2 files"                ; \'
638echo '      ln -sf ../../../modeles/NEMO/LIM_SRC_2/*.[Ffh]90          . ; \'
639echo '  fi '
640echo '   @check=`grep LIM_SRC_3 .config`              ; \'
641echo '   if [ -n "$$check" ] ; then                   \'
642echo '   echo "   use LIM_SRC_3 files"                ; \'
643echo '      ln -sf ../../../modeles/NEMO/LIM_SRC_3/*.[Ffh]90          . ; \'
644echo '  fi '
645echo '   @check=`grep NST_SRC .config`              ; \'
646echo '   if [ -n "$$check" ] ; then                   \'
647echo '   echo "   use NST_SRC files"                ; \'
648echo '      \$(RM) agrif_opa_interp.F90           ; \'
649echo '      \$(RM) agrif_opa_sponge.F90           ; \'
650echo '      \$(RM) agrif_opa_update.F90           ; \'
651echo '      ln -sf ../../../modeles/NEMO/NST_SRC/*.[Ffh]90      .     ; \'
652echo '  fi '
653echo '   @check=`grep C1D_SRC .config`              ; \'
654echo '   if [ -n "$$check" ] ; then                   \'
655echo '   echo "   use C1D_SRC files"                ; \'
656echo '      ln -sf ../../../modeles/NEMO/C1D_SRC/*.[Ffh]90          . ; \'
657echo '  fi '
658echo '   @check=`grep TOP_SRC .config`              ; \'
659echo '   if [ -n "$$check" ] ; then  \'
660echo '   echo "   use TOP_SRC files"                ; \'
661echo '      \$(RM) trcstp.F90                      ; \'
662echo '      \$(RM) sms.F90                         ; \'
663echo '      \$(RM) initrc.F90                      ; \'
664echo '      ln -sf ../../../modeles/NEMO/TOP_SRC/*.[Ffh]90          . ; \'
665echo '      ln -sf ../../../modeles/NEMO/TOP_SRC/TRP/*.[Ffh]90      . ; \'
666echo '      ln -sf ../../../modeles/NEMO/TOP_SRC/PISCES/*.[Ffh]90   . ; \'
667echo '      ln -sf ../../../modeles/NEMO/TOP_SRC/LOBSTER/*.[Ffh]90  . ; \'
668echo '      ln -sf ../../../modeles/NEMO/TOP_SRC/CFC/*.[Ffh]90      . ; \'
669echo '      ln -sf ../../../modeles/NEMO/TOP_SRC/C14b/*.[Ffh]90     . ; \'
670echo '      ln -sf ../../../modeles/NEMO/TOP_SRC/MY_TRC/*.[Ffh]90   . ; \'
671echo '      ln -sf ../../../modeles/NEMO/TOP_SRC/DUMMY/*.[Ffh]90    . ; \'
672echo '  fi '
673echo '   @check=`grep OFF_SRC .config`              ; \'
674echo '   if [ -n "$$check" ] ; then                   \'
675echo '   echo "   use OFF_SRC files"                ; \'
676echo '      ln -sf ../../../modeles/NEMO/OFF_SRC/*.[Ffh]90          . ; \'
677echo '      ln -sf ../../../modeles/NEMO/OFF_SRC/*/*.[Ffh]90        . ; \'
678echo '  fi '
679echo ' '
680echo '   @mn=`awk '"'"'{ print $$1 }'"'"' .config `  ; \'
681echo '  myrep=../../../config/$$mn/MY_SRC ; \'
682echo '  echo "*** Dealing with my modified source code, located in" $$myrep ; \'
683echo '  for i in `ls $$myrep` ; do \'
684echo '    [ -f $$i ] && \$(RM) $$i ;\'
685echo '  done ; \'
686echo '  myrep_list=`(cd $$myrep ; ls *.[Ffh]90 *.[Ffh] *.mk)` ; \'
687echo '  if [ -n "$$myrep_list" ] ; then \'
688echo '      for F in $$myrep_list; do \'
689echo '         echo "---> Reconstruct link to MY_SRC/$$F" ; \'
690echo '         ln -sf  $$myrep/$$F . ; \'
691echo '      done ; \'
692echo '  fi '
693echo ' '
694echo '   @\$(RM) tmplist'
695echo '   @ls -1 | fgrep -v -f .patron >tmplist'
696echo '   @cmp tmplist SRC_FILE_LIST.temp || { echo some routines have been added or suppressed ; \'
697echo '   sdiff -s tmplist SRC_FILE_LIST.temp ; cp tmplist SRC_FILE_LIST.temp ; \'
698echo '   \$(RM) model.o \$(MODEL_LIB)/*.o  \$(EXEC_BIN) ; \'
699echo '   echo "Rebuilding the AA_make files" ; \'
700echo '   cd ..  ; ../NVTK/fait_AA_make ; echo " " ; \'
701echo '   echo "THE ins_make COMMAND in modipsl/util MUST BE RERUN PLEASE DO SO BEFORE gmake" ; \'
702echo '   echo "========================================== " ; \'
703echo '   ../../util/ins_make -w \$(NEMOLIB) ; echo " " ;  false ; exit ; }'
704echo "EMPTY: "
705exec > /dev/null
706
Note: See TracBrowser for help on using the repository browser.