Newer
Older
#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
#MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
#MNH_LIC for details. version 1.
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
##########################################################
# #
# MACRO : dependance_flist #
# generate the dependance list for ALL fortran #
# "*.f*" files #
# searching in PATH=$(1) #
##########################################################
#
dependance_flist = $(notdir $(shell find $(1) -follow -type f \
-name '*.f' -o -name '*.f90' -o -name '*.fx90' -o -name '*.F90'\
| grep -v ',v' | sed -e 's/\.f.*/.D/g' -e 's/\.F.*/.D/g' ))
obj_flist = $(notdir $(shell find $(1) -follow -type f \
-name 'spll_*.f*' | sed -e 's/\..*/.o/g' ))
#
##########################################################
# #
# COMPILER & ARCHITECTURE CONFIGURATION #
# #
##########################################################
#
include Rules.$(ARCH)$(F).mk
#
##########################################################
##########################################################
##########################################################
# #
# DONT MODIFY LINES AFTER THIS !!!!!!!!!!!!! #
# #
##########################################################
##########################################################
##########################################################
##########################################################
# #
# AUTOMATIQUE DEPENDANCE GENERATION !!!!!!!!!!!!! #
# #
# "*.D" files contain dependance deduceed #
# form all "*.f*" FORTRAN sources files #
# #
# "use" key word #
# --> dependance on "*.mod" module files #
# "module" key word key word #
# --> creation of"*.mod" module files #
# #
# The "*.D" list of files is contructed from every #
# directories of fortran sources : #
# ---> user, master , bugfix , etc... #
# with or without RCS version control #
# #
# The "*.D" list is reconstructed automaticaly #
# by the commande "spll" , each time a FORTRAN source #
# are modified or added . #
# #
# All modification are allowed !!!!! #
# adding new subroutines #
# or #
# adding new modules #
# #
# REM : if during modification, you deleting some #
# FORTRAN subroutines you must also deleted the #
# "spll_*.o" files created by this one by hand #
# to avoid potential link problems #
# #
##########################################################
##########################################################
# #
# DEP_MASTER : Automatique --> #
# Dependance file of MASTER source #
# #
##########################################################
#
OBJDIR_MASTER=$(OBJDIR_ROOT)/MASTER
DEP_MASTER= $(call dependance_flist,$(DIR_MASTER))
#
# init VPATH depending on compilation phase
#
ifdef DO_DEP_MASTER
VPATH += $(shell find $(DIR_MASTER) -follow -type d )
VPATH += $(OBJDIR_MASTER)
endif
#
ifdef DO_COMP_MASTER
VPATH += $(OBJDIR_MASTER) $(OBJDIR_MASTER)/MOD
endif
#
##########################################################
# #
# DEP_USER : Automatique --> #
# Dependance file of MY source #
# #
##########################################################
#
ifdef VER_USER
OBJDIR_USER=$(OBJDIR_ROOT)/$(VER_USER)
#
# init VPATH depending on compilation phase
#
ifdef DO_DEP_USER
DEP_USER= $(call dependance_flist,$(DIR_USER))
VPATH += $(shell find $(DIR_USER) -follow -type d )
VPATH += $(OBJDIR_USER)
endif
#
ifdef DO_COMP_USER
VPATH += $(OBJDIR_USER) $(OBJDIR_USER)/MOD $(OBJDIR_MASTER) $(OBJDIR_MASTER)/MOD

ESCOBAR MUNOZ Juan
committed
INC += -I$(B)$(OBJDIR_USER)/MOD -I$(B)$(OBJDIR_MASTER)/MOD
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
endif
#
endif
##########################################################
# #
# VPATH ADJUSTEMENT : #
# #
##########################################################
#
#
#VPATH := $(filter-out $(VPATH_EXCLUDE),$(VPATH))
#
##########################################################
# #
# OBJS : all *.o to compile #
# #
##########################################################
#
# MASTER
#
OBJS_LISTE_MASTER := $(OBJS_LISTE_MASTER) $(notdir $(shell find $(OBJDIR_MASTER) -follow -type f -name "spll_*.f*" | sed -e 's/\..*/.o/g' ))
#OBJS_LISTE_MASTER := $(OBJS_LISTE_MASTER) $(obj_flist $(OBJDIR_MASTER))
#
OBJS_LISTE_MASTER := $(sort $(filter-out $(IGNORE_OBJS),$(OBJS_LISTE_MASTER)))
#
LIB_MASTER=$(OBJDIR_MASTER)/$(LIB_OBJS_ROOT)-MASTER.a
#
# USER
#
#ifdef DO_COMP_USER
OBJS_LISTE_USER := $(OBJS_LISTE_USER) $(notdir $(shell find $(OBJDIR_USER) -follow -type f -name "spll_*.f*" | sed -e 's/\..*/.o/g' ))
#OBJS_LISTE_USER := $(OBJS_LISTE_USER) $(obj_flist $(OBJDIR_USER))
#
OBJS_LISTE_USER := $(sort $(filter-out $(IGNORE_OBJS), $(OBJS_LISTE_USER) $(OBJS_LISTE_MASTER) ))
#
LIB_USER=$(OBJDIR_USER)/$(LIB_OBJS_ROOT)-$(VER_USER).a
#endif
##########################################################
# #
# DEP_ALL : All dependance *.D to generate #
# #
##########################################################
#
DEP_ALL_MASTER = $(sort $(filter-out $(IGNORE_DEP_MASTER),$(DEP_MASTER)) )
#
DEP_ALL_USER = $(sort $(filter-out $(IGNORE_DEP_USER) ,$(DEP_USER)) )
#
.PHONY : clean all objdir objdirmaster depall objs lib prog print
.DELETE_ON_ERROR:
.SUFFIXES:
.SUFFIXES: .o .f90 .f .fx90 .mod .D .a
.INTERMEDIATE: $(LIB_MASTER)
##########################################################
# #
# MASTER RULES #
# #
##########################################################
all : gribapi progmaster
objdirmaster : $(OBJDIR_MASTER)/.dummy
$(OBJDIR_MASTER)/.dummy :
-mkdir -p $(OBJDIR_MASTER)/.dummy
-mkdir -p $(OBJDIR_MASTER)/MOD

ESCOBAR MUNOZ Juan
committed
depmaster : objdirmaster
@$(MAKE) DO_DEP_MASTER=YES OBJDIR=$(OBJDIR_MASTER) filedepallmaster

ESCOBAR MUNOZ Juan
committed
ifeq "$(VER_CDF)" "CDFAUTO"
depmaster : cdf
endif

ESCOBAR MUNOZ Juan
committed
filedepallmaster : $(DEP_ALL_MASTER)
find $(OBJDIR_MASTER) -follow -name "*.D" > $(OBJDIR_MASTER)/filemaster
rm -f $(OBJDIR_MASTER)/filedepallmaster
cat $(OBJDIR_MASTER)/filemaster | xargs cat >> $(OBJDIR_MASTER)/filedepallmaster
libmaster : depmaster

ESCOBAR MUNOZ Juan
committed
@$(MAKE) -I$(B)$(OBJDIR_MASTER) DO_COMP_MASTER=YES OBJDIR=$(OBJDIR_MASTER) objmaster

ESCOBAR MUNOZ Juan
committed
@$(MAKE) -I$(B)$(OBJDIR_MASTER) DO_COMP_MASTER=YES OBJDIR=$(OBJDIR_MASTER) $(LIB_MASTER)
mv $(LIB_MASTER) $(subst lib-,bib-,$(LIB_MASTER))
objmaster : $(OBJS_LISTE_MASTER)
$(LIB_MASTER) : $(OBJS_LISTE_MASTER)
cd $(OBJDIR_MASTER) ; find . -follow -name '*.o'| xargs $(AR) r $(LIB_MASTER)
progmaster : libmaster

ESCOBAR MUNOZ Juan
committed
@$(MAKE) -I$(B)$(OBJDIR_MASTER) DO_COMP_MASTER=YES \
OBJDIR=$(OBJDIR_MASTER) \
LIB_MNH=$(LIB_MASTER) \
PROG_DIR=$(OBJDIR_MASTER) \
$(PROG_LIST) cleanlibmaster
installmaster : libmaster

ESCOBAR MUNOZ Juan
committed
@$(MAKE) -I$(B)$(OBJDIR_MASTER) DO_COMP_MASTER=YES OBJDIR=$(OBJDIR_MASTER) install
cleanlibmaster :
rm -f $(LIB_MASTER)

ESCOBAR MUNOZ Juan
committed
cleanmaster :
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
test -d $(OBJDIR_MASTER) && rm -fr $(OBJDIR_MASTER)
cleanobjmaster :
test -d $(OBJDIR_MASTER) && find $(OBJDIR_MASTER) -follow -name "*.o" -o -name "*.mod" | xargs rm
cleanprogmaster :
test -d $(OBJDIR_MASTER) && cd $(OBJDIR_MASTER) && rm -f $(PROG_LIST)
##########################################################
# #
# USER RULES #
# #
##########################################################
user : proguser
objdiruser : $(OBJDIR_USER)/.dummy
$(OBJDIR_USER)/.dummy :
-mkdir -p $(OBJDIR_USER)/.dummy
-mkdir -p $(OBJDIR_USER)/MOD
depuser : objdiruser
@$(MAKE) DO_DEP_USER=YES OBJDIR=$(OBJDIR_USER) filedepalluser
filedepalluser : $(DEP_ALL_USER)
find $(OBJDIR_USER) -follow -name "*.D" > $(OBJDIR_USER)/fileuser
cat $(OBJDIR_USER)/fileuser | sed -e "s!$(OBJDIR_USER)!$(OBJDIR_MASTER)!g" > $(OBJDIR_USER)/filenotmaster
grep -F -v -f $(OBJDIR_USER)/filenotmaster $(OBJDIR_MASTER)/filemaster > $(OBJDIR_USER)/filemaster
rm -f $(OBJDIR_USER)/filedepalluser
cat $(OBJDIR_USER)/fileuser $(OBJDIR_USER)/filemaster | xargs cat >> $(OBJDIR_USER)/filedepalluser
libuser : depuser

ESCOBAR MUNOZ Juan
committed
@$(MAKE) -I$(B)$(OBJDIR_USER) DO_COMP_USER=YES OBJDIR=$(OBJDIR_USER) objuser
objuser : $(OBJS_LISTE_USER)
$(LIB_USER) : $(OBJS_LISTE_USER)
rm -f $(LIB_USER)
cd $(OBJDIR_MASTER) ; find . -name "*.o" | xargs $(AR) r $(LIB_USER)
cd $(OBJDIR_USER) ; find . -name "*.o" | xargs $(AR) r $(LIB_USER)
proguser : libuser

ESCOBAR MUNOZ Juan
committed
@$(MAKE) -I$(B)$(OBJDIR_USER) DO_COMP_USER=YES \
OBJDIR=$(OBJDIR_USER) \
LIB_MNH=$(LIB_USER) \
PROG_DIR="$(OBJDIR_USER) $(OBJDIR_MASTER)" \
$(PROG_LIST) # cleanlibuser
cleanlibuser :
rm -f $(LIB_USER)
installuser :

ESCOBAR MUNOZ Juan
committed
@$(MAKE) -I$(B)$(OBJDIR_USER) DO_COMP_USER=YES OBJDIR=$(OBJDIR_USER) install
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
cleanproguser :
test -d $(OBJDIR_USER) && cd $(OBJDIR_USER) && rm -f $(PROG_LIST)
##########################################################
# #
# EXTRA LIB : GRIBEX #
# #
##########################################################
ifneq "$(findstring 64,$(shell uname -m))" ""
A64=A64
endif
#$(LIB_GRIBEX) : libmaster
$(LIB_GRIBEX) :
ifneq "$(ARCH)" "SX8"
- [ ! -d $(DIR_GRIBEX)_$(ARCH) ] && cp -Rp $(DIR_GRIBEX) $(DIR_GRIBEX)_$(ARCH)
cd $(DIR_GRIBEX)_$(ARCH) && $(MAKE) -j 1 ARCH=$(TARGET_GRIBEX) R64=$(R64_GRIBEX) CNAME=$(CNAME_GRIBEX) A64=$(A64)
else
ifneq "$(findstring brodie,$(shell uname -n))" ""
#brodie
- [ ! -d $(DIR_GRIBEX)_$(ARCH) ] && mkdir -p ${workdir}/$(DIR_GRIBEX)_$(ARCH) \
&& ln -s ${workdir}/$(DIR_GRIBEX)_$(ARCH) $(DIR_GRIBEX)_$(ARCH)
cp /home/rech/mnh/rmnh007/aeronec/mesonh/binaries/libemosR64.a $(DIR_GRIBEX)_$(ARCH)/libgribexR64.a
else
#tori & yuki
- [ ! -d $(DIR_GRIBEX)_$(ARCH) ] && mkdir -p $(DIR_GRIBEX)_$(ARCH)
cp /usr/local/SX/lib/libgribex.a $(DIR_GRIBEX)_$(ARCH)/libgribexR64.a
endif
endif
gribex_clean :
- [ -d $(DIR_GRIBEX)_$(ARCH) ] && rm -fr $(DIR_GRIBEX)_$(ARCH)
##########################################################
# #
# EXTRA LIB : GRIBAPI #
# #
##########################################################
ifneq "$(findstring 64,$(shell uname -m))" ""
A64=A64
endif
gribapi : $(GRIBAPI_INC)
$(GRIBAPI_INC) :
cd ${DIR_GRIBAPI} && ./configure --disable-shared --disable-jpeg --prefix=${GRIBAPI_PATH} FC="$(FC)" ${GRIBAPI_CONF} && $(MAKE) -j 1 clean && $(MAKE) -j 1 && $(MAKE) -j 1 install && $(MAKE) -j 1 clean
gribapi_clean :
- [ -d ${GRIBAPI_PATH} ] && rm -fr ${GRIBAPI_PATH}
##########################################################
# #
# EXTRA LIB : NETCDF #
# #
##########################################################
ifeq "$(VER_CDF)" "CDFAUTO"
#

WAUTELET Philippe
committed
HDF_OPT = ${OPT_BASE_I4:-$OPT_BASE}
NETCDF_OPT = ${OPT_BASE_I4:-$OPT_BASE}
#

ESCOBAR MUNOZ Juan
committed
cd ${DIR_HDF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --with-zlib=no \

WAUTELET Philippe
committed
FC="$(FC)" FCFLAGS="$(HDF_OPT)" CPPFLAGS="-DpgiFortran" ${HDF_CONF} && make && make install && $(MAKE) -j 1 clean

ESCOBAR MUNOZ Juan
committed
cd ${DIR_CDF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --disable-cxx --disable-f90 --disable-dap \

WAUTELET Philippe
committed
FC="$(FC)" FCFLAGS="$(NETCDF_OPT)" CPPFLAGS="-DpgiFortran ${INC_NETCDF}" ${CDF_CONF} LDFLAGS=" -L${CDF_PATH}/lib64" && make && make install && $(MAKE) -j 1 clean
cleanmaster : cleancdf
cleancdf :
- [ -d ${CDF_PATH} ] && rm -fr ${CDF_PATH}
endif
##########################################################
# #
# PROGRAM RULES #
# #
##########################################################
ifdef PROG_LIST
prog : lib $(LIB_GRIBEX)

ESCOBAR MUNOZ Juan
committed
@$(MAKE) -I$(B)$(OBJDIR) DEP=YES $(PROG_LIST)
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
install : $(patsubst %,%-${ARCH_XYZ},$(PROG_LIST))
$(PROG_LIST) : OBJ_PROG=$(shell find $(PROG_DIR) -follow -type f -name "spll_*.f*" \
| xargs grep -l -E -i "^[[:space:]]*program *$@" | sed -e 's/\.f.*/.o/g' | head -1 \
| xargs basename | xargs -i find $(PROG_DIR) -follow -name {} -print | head -1 )
$(PROG_LIST) : $(LIB_MNH) $(LIB_GRIBEX)
# echo OBJ_PROG=$(OBJ_PROG)
$(F90) $(LDFLAGS) -o $(OBJDIR)/$@ $(OBJ_PROG) $(LIB_MNH) $(LIBS)
%-${ARCH_XYZ} :%
ifndef DO_COMP_USER
ln -sf $(OBJDIR)/$(*F) $(SRC_MESONH)/exe/$(*F)-${ARCH_XYZ}
else
# ln -sf $(OBJDIR)/$(*F) $(SRC_MESONH)/exe/$(*F)-${ARCH_XYZ}-${VER_USER}
ln -sf $(OBJDIR)/$(*F) $(SRC_MESONH)/exe/$(*F)${XYZ}
endif
rm -f $(SRC_MESONH)/exe/$(*F)_${ARCH_XYZ}~
##########################################################
# #
# EXAMPLES RULES #
# #
##########################################################
PWD_KTEST=$(SRC_MESONH)/MY_RUN/KTEST
EXAMPLES=001_2Drelief 002_3Drelief 003_KW78 004_Reunion 007_16janvier
examples : $(EXAMPLES)
EXAMPLES_CHIMIE=009_ICARTT 011_KW78CHEM
chimie : $(EXAMPLES_CHIMIE)
$(EXAMPLES) $(EXAMPLES_CHIMIE) 012_dust :
cd $(PWD_KTEST)/$@ ; run_$@
EXAMPLES_NCL=004_Reunion 007_16janvier
ncl1_examples : $(patsubst %,%_ncl1,$(EXAMPLES_NCL))
ncl2_examples : $(patsubst %,%_ncl2,$(EXAMPLES_NCL))
examplesclean : $(patsubst %,%_clean,$(EXAMPLES))
%_ncl1 :
cd $(PWD_KTEST)/$(*F) ; run_$(*F) all_ncl_extractdia
%_ncl2 :
cd $(PWD_KTEST)/$(*F) ; run_$(*F) all_ncl_lfi2cdf
%_clean :
cd $(PWD_KTEST)/$(*F) ; $(MAKE) clean
#
# rules to remove spll* source on MASTER directory
#
purgelist : $(patsubst %,purge_%,$(notdir $(PL)))
purge_%.f90 :
cd $(OBJDIR_MASTER) ; grep -l "depfile:$(*F).D" *.f* | xargs rm -f ; rm -f $(*F).D ; rm -f filedepallmaster filemaster
purge_%.fx90 :
cd $(OBJDIR_MASTER) ; grep -l "depfile:$(*F).D" *.f* | xargs rm -f ; rm -f $(*F).D ; rm -f filedepallmaster filemaster
purge_%.f :
cd $(OBJDIR_MASTER) ; grep -l "depfile:$(*F).D" *.f* | xargs rm -f ; rm -f $(*F).D ; rm -f filedepallmaster filemaster
#
# rules to remove spll* source on USER directory
#
purgelistu : $(patsubst %,purgeu_%,$(notdir $(PL)))
purgeu_%.f90 :
cd $(OBJDIR_USER) ; grep -l "depfile:$(*F).D" *.f* | xargs rm -f ; rm -f $(*F).D ; rm -f filedepalluse fileuser
purgeu_%.fx90 :
cd $(OBJDIR_USER) ; grep -l "depfile:$(*F).D" *.f* | xargs rm -f ; rm -f $(*F).D ; rm -f filedepalluse fileuser
purgeu_%.f :
cd $(OBJDIR_USER) ; grep -l "depfile:$(*F).D" *.f* | xargs rm -f ; rm -f $(*F).D ; rm -f filedepalluse fileuser
stat_f90 :
cd $(OBJDIR_MASTER) ; find . -name "*.f90" | wc -l
stat_o :
cd $(OBJDIR_MASTER) ; find . -name "*.o" | wc -l
endif
cleanuser :
test -d $(OBJDIR_USER) && rm -fr $(OBJDIR_USER)
clean : examplesclean gribex_clean
rm -fr $(OBJDIR_ROOT)
cleanprog :
cd $(OBJDIR_ROOT) ; rm -f $(PROG_LIST)
print :
@echo $(VAR)=$($(VAR))
ARFLAGS=r
#(%.o): %.o
# $(AR) $(ARFLAGS) $(OBJDIR)/$(@F) $(*F).o
# $(RM) $(*F).o
#
# GENERATION OF DEPENDANCE FILES : *.D
#
%.D:%.F90
$(CPP) $(INC) $(CPPFLAGS) $< > $(OBJDIR)/$(*F).f90
spll $(NSOURCE) $(OBJDIR)/$(*F).f90
rm -f $(OBJDIR)/$(*F).f90
%.D:%.f90
$(CPP) $(INC) $(CPPFLAGS) $< > $(OBJDIR)/$(*F).f90
spll $(NSOURCE) $(OBJDIR)/$(*F).f90
rm -f $(OBJDIR)/$(*F).f90
%.D:%.fx90
$(CPP) $(INC) $(CPPFLAGS) $< > $(OBJDIR)/$(*F).fx90
spll $(NSOURCE) $(OBJDIR)/$(*F).fx90
rm -f $(OBJDIR)/$(*F).fx90
%.D:%.f
$(CPP) $(INC) $(CPPFLAGS) $< > $(OBJDIR)/$(*F).f
spll $(NSOURCE) $(OBJDIR)/$(*F).f
rm -f $(OBJDIR)/$(*F).f
#
# GENERATION OF OBJET FILES : *.o
#
%.o:%.f90
$(F90) -I$(OBJDIR) $(INC) -c $(F90FLAGS) $<
-mv $(*F).o $(OBJDIR)/. || echo OK $(*F).o
%.o:%.f
$(F77) -I$(OBJDIR) $(INC) -c $(F77FLAGS) $<
-mv $(*F).o $(OBJDIR)/. || echo OK $(*F).o
%.o:%.fx90
cp $< $(OBJDIR)/$(*F).f
$(FX90) -I$(OBJDIR) $(INC) -c $(FX90FLAGS) $(OBJDIR)/$(*F).f
-mv $(*F).o $(OBJDIR)/. || echo OK $(*F).o
%.o : %.c
$(CC) $(INC) $(CFLAGS) $(CPPFLAGS) -c $< -o $(OBJDIR)/$(*F).o
-mv $(*F).o $(OBJDIR)/. || echo OK $(*F).o
ifeq "$(DO_COMP_MASTER)" "YES"
include filedepallmaster
endif
ifeq "$(DO_COMP_USER)" "YES"
include filedepalluser
endif