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 @ 45

Last change on this file since 45 was 45, checked in by opalod, 20 years ago

CT : UPDATE022 : Switch to i4r8 for NEC compilation options

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