source: LMDZ6/trunk/create_make_gcm @ 5308

Last change on this file since 5308 was 5261, checked in by Laurent Fairhead, 10 days ago

Some modifications needed for makelmdz after the work on the CPP keys and modules
LF

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 9.1 KB
RevLine 
[524]1#!/bin/sh
2#
[1492]3# $Id: create_make_gcm 5261 2024-10-22 16:12:58Z fairhead $
[524]4#
5#set -xv
[1714]6
[2238]7# arguments given to create_make_gcm are the directories to scan
8src_dirs=$*
[1714]9
[524]10machine=`hostname`
11os=`uname`
12gcm=`pwd`
[1990]13logfile=$gcm/create_make_gcm.log
14rm -f $logfile ; touch -f $logfile
[524]15libf=$gcm/libf
16libo=$gcm/libo
17CRAY=0
18if [ "$machine" = "atlas" -o "$machine" = "etoile" -o "$machine" = "axis" ] ; then
19  CRAY=1
20fi
21XNEC=0
22if [ "$machine" = "rhodes" ] ; then
23  XNEC=1
24fi
[536]25X6NEC=0
26if [ "$machine" = "mercure" ] ; then
27  X6NEC=1
28fi
[768]29X8BRODIE=0
30if [ "$machine" = "brodie" ] ; then
31  X8BRODIE=1
32fi
[524]33VPP=0
34if [ "$machine" = "nymphea0" ] ; then
35  VPP=1
36fi
37#
38echo "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
39echo "# Definitions de Macros pour Make"
40echo "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
41echo
42echo "# Repertoires :"
43echo
44echo "GCM     = "$gcm
45echo 'LIBF    = $(GCM)/libf'
46if [ "$CRAY" = '0' ] ; then
47   echo 'LIBO    = $(LIBOGCM)/$(MACHINE)'
48else
49   echo 'LIBO    = $(GCM)/libo'
50fi
51echo "LOCAL_DIR=`echo $localdir`"
[2239]52echo 'MISC    = $(LIBF)/misc'
[524]53echo "FILTRE   = filtre"
54echo "PHYS  = "
55echo 'LIBPHY = $(LIBO)/libphy$(PHYS).a'
[2326]56echo 'LIBPHY_COMMON= $(LIBO)/libphy_common.a'
[2239]57echo 'LIBDYN_PHY = $(LIBO)/libdynlmdz_phy$(PHYS).a'
[768]58echo 'DIRMAIN=dyn$(DIM)d$(FLAG_PARA)'
[524]59echo 'RM=rm'
60echo
61echo "OPLINK = "
62echo
63echo '# Les differentes librairies pour l"edition des liens:'
[2016]64echo 'L_DYN      = -ldyn$(DIM)d$(FLAG_PARA) -ldyn3d_common'
[1492]65echo 'L_FILTRE   = -l$(FILTRE)'
[2239]66echo 'L_DYN_PHY = -ldynlmdz_phy$(PHYS) '
[2326]67echo 'L_PHY = -lphy$(PHYS) -lphy_common'
[2239]68echo 'L_MISC    = -lmisc'
[1492]69echo 'L_ADJNT    ='
[768]70
[524]71echo
72echo "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
73echo "# Option de compilation FORTRAN"
74echo "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
75echo
76   echo 'COMPILE = $(F77) $(OPTIM) $(INCLUDE) -c'
77   echo 'COMPILE90 = $(F90) $(OPTIM90) $(INCLUDE) -c'
78   echo 'COMPTRU90 = $(F90) $(OPTIMTRU90) $(INCLUDE) -c'
[3045]79   echo 'LINK    = $(LINK)'
80   echo 'AR      = $(AR)'
81   echo 'ARFLAGS   = $(ARFLAGS)'
[524]82echo
83echo
84echo "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
85echo "# Creation des differents executables"
86echo "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
87echo
88echo "# Executables:"
89echo "# ------------"
90echo
91echo "PROG = code"
[2018]92echo 'DYN  = dyn$(DIM)d'
[524]93echo
[2239]94#echo 'main : chimie $(DYN) misc phys $(OPTION_DEP) '
[2326]95echo 'main : $(DYN) misc phys phy_common dyn_phy $(OPTION_DEP) '
[524]96echo '  cd $(LIBO) ; $(RANLIB) lib*.a ; cd $(GCM) ;\'
97echo '  cd $(LOCAL_DIR); \'
[1403]98echo '  $(COMPILE90) $(LIBF)/$(DIRMAIN)/$(SOURCE) -o $(PROG).o ; \'
[3232]99echo '  $(LINK) $(PROG).o -L$(LIBO) $(L_DYN) $(L_DYN_PHY) $(L_ADJNT) $(L_PHY) $(L_DYN) $(L_DYN3D_COMMON) $(L_MISC) $(L_DYN3D_COMMON) $(L_PHY) $(L_DYN_PHY) $(L_DYN) $(L_FILTRE) $(OPLINK) $(OPTION_LINK) -o $(LOCAL_DIR)/$(PROG).e ; $(RM) $(PROG).o '
[524]100echo
101echo 'phys : $(LIBPHY)'
[2326]102echo 'phy_common : $(LIBPHY_COMMON)'
[2018]103echo 'dyn3d : $(LIBO)/libdyn$(DIM)d$(FLAG_PARA).a $(LIBO)/lib$(FILTRE).a $(LIBO)/libdyn3d_common.a'
104echo 'dyn2d : $(LIBO)/libdyn2d.a'
105echo 'dyn1d :'
[524]106echo
[2239]107echo 'dyn_phy: $(LIBDYN_PHYS)'
[2018]108echo
[768]109#echo 'chimie : $(LIBO)/libchimie.a'
110echo
[2239]111echo 'misc : $(LIBO)/libmisc.a'
[524]112echo
113echo 'adjnt : $(LIBO)/libadjnt.a'
114echo
115echo '$(FILTRE)3d : $(LIBO)/lib$(FILTRE).a'
116echo
117echo '$(FILTRE)2d :'
118echo
119echo '$(FILTRE)1d :'
120echo
121echo "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
122echo "# Contenu des differentes bibliotheques"
123echo "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
124echo
125echo
126cd $libf >/dev/null 2>&1
[1714]127
[2238]128for diri in $src_dirs ; do
[1714]129
[524]130   if [ -d $diri ] ; then
[2238]131   if [ "`ls $diri/*.F`" != "" ] || [ "`ls $diri/*.[fF]90`" != "" ]  ; then 
[1714]132#      cd $diri >/dev/null 2>&1
[524]133      echo
134      listlib=""
[1714]135# Liste des fichiers .F et .F90 n'etant pas des programmes principaux
[2238]136      for fili in `ls $diri/*.[fF]` ; do
137         # Check if file is a routine or main program
138         # i.e: look for the "program" keword preceeded by leading spaces
[4085]139         test=` (  head -20 $fili | grep -i '^ *program' ) `
[2238]140         # if it is not a main program, add it to the list
[1714]141         if [ "$test" = "" ] ; then listlib=$listlib" "$fili ; fi
[524]142      done
[2238]143      for fili in `ls $diri/*.[fF]90` ; do
144         # Check if file is a routine or main program
145         # i.e. look for "program" keyword (with possibly some leading spaces)
[4085]146         test=` (  head -20 $fili | grep -i '^ \{0,\}program' ) `
[2238]147         # if it is not a main program, add it to the list
[1714]148         if [ "$test" = "" ] ; then listlib=$listlib" "$fili ; fi 
[524]149      done
150      echo
[1990]151      echo $listlib >> $logfile
[524]152      echo
[2238]153      # topdiri contains main dir name (without trailing "/blabla" for subdirs)
154      topdiri=${diri%/*}
[1714]155      echo "#=================================================================="
[524]156      echo "# Contenu de la bibliotheque correspondant au Directory "$diri
[1714]157      echo "#=================================================================="
[524]158      echo
[1714]159      for trufile in $listlib ; do
160         fili=`echo $trufile | awk -F/ ' { print $NF } ' | cut -d. -f1`
[2238]161         echo '$(LIBO)/lib'$topdiri".a : " '$(LIBO)/lib'$topdiri".a("$fili".o)"
[524]162         echo
163      done
[2238]164      echo '.PRECIOUS   : $(LIBO)/lib'$topdiri'.a'
[524]165      echo
166      echo
[2238]167      echo "# Compilation of elements in $diri of library lib"$topdiri".a"
[524]168      echo
[1714]169      for trufile in $listlib ; do
170         fili=`echo $trufile | awk -F/ ' { print $NF } ' | cut -d. -f1`
[524]171         F90=0 ; egrep -i '^ *use ' $trufile > /dev/null 2>&1 && F90=1
172                 egrep -i '^ *module ' $trufile > /dev/null 2>&1 && F90=1
[536]173                 egrep -i '#include*.inc ' $trufile > /dev/null 2>&1 && F90=1
[2238]174         str1='$(LIBO)/lib'$topdiri'.a('$fili'.o) : $(LIBF)/'$trufile
[1714]175         [ "$fili" = "$diri/chem.subs" ] && str1=$str1' $(LIBF)/'$diri/chem.mods.F
[1112]176
[1714]177##########################################################################
178# TRAITEMENT DES DEPENDANCES
[1112]179# Differents cas de dependance correspondant a des include ou des
180# use module.
181# soit dans le repertoire local soit dans un autre.
[1714]182# Pour dyn3d, il faudrait remplacer la chaine de caractere par $DYN
183# ou quelque chose du genre.
184##########################################################################
[1112]185
[1962]186         for stri in ` ( sed -e '/^[cC\!]/d' $trufile | sed -e "/\#include /s/\#include /XXnclude /" -e "/include /s/include /XXnclude /" -e "/INCLUDE /s/INCLUDE /XXnclude /" | sed -n "/XXnclude /s/XXnclude//p" | sed 's/\"//g' | sort | uniq ; sed -e '/^[cC\!]/d' $trufile | egrep -i '^ *use ' | sed -e 's/,/ /' | awk ' { print $2 } ' | sort | uniq ) ` ; do
[1990]187            echo $trufile $fili $stri >> $logfile
[1714]188            strj=`echo $stri | tr [A-Z] [a-z]`
189            str2=""
[2238]190            for dirinc in $src_dirs ; do
[1714]191# Recherche dans l'ordre hierarchique inverse car seule la derniere
192# ligne est conservee
[2238]193#               if [ $dirinc = phydev ] ; then
194#                   dirstr='$(PHYS)'
195#                   libstr='phy$(PHYS)'
196#               else
[1810]197                   dirstr=$dirinc
198                   libstr=$dirinc
[2238]199#               fi
[1990]200               echo dirinc $dirinc >> $logfile
[1714]201               if [ -f $dirinc/$stri ] ; then
[1810]202                  str2='$(LIBF)/'$dirstr/$stri
[1714]203               elif [ -f $dirinc/$strj ] ; then
[1810]204                  str2='$(LIBF)/'$dirstr/$stri
[2085]205               elif [ -f $dirinc/$strj.[fF]90 ]  || [ -f $dirinc/$strj.[fF] ]  ; then 
[1810]206                  strlib=`echo $libstr | awk -F/ ' { print $1 } '`
[1714]207                  str2='$(LIBO)/lib'$strlib'.a('$strj'.o)'
[2085]208               elif [ -f $dirinc/$stri.[fF]90 ]  || [ -f $dirinc/$stri.[fF] ]  ; then 
[1865]209                  strlib=`echo $libstr | awk -F/ ' { print $1 } '`
210                  str2='$(LIBO)/lib'$strlib'.a('$stri'.o)'
[1714]211               fi
[1990]212               echo stri $stri  >> $logfile
213               echo str2 $str2  >> $logfile
[1714]214            done
[1990]215               echo dernier str2 $str2  >> $logfile
[1714]216            if [ "$str2" = "" ] ; then
[5261]217                if [ "$stri" = "YOMCST" ] ; then
218                  str2='$(LIBO)/libphylmd.a(yomcst_mod_h.o)' 
219                  echo $str1 \\
220                  str1=$str2
221                else
222                  echo Warn: Include $diri $trufile $fili $stri pas trouve >> $logfile
223                fi
[1714]224            elif [ "$str2" = "$str1" ] ; then
[1990]225               echo Warn: Include $diri $trufile $fili $stri $str1 trouve 2x >> $logfile
[1714]226            else
[524]227               echo $str1 \\
[1714]228               str1=$str2
[524]229            fi
[1714]230         done # Fin de la boucle sur les dependances et ecriture de la derniere
[524]231         echo $str1
[1492]232         # Compile in LIBO directory; and before compiling, remove
233         # object from library
234         echo ' cd $(LIBO); \'
[3045]235         echo ' $(AR) -d $(LIBO)/lib'$topdiri'.a '$fili'.o ; \'
[768]236         if [ "$F90" -eq '0' ] ; then
[1492]237         ## Fixed Form Fortran 77
[1714]238           echo '       $(COMPILE) $(LIBF)/'$trufile' ; \'
[524]239         else
[1492]240         ## Fortran 90
[1714]241           if [ `echo $trufile | cut -d. -f2` = F90 ] ; then
[1492]242              ## Free Form
[1714]243              echo '    $(COMPTRU90) $(LIBF)/'$trufile' ; \'
[524]244           else
[1714]245              echo '    $(COMPILE90) $(LIBF)/'$trufile' ; \'
[524]246           fi
247         fi
[1492]248         # Put generated object in library
[3045]249         echo ' $(AR) $(ARFLAGS) $(LIBO)/lib'$topdiri'.a '$fili'.o ; $(RM) '$fili'.o ; \'
[524]250         echo
251      done
252#       
253      echo
254   cd $libf
255   fi
256   fi
257done
Note: See TracBrowser for help on using the repository browser.