New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
fait_AA_make in trunk/UTIL – NEMO

source: trunk/UTIL/fait_AA_make @ 590

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

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

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