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

source: tags/nemo_dev_x9/UTIL/fait_AA_make @ 2143

Last change on this file since 2143 was 203, checked in by opalod, 19 years ago

CT : UPDATE143 : update files used to build Makefiles

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 13.3 KB
Line 
1#!/bin/ksh
2#set -xv
3#-
4echo "This script must be run while in the modipsl/modeles/OPA directory"
5cd WORK
6pwd
7#MODEL_LIB=../../../lib/libopa.a
8#MODEL_LIB=`grep MODEL_LIB AA_make.ldef | sed 's/ //g' | sed 's/MODEL_LIB=//g' `
9liste_cle=$(egrep '^# *if[!( &]*def|^# *elif' *.[Fh] *.[Fh]90 | grep key_ | sed 's/||/\
10/' | sed 's/\&\&/\
11/' | sed 's/^.*key_/key_/' | sed 's/ *[) ] *$//' | sort -u )
12#-
13#-
14#- 3) Ecriture du AA_make
15#-
16#- enteteFait_AA_make     
17#-
18cat > tampon <<end
19#
20.SUFFIXES: .f90 .F90 .F
21#
22# Target
23all:     diroce \$(EXEC_BIN)
24      @cp SRC_FILE_LIST.temp SRC_FILE_LIST
25      @echo OPA model is OK
26# cleaning objects, libraries and executables
27clean:
28      \$(RM) model.o \$(MODDIR)/oce/*.mod \$(MODEL_LIB) \$(SXMODEL_LIB) \$(EXEC_BIN)
29      @echo OPA model \(.o .mod libraries and executables are removed\)
30# dependancies
31diroce:
32      @if [ ! -d ../../../lib/oce ] ; then mkdir ../../../lib/oce ; fi
33
34\$(EXEC_BIN) : libioipsl key keyverif src_file_list \$(MODEL_LIB) \$(IOIPSL_LIB) model.o
35      \$(F_L) \$(L_X) -o \$(EXEC_BIN) model.o \$(SXMODEL_LIB) \$(OASISMPI2_LIB) \$(IOIPSL_LIB) \$(NCDF_LIB) \$(LIBMPI) \$(LIBMP)
36
37libioipsl :
38   (cd ../../IOIPSL/src ; \$(M_K) -f Makefile )
39
40# main program
41model.o :   model.f90
42      @\$(F_C) \$(F_O) -c model.f90
43
44# if the make script is stopped, one doesn't destroy library
45.PRECIOUS : \$(MODEL_LIB)
46#-Q- sxnec .PRECIOUS : \$(SXMODEL_LIB)
47#-Q- sx6nec .PRECIOUS : \$(SXMODEL_LIB)
48
49# library dependancies
50\$(MODEL_LIB): \$(LIB_OBJ)
51      @echo
52      @echo La bibliotheque est a jour
53      @echo
54
55# Rules
56.DEFAULTS:
57
58# rules for the .f90 files
59.f90.a :           
60      @\$(F_C) \$(P_P) \$(F_O) \\
61#-Q- fjvpp     -Z \$*.L \\
62#-Q- sxnec     -R2 \\
63#-Q- sx6nec    -R2 \\
64#-Q- aix    -qsource \\
65      \$*.f90 || { mv \$(PREF)\$*.L \$(TMP) ; false ; exit ; }
66#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
67#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
68      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
69      @\$(RM) \$*.[of]
70      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
71#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
72#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
73      @mv \$(PREF)\$*.L \$(TMP)
74
75# rules for the .F90 files
76.F90.a :           
77      @\$(F_C) \$(P_P) \$(F_O) \\
78#-Q- fjvpp     -Z \$*.L \\
79#-Q- sxnec     -R2 \\
80#-Q- sx6nec    -R2 \\
81#-Q- aix    -qsource \\
82      \$*.F90 || { mv \$(PREF)\$*.L \$(TMP) ; false ; exit ; }
83#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
84#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
85      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
86      @\$(RM) \$*.[of]
87      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
88#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
89#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
90      @mv \$(PREF)\$*.L \$(TMP)
91
92# rules for the .F files
93.F.a :           
94      @\$(F_C) \$(P_P) \$(F_O) \\
95#-Q- fjvpp     -Z \$*.L \\
96#-Q- sxnec     -R2 \\
97#-Q- sx6nec    -R2 \\
98#-Q- aix    -qsource \\
99      \$*.F || { mv \$(PREF)\$*.L \$(TMP) ; false ; exit ; }
100#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
101#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
102      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
103      @\$(RM) \$*.[of]
104      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
105#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
106#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
107      @mv \$(PREF)\$*.L \$(TMP)
108
109# rules for the library from the .f files
110.f.a :     
111      @\$(F_C) \$(F_O) \\
112#-Q- fjvpp     -Z \$*.L \\
113#-Q- sxnec     -R2 \\
114#-Q- sx6nec    -R2 \\
115#-Q- aix    -qsource \\
116      \$*.f|| { mv \$*.L \$(TMP) ; false ; exit ; }
117#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
118#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
119      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
120      @\$(RM) -f \$*.o
121#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
122#-Q- linux  @mv \$(PREF)\$*.lst \$(PREF)\$*.L
123      @mv \$*.L \$(TMP)
124#
125end
126#-
127#- dependances
128#-
129exec 1> AA_make
130MAIN="model"
131echo '# $Header$'
132echo '# some variables'
133echo 'TMP = ../../../tmp'
134echo 'L_X = $(L_O) $(L_C) -ftrace'
135echo '#-Q- sxnec  # Compiler options for the ORCA model   -   std'
136echo '#-Q- sxnec  F_O = -dw -Wf\"-A idbl4\" -sx5 -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'
137echo '#-Q- sx6nec  # Compiler options for the ORCA model   -   std'
138echo '#-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)'
139echo '#-Q- linux  # Compiler options for the ORCA model'
140echo '#-Q- linux  F_O = -Mlist -O2 -byteswapio -r8  -module $(MODDIR)'
141echo '#-Q- aix    # Compiler options for the ORCA model (aix version)'
142echo '#-Q- aix    F_O =  -qrealsize=8 -qsave -qsuffix=f=f90 -qsuffix=cpp=F90 -qsource -I$(MODDIR)/oce -I $(MODDIR) -I $(IOIPSL_MOD) -q64 -O4 -qlargepage -qmaxmem=-1 -brename:.flush,.flush_ -brename:.mpi_send,.mpi_bsend'
143echo '#-Q- aix   L_X = $(L_O) $(L_C) '
144
145echo 'PREF='
146echo '#-Q- sxnec  PREF=i.'
147echo '#-Q- sx6nec PREF=i.'
148echo ''
149# Write the cpp key list with one key by line
150echo 'KEY_LIST = \c'
151for i in ${liste_cle}
152do
153 echo "\\"
154 echo "     $i \c"
155done
156
157echo ''
158echo '# .o file list in the library'
159echo 'LIB_OBJ = \c'
160#
161# allons chercher tous les .f du repertoire courant
162# construction de la liste des objets LIB_OBJ
163
164for i in `ls *.f`
165do
166  bn=`basename $i .f`
167  if [ "${bn}" != "${MAIN}" ] 
168  then
169    echo "\\"
170    echo "     \$(MODEL_LIB)($bn.o)\c"
171  fi
172done
173
174# allons chercher tous les .f90 du repertoire courant
175# construction de la liste des objets LIB_OBJ
176# one dependancy by line
177for i in `ls *.f90`
178do
179  bn=`basename $i .f90`
180  if [ "${bn}" != "${MAIN}" ] 
181  then
182    echo "\\"
183    echo "     \$(MODEL_LIB)($bn.o)\c"
184  fi
185done
186
187# allons chercher tous les .F90 du repertoire courant
188# construction de la liste des objets LIB_OBJ
189
190for i in `ls *.F90`
191do
192  bn=`basename $i .F90`
193  if [ "${bn}" != "${MAIN}" ] 
194  then
195    echo "\\"
196    echo "     \$(MODEL_LIB)($bn.o)\c"
197  fi
198done
199
200# allons chercher tous les .F du repertoire courant
201# construction de la liste des objets LIB_OBJ
202
203for i in `ls *.F`
204do
205  bn=`basename $i .F`
206  if [ "${bn}" != "${MAIN}" ] 
207  then
208    echo "\\"
209    echo "     \$(MODEL_LIB)($bn.o)\c"
210  fi
211 done
212
213echo ""
214
215cat tampon
216rm tampon
217
218#
219for fic in `ls *.f90 *.F90  *.F `
220do
221    if [ "${fic}" != "${MAIN}.[Ff]" ]
222    then
223   i=0
224   j=0
225   dep=""
226   inc=""
227   inc2=""
228   inc3=""
229   luse0=""
230   luse1=""
231   luse2=""
232   luse3=""
233# on cherche les includes type modele de glace LLN
234   for inc in `sed -n 's/^[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
235   do
236       dep="$dep\n$inc"
237   done
238
239# on cherche les includes (et les includes des includes et ainsi de suite pour 3 niveaux max)
240   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
241   do
242       j=1
243       dep="$dep\n$inc"
244      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
245      do
246          dep="$dep\n$inc2"
247          # on cherche les include  dans le fichier deja include (3eme niveau! balaise!)
248          for inc3 in `sed -n 's/^#[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc2 | sort -u`
249          do
250         dep="$dep\n$inc3"
251          done
252      done
253   done
254
255# on cherche les USE dans les include
256   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
257   do
258      for fuse0 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc | sort -u`
259      do
260           if [ $fuse0 != "ioipsl" ] 
261                then
262          lfuse0=$fuse0.f90
263          [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
264          luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
265                fi
266      done
267
268# on cherche aussi les USE dans les include des include on les ajoute a luse0
269
270      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
271      do
272          for fuse0 in `sed -n 's/^[   ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc2 | sort -u`
273          do
274               if [ $fuse0 != "ioipsl" ] 
275                    then
276              lfuse0=$fuse0.f90
277              [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
278              luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
279                    fi
280          done
281           done
282   done
283
284# on cherche les USE (et les USE des USE et ainsi de suite pour 3 niveaux max)
285   for fuse1 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $fic | sort -u`
286   do
287   if [ $fuse1 != "ioipsl" ] 
288        then
289       lfuse1=$fuse1.f90
290       [ -f $fuse1.F90 ] && lfuse1=$fuse1.F90
291       luse1="$luse1\n$lfuse1\n\$(MODEL_LIB)($fuse1.o)"
292      for fuse2 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse1 | sort -u`
293      do
294           if [ $fuse2 != "ioipsl" ] 
295                then
296          lfuse2=$fuse2.f90
297          [ -f $fuse2.F90 ] && lfuse2=$fuse2.F90
298          luse2="$luse2\n$lfuse2\n\$(MODEL_LIB)($fuse2.o)"
299          # on cherche les USE  dans le fichier deja USE (3eme niveau! balaise!)
300          for fuse3 in `sed -n 's/^#[     ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse2 | sort -u`
301          do
302          if [ $fuse3 != "ioipsl" ] 
303                    then
304         luse3="$luse3\n$lfuse3\n\$(MODEL_LIB)($fuse3.o)"
305                    fi         
306                    done
307                fi
308      done
309        fi
310   done
311#- la variable dep contient l'ensemble des dependances mais peut-etre en double ou plus
312#-
313   for depele in `echo $luse3 | sort -u` `echo $luse2 | sort -u` `echo $luse1 | sort -u` `echo $luse0 | sort -u` `echo $dep | sort -u`
314   do
315       [ ${i} = "0" ] && echo "\$(MODEL_LIB)(`echo $fic|awk -F. '{print $1}'`.o) :  \c"
316       echo "\\"
317       echo "  $depele \c"
318       let i=i+1 # pour signaler le premier
319   done
320
321#-
322#- on ajoute la dependance avec la librairie ioipsl si besoin cad si le source contient use ioipsl
323        grep -i 'use *ioipsl' ${fic} >/dev/null && ( echo "\\" ; echo " ../../../lib/libioipsl.a \c")
324
325#- on ajoute la dependance avec KEY_CPP si il y a des include cpp
326   if [ ${j} != "0" ] 
327        then
328     echo "\\"
329     echo " KEY_CPP \c" 
330   fi
331#- on finit la dependance avec le fichier lui-meme et on ecrit les regles de creation
332   if [ ${i} != "0" ] 
333        then
334        echo "\\"
335              echo " $fic"
336         fi
337    fi
338echo $fic done >/dev/tty
339done
340echo '# key changing control'
341echo "key: "
342echo "   @echo CHANGEMENT de CLES CPP oui/non ?"
343echo "   -@if [ \"\`cat KEY_CPP\`\" != \"\$(P_P)\" ] ; then \\"
344echo "      echo CPP options changed ; echo \"\$(P_P)\" > KEY_CPP ; fi "
345#-
346#
347# regle pour verifier les cles
348# EK novembre 2000
349# adaptation : ED + MAF decembre 2000
350#
351echo
352echo "keyverif:"
353echo '   @echo VERIFICATION DES CLES'
354echo '   @echo CLES UTILISEES  : '
355echo '   @for v in ` echo $(P_P) | sed  -e s/-Wp,-D//g` ; \'
356echo '   do \'
357echo '   echo $$v ;\'
358echo '        w=`echo $$v | cut -c1-3` ; \'
359echo '        if [ $$w = `echo "key"` ] ; then \'
360echo '        r=n ; \'
361echo '        echo " $(KEY_LIST) " | (grep $$v >/dev/null 2>&1) || r=o ; \'
362echo '           if [ $$r != "n" ] ; then \'
363echo '              echo "UNKNOWN KEY" ;\'
364echo '              false ;  \'
365echo '              exit ;  \'
366echo '           fi \'
367echo '        fi \'
368echo '   done'
369# Checking if the number of routines have been changed
370echo '# Checking the number of routines'
371echo "src_file_list: "
372echo '   @echo CHECKING THE NUMBER AND NAMES OF SOURCE FILES '
373echo '   @\$(RM) `ls | fgrep -v -f .patron` '
374echo '   @if [ -d ../OCE_SRC ] ; then \'
375echo '       echo "   use OCE_SRC files"            ; \'
376echo '       ln -sf ../OCE_SRC/*.[Ffh]90          . ; \'
377echo '       ln -sf ../OCE_SRC/DYN/*.[Ffh]90      . ; \'
378echo '       ln -sf ../OCE_SRC/TRA/*.[Ffh]90      . ; \'
379echo '       ln -sf ../OCE_SRC/TRD/*.[Ffh]90      . ; \'
380echo '       ln -sf ../OCE_SRC/DIA/*.[Ffh]90      . ; \'
381echo '       ln -sf ../OCE_SRC/DOM/*.[Ffh]90      . ; \'
382echo '       ln -sf ../OCE_SRC/OBC/*.[Ffh]90      . ; \'
383echo '       ln -sf ../OCE_SRC/FLO/*.[Ffh]90      . ; \'
384echo '       ln -sf ../OCE_SRC/LDF/*.[Ffh]90      . ; \'
385echo '       ln -sf ../OCE_SRC/ZDF/*.[Ffh]90      . ; \'
386echo '       ln -sf ../OCE_SRC/SOL/*.[Ffh]90      . ; \'
387echo '       ln -sf ../OCE_SRC/DTA/*.[Ffh]90      . ; \'
388echo '       ln -sf ../OCE_SRC/SBC/*.[Ffh]90      . ; \'
389echo '  fi '
390echo '   @if [ -d ../ICE_SRC ] ; then \'
391echo '       echo "   use ICE_SRC files"              ; \'
392echo '      ln -sf ../ICE_SRC/*.[Ffh]90            . ; \'
393echo '  fi '
394echo '   @if [ -d ../TRC_SRC ] && [ ! -d ../SRC_OFFLINE_TRC ] ; then  \'
395echo '       echo "   use TRC_SRC files"              ; \'
396echo '      \$(RM) trcstp.F90 ; \'
397echo '      \$(RM) sms.F90    ; \'
398echo '      ln -sf ../TRC_SRC/*.[Ffh]              . ; \'
399echo '      ln -sf ../TRC_SRC/*.[Ffh]90            . ; \'
400echo '      ln -sf ../TRC_SRC/SMS/*.[Ffh]          . ; \'
401echo '      ln -sf ../TRC_SRC/SMS/*.[Ffh]90        . ; \'
402echo '      ln -sf ../TRC_SRC/TRP/*.[Ffh]90        . ; \'
403echo '      fi '
404echo '   @if [ -d ../SRC_OFFLINE_TRC ] ; then \'
405echo '       echo "   use TRC_SRC and SRC_OFFLINE_TRC files"              ; \'
406echo '      ln -sf ../TRC_SRC/*.[Ffh] ../TRC_SRC/SMS/*.[Ffh] . ; \'
407echo '      ln -sf ../SRC_OFFLINE_TRC/*.[Ffh] . ;  \'
408echo '      fi '
409echo '   @\$(RM) tmplist'
410echo '   @ls -1 | fgrep -v -f .patron  >tmplist'
411echo '   @cmp tmplist SRC_FILE_LIST.temp || { echo some routines have been added or suppressed ; \'
412echo '   sdiff -s tmplist SRC_FILE_LIST.temp ; cp tmplist SRC_FILE_LIST.temp ; \'
413echo '   \$(RM) model.o \$(MODEL_LIB) \$(SXMODEL_LIB) \$(EXEC_BIN) ; \'
414echo '   echo "Rebuilding the AA_make files" ; \'
415echo '   cd ..  ; ../UTIL/fait_AA_make ; echo " " ; \'
416echo '   echo "THE ins_make COMMAND in modipsl/util MUST BE RERUN PLEASE DO SO BEFORE gmake" ; \'
417echo '   echo "========================================== " ; \'
418echo '   ../../util/ins_make -t sxnec ; echo " " ;  false ; exit ; }'
419
Note: See TracBrowser for help on using the repository browser.