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

source: branches/CMIP5_IPSL/UTIL/fait_AA_make @ 3205

Last change on this file since 3205 was 1852, checked in by mafoipsl, 14 years ago

-q save option deleted on aix6 system to reduce memory usage.

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