source: XMLIO_V2/dev/dev_rv/Makefile.wk @ 199

Last change on this file since 199 was 196, checked in by hozdoba, 13 years ago
File size: 13.8 KB
RevLine 
[142]1################################################################################
2###################        Projet xios - xmlioserver       #####################
3#                                                                              #
[187]4#                   * © OZDOBA Hervé (herve.ozdoba@lsce.ipsl.fr) *             #
[144]5#                   * © MEURDESOIF Yann (yann.meurdesoif@cea.fr) *             #
[142]6#                                    * Avril 2010 - Octobre 2011 *             #
7#                                                                              #
8################################################################################
9
10################################# Configuration ################################
11
12DEBUG     = yes
13MCOLOR    = no
14SHOWCMD   = yes
15VTK       = no
16GUI       = no
[187]17NPROC     = 6
[185]18CSUITE    = gnu
[150]19PFORME    = fedora-wk
[142]20FORTEXT   = .f90
21DEV_PATH  = $(PWD)
22
[157]23ifeq ($(HOSTNAME), lsce4063.extra.cea.fr)
[182]24        PFORME = fedora-wk
[157]25endif
[154]26
27ifeq ($(HOST), mercure01)
[182]28        CSUITE = sx
29        PFORME = sx8-mercure-wk
[154]30endif
31
[186]32ifeq ($(HOSTNAME), platine1076)
[196]33        CSUITE = gnu
[186]34        PFORME = platine-wk
35endif
36
37
[142]38ifeq ($(SHOWCMD), no)
[144]39        A = @
[142]40endif
41
42#################################### Chemins ###################################
43
44ifeq ($(PFORME), platine-wk)
[144]45        NETCDF_PATH = /applications/netcdf-4.1.1
46        INTEL_PATH  =
[157]47        BOOST_PATH  = $(DEV_PATH)/extra/boost-1.44
48        RXML_PATH   = $(DEV_PATH)/extra/rapidxml-1.13
[144]49        HDF5_PATH   = /applications/hdf5-1.8.5
[146]50        MPI_PATH    = /opt/mpi/mpibull2-1.3.9-18.s
[157]51
[146]52        DEFINE     += -D MPIBULL_SKIP_MPICXX
[142]53endif
54
[149]55ifeq ($(PFORME), sx8-mercure-wk)
[158]56        NETCDF_PATH = $(DEV_PATH)/netcdf4
[157]57        INTEL_PATH  =
[158]58        BOOST_PATH  = $(DEV_PATH)/extra/boost-1.44
[157]59        RXML_PATH   = $(DEV_PATH)/extra/rapidxml-1.13
[158]60        HDF5_PATH   = $(DEV_PATH)/hdf5
[157]61        MPI_PATH    = /applications/mpisx-8.0.10
[149]62endif
63
[142]64ifeq ($(PFORME), fedora-wk)
65        NETCDF_PATH = $(DEV_PATH)/netcdf4
66        INTEL_PATH  = /work/intel/composerxe
[157]67        BOOST_PATH  = $(DEV_PATH)/extra/boost-1.44
68        RXML_PATH   = $(DEV_PATH)/extra/rapidxml-1.13
[142]69        HDF5_PATH   = $(DEV_PATH)/hdf5
70        MPI_PATH    = /usr/lib/openmpi
71endif
72
73######################## Outils de compilations standard #######################
74
75COMPTOOL = $(CSUITE)-$(PFORME)
76VERSTR   = version $(CSUITE)
77
[149]78
79ifeq ($(COMPTOOL), sx-sx8-mercure-wk)
[157]80        CDEP   = $(A)g++
[158]81        CCPP   = $(A)sxc++
[157]82        CFORT  = $(A)sxf90
83        LINK   = $(A)sxmpif90 -nofor-main
84        AR     = $(A)sxar
85        T2F    = # indisponible
86        RMDIR  = $(A)rm -rf
87        REMOVE = $(A)rm -f
[158]88        COPY   = $(A)cp -f
[157]89        DOX    = # indisponible
90        TAR    = # indisponible
91        GZIP   = # indisponible
92        EXNET  = # indisponible
93        MPIRUN = $(A)$(MPI_PATH)/bin/mpirun
[149]94endif
95
96
[142]97ifeq ($(COMPTOOL), intel-platine-wk)
[149]98        CDEP   = $(A)icc
[144]99        CCPP   = $(A)icc
100        CFORT  = $(A)ifort
101        LINK   = $(A)$(MPI_PATH)/bin/mpif90 -nofor-main
102        AR     = $(A)ar
103        T2F    = # indisponible
104        RMDIR  = $(A)rm -rf
[146]105        REMOVE = $(A)rm -f 
[158]106        COPY   = $(A)cp -f
[144]107        DOX    = # indisponible
108        TAR    = # indisponible
109        GZIP   = # indisponible
110        EXNET  = # indisponible
111        MPIRUN = $(A)$(MPI_PATH)/bin/mpirun
[142]112endif
113
114ifeq ($(COMPTOOL), gnu-fedora-wk)
[149]115        CDEP   = $(A)g++
[144]116        CCPP   = $(A)g++
117        CFORT  = $(A)gfortran
118        LINK   = $(A)$(MPI_PATH)/bin/mpif90
119        AR     = $(A)ar
120        T2F    = $(A)txt2tags
121        RMDIR  = $(A)rm -rf
122        REMOVE = $(A)rm -f 
[158]123        COPY   = $(A)cp -f
[144]124        DOX    = $(A)doxygen -s
125        TAR    = $(A)tar -cvf
126        GZIP   = $(A)gzip -9 -q
127        EXNET  = $(A)firefox
128        MPIRUN = $(A)$(MPI_PATH)/bin/mpirun
[142]129endif
130
131ifeq ($(COMPTOOL), intel-fedora-wk)
[149]132        CDEP   = $(A)icc
[144]133        CCPP   = $(A)icc
134        CFORT  = $(A)ifort
135        LINK   = $(A)$(MPI_PATH)/bin/mpif90
136        AR     = $(A)ar
137        T2F    = $(A)txt2tags
138        RMDIR  = $(A)rm -rf
[146]139        REMOVE = $(A)rm -f 
[144]140        COPY   = $(A)cp
141        DOX    = $(A)doxygen -s
142        TAR    = $(A)tar -cvf
143        GZIP   = $(A)gzip -9 -q
144        EXNET  = $(A)firefox
145        MPIRUN = $(A)$(MPI_PATH)/bin/mpirun
[142]146endif
147
148################################ Sortie couleur ################################
149
150C_Black         = "\033[0;30m"
151C_Blue          = "\033[0;34m"
152C_Green         = "\033[0;32m"
153C_Cyan          = "\033[0;36m"
154C_Red           = "\033[0;31m"
155C_Purple        = "\033[0;35m"
156C_Brown         = "\033[0;33m"
157C_Light_Gray    = "\033[0;37m"
158C_Dark_Gray     = "\033[1;30m"
159C_Light_Blue    = "\033[1;34m"
160C_Light_Green   = "\033[1;32m"
161C_Light_Cyan    = "\033[1;36m"
162C_Light_Red     = "\033[1;31m"
163C_Light_Purple  = "\033[1;35m"
164C_Yellow        = "\033[1;33m"
165C_White         = "\033[1;37m"
166NO_COLOUR       = "\033[0m"
167
168ifeq ($(MCOLOR), yes)
169        COLORMSG = @echo -e "\033[1m" $1 $2 $(NO_COLOUR)
170else
171        COLORMSG = @echo $2
172endif
173
174############################# Répertoire du projet #############################
175
176OBJ_PATH  = $(DEV_PATH)/obj
177BIN_PATH  = $(DEV_PATH)/bin
178LIB_PATH  = $(DEV_PATH)/lib
[153]179SRC_PATH  = $(DEV_PATH)/src/xmlio
[142]180DOC_PATH  = $(DEV_PATH)/doc
181DEP_PATH  = $(DEV_PATH)/dep
[157]182INC_PATH  = $(DEV_PATH)/include
[142]183DATA_PATH = $(DEV_PATH)/data
184CONF_PATH = $(DEV_PATH)/conf
185SCRT_PATH = $(DEV_PATH)/script
186
187# Sous-répertoires des sources :
188
189FSRC_PATH = $(SRC_PATH)/fortran
190CSRC_PATH = $(SRC_PATH)/iface
191
[157]192CONF_PATH = $(SRC_PATH)/config
[142]193NODE_PATH = $(SRC_PATH)/node
194FUNC_PATH = $(SRC_PATH)/functor
195DATE_PATH = $(SRC_PATH)/date
196GUI_PATH  = $(SRC_PATH)/qt
197VTK_PATH  = $(SRC_PATH)/vtk
198INPT_PATH = $(SRC_PATH)/input
199OUPT_PATH = $(SRC_PATH)/output
200MNGR_PATH = $(SRC_PATH)/manager
201
202FAKE_PATH = $(SRC_PATH)/fake_client
203
204################################################################################
205
206VPATH = $(DEP_PATH):$(SRC_PATH):$(CSRC_PATH):$(NODE_PATH)\
207:$(FUNC_PATH):$(DATE_PATH):$(GUI_PATH):$(VTK_PATH):$(INPT_PATH)\
[157]208:$(OUPT_PATH):$(MNGR_PATH):$(FAKE_PATH):$(FSRC_PATH):$(CONF_PATH)
[142]209
210######################## Outils de traitements internes ########################
211
212CPPROC  = $(SCRT_PATH)/preprocess_cpp.sh
213F90ROC  = $(SCRT_PATH)/preprocess_f03.sh
214
215####################### Chemins vers la bibliothÚque BOOST #####################
216
[146]217INCLUDE    = -I $(BOOST_PATH)
[142]218
[157]219####################### Chemins vers la bibliothÚque RAPIDXML ##################
220
221INCLUDE   += -I $(RXML_PATH)
222
[142]223####################### Chemins vers la bibliothÚque VTK #######################
224
225ifeq ($(VTK), yes)
[144]226        INCLUDE += -I /usr/include/vtk
227        LIBS    += -lvtkCommon -lvtkIO -lvtkFiltering -lvtkRendering -lvtkHybrid
228        DEFINE  += -D XIOS_VTK
[142]229endif
230
231####################### Chemins vers la bibliothÚque NETCDF ####################
232
233NETCDF_BIN  = $(NETCDF_PATH)/bin
234NETCDF_LIB  = $(NETCDF_PATH)/lib
235NETCDF_INCL = $(NETCDF_PATH)/include
236
237HDF5_INCL   = $(HDF5_PATH)/include
238HDF5_LIB    = $(HDF5_PATH)/lib
239
[144]240LIBS_PATH  += -L $(NETCDF_LIB) -L $(HDF5_LIB)
241LIBS       += -lnetcdf -lhdf5_hl -lhdf5 -lz
242INCLUDE    += -I $(NETCDF_INCL)
[142]243
244####################### Chemins vers la bibliothÚque MPI #######################
245
[144]246MPI_LIB     = $(MPI_PATH)/bin
247MPI_LIB     = $(MPI_PATH)/lib
248MPI_INCL    = $(MPI_PATH)/include
[142]249
250ifeq ($(PFORME), fedora-wk)
251        MPI_INCL = /usr/include/openmpi-i386
252endif
253
[144]254LIBS_PATH   += -L $(MPI_LIB)
[146]255LIBS        += -lmpi
[144]256INCLUDE     += -I $(MPI_INCL)
257FFLAGS      += -I $(MPI_INCL)
[142]258
[146]259
260ifeq ($(PFORME), fedora-wk)
[157]261        LIBS        += -lmpi_cxx
[146]262endif
263
[142]264################################ VARIABLES #####################################
265
[157]266INCLUDE += -I $(INC_PATH)
[146]267DEFINE  += -D XIOS_LIBRARY
[142]268
[146]269LIBS      += -lstdc++
[142]270
271ifeq ($(COMPTOOL), intel-fedora-wk)
272        LIBS_PATH += -L $(INTEL_PATH)/lib
273        LIBS      += -lifcore -lintlc
274endif
275
276NODEPS   = clean clean-all
277
278FFLAGS  += -D XIOS_LIBRARY
[149]279CFLAGS   = $(DEFINE) $(INCLUDE)
[142]280LDFLAGS  = $(LIBS_PATH) $(LIBS)
281
282ifeq ($(CSUITE), intel)
283        FFLAGS  += -module $(LIB_PATH)
[171]284        CFLAGS  += -ansi  -diag-disable 1125 -diag-disable 279
[142]285endif
286
287ifeq ($(CSUITE), gnu)
288        FFLAGS += -J $(LIB_PATH)
[149]289        CFLAGS += -ansi -W -Wall -Wno-unused-parameter -Wno-long-long -Wno-deprecated
[142]290endif
291
[158]292ifeq ($(CSUITE), sx)
293        DEF_SX  = -D BOOST_NO_IS_ABSTRACT -D BOOST_NO_RVALUE_REFERENCES -D BOOST_NO_STATIC_ASSERT
294        DEFLAGS = $(DEFINE) $(INCLUDE) $(DEF_SX)
295        CFLAGS += -K exceptions -K rtti -Xp -size_t64 $(DEF_SX)
296        FFLAGS += -f2003 cbind -size_t64
297else
298        DEFLAGS = $(CFLAGS)
299endif
300
[142]301ifeq ($(DEBUG), yes)
302        CFLAGS += -D XIOS_DEBUG -g
303endif
304
305EXENAME   = $(BIN_PATH)/xmlioserver.exe
306LIBSTATIC = $(LIB_PATH)/libxmlioserver.a
307
308################################### SOURCES ####################################
309
310# Source de l'interface C (contenue dans dans le dossier src/iface)
311ICSOURCE = interface
312
313# Sources de l'interface fortran (contenues dans le dossier src/fortran)
314IFSOURCE = ixmlioserver
315
316# Sources de la bibliothÚque (contenues dans le dossier src)
317LSOURCE  = object exception                                 \
318           date calendar duration calendar_util             \
319           attribute attribute_map attribute_template       \
320           object_factory group_factory                     \
321           indent xml_node xml_parser                       \
322           buffer linear_buffer circular_buffer             \
323           buffer_list buffer_pair                          \
324           data_treatment data_output                       \
[190]325           rebuild functor client server configure
[142]326
327# Sources des gestionnaires (contenues dans le dossier manager)
328MSOURCE  = tree_manager mpi_manager xios_manager
329
330# Sources pour le traitement des noeuds xml (contenues dans le dossier node)
331NSOURCE  = axis domain field file grid context
332
[144]333# Sources pour les opérations à effectuer sur les champs (contenues dans le dossier functor)
[142]334FSOURCE  = once instant average
335
336# Sources contenant les différents type de calendriers (contenues dans le dossier date)
337DSOURCE = julian gregorian noleap allleap d360
338
339# Sources pour l'interface graphique (contenues dans le dossier qt)
340ifeq ($(GUI), yes)
341        QSOURCE = # vidé #
342endif
343
344# Sources pour le lecteur vtk (contenues dans le dossier vtk)
345ifeq ($(VTK), yes)
346        VSOURCE = lscereader
347endif
348
349# Sources pour les entrées (contenues dans le dossier input)
350ISOURCE = inetcdf4 nc4_data_input
351
352# Sources pour les sorties (contenues dans le dossier output)
353OSOURCE = onetcdf4 nc4_data_output
354
[157]355# Source des faux clients
[142]356TSOURCE = fake_nemo fake_lmdz fake_orchidee
357
358# Nom du fichier contenant les points d'entrée des programmes
359MAINNAME = main
360
361DOC_T2T = $(wildcard *.t2t)
362COM_T2T = $(patsubst %.t2t,%.html,$(DOC_T2T))
363
364##############################  Modifications ##################################
365
[157]366AHEADERS  =  \
367$(notdir $(wildcard $(SRC_PATH)/*/*.conf))\
368$(notdir $(wildcard $(SRC_PATH)/*/*.hpp))\
369$(notdir $(wildcard $(SRC_PATH)/*.hpp))
370           
371HEADERS   = $(addprefix $(INC_PATH)/, $(AHEADERS))
372
[142]373ELEMS_FOR = $(TSOURCE) $(IFSOURCE)
374           
375ELEMS_CPP = $(ICSOURCE) $(OSOURCE) $(ISOURCE) $(LSOURCE) \
376            $(VSOURCE)  $(QSOURCE) $(DSOURCE) $(FSOURCE) \
377            $(NSOURCE)  $(MSOURCE)
378
379ELEMS_ALL = $(ELEMS_CPP) $(ELEMS_FOR)
380             
381OBJECTS = $(addprefix $(OBJ_PATH)/, $(addsuffix .o, $(ELEMS_ALL))) $(OBJ_PATH)/impi_interface.o
382DEPENDS = $(addprefix $(DEP_PATH)/, $(addsuffix .d, $(ELEMS_CPP)))
383
384################################### RÚgles #####################################
385all: depend build
386
387build: preproc $(EXENAME)
388
389.PHONY: t2t
390t2t: $(COM_T2T)
391
392.PHONY: run
393run: all clean-dat
394        $(call COLORMSG, $(C_White),"Exécution du serveur d'E/S de l'IPSL ($(VERSTR) C++) ...")
395        $(MPIRUN) -np $(NPROC) $(EXENAME)
396
397.PHONY: depend
[157]398depend: preproc $(DEPENDS) cheaders
[142]399
[157]400.PHONY: cheaders
401cheaders: $(HEADERS)
402
[142]403.PHONY: preproc
404preproc : $(FSRC_PATH)/$(IFSOURCE)$(FORTEXT) $(CSRC_PATH)/$(ICSOURCE).cpp
405
406.PHONY: clean-depend
407clean-depend:
408        $(REMOVE) $(DEP_PATH)/*.d
[157]409        $(REMOVE) $(DEP_PATH)/mark
[142]410
411clean-t2t:
412#$(REMOVE) $(COM_T2T)
413
[157]414clean-h:
415        $(REMOVE) $(INC_PATH)/*.hpp
416        $(REMOVE) $(INC_PATH)/*.conf
417       
[142]418clean-doc: clean-t2t
419        $(RMDIR)  $(DOC_PATH)/html
420        $(REMOVE) $(DEV_PATH)/doxygen.log
421
422clean-exe:
423        $(REMOVE) $(BIN_PATH)/*.exe
424
425clean-lib:
426        $(REMOVE) $(LIB_PATH)/*.a
427
428clean-mod:
429        $(REMOVE) $(LIB_PATH)/*.mod
430
431clean-dll:
432        $(REMOVE) $(BIN_PATH)/*.dll
433
434clean-gen:
435        $(REMOVE) $(SRC_PATH)/iface/interface.cpp
436        $(REMOVE) $(SRC_PATH)/fortran/ixmlioserver$(FORTEXT)
437
438clean-obj:
439        $(REMOVE) $(OBJ_PATH)/*.o
440
441clean-dat:
442        $(REMOVE) $(DATA_PATH)/*.dat
[174]443#$(REMOVE) $(DATA_PATH)/*.bin
[142]444        $(REMOVE) $(DATA_PATH)/*.nc
445        $(REMOVE) $(DATA_PATH)/def/*
446
447.PHONY: clean
448clean : clean-obj    \
449        clean-mod    \
450        clean-gen    \
[157]451        clean-h      \
[142]452        clean-depend
453
454
455.PHONY: clean-all
456clean-all : clean     \
457            clean-exe \
458            clean-dll \
459            clean-dat \
460            clean-lib \
461            clean-doc
462.PHONY: doc
463doc: t2t
464        $(DOX)
465        $(REMOVE) $(DOC_PATH)/doc.tar.gz
466        $(TAR)    $(DOC_PATH)/doc/doc.tar doc/html > $(DEV_PATH)/tar_output
467        $(REMOVE) $(DEV_PATH)/tar_output
468        $(GZIP)   $(DOC_PATH)/doc/doc.tar
469
470.PHONY: show-doc
471show-doc: doc
472        $(EXNET) $(DOC_PATH)/doc/html/index.html
473
474################################ Compilation ###################################
475
476$(OBJ_PATH)/$(MAINNAME)_server.o: $(DEP_PATH)/$(MAINNAME)_server.d
477
478$(EXENAME): $(OBJ_PATH)/$(MAINNAME)_server.o $(LIBSTATIC)
479        $(call COLORMSG, $(C_Purple),"Génération du serveur d'E/S de l'IPSL ($(VERSTR) C++) ...")
480        $(LINK) -o $@ $^ $(LDFLAGS)
[157]481
[142]482$(LIBSTATIC) : $(OBJECTS)
483        $(call COLORMSG, $(C_Green),"Génération de l'archive de la bibliothÚque d'E/S de l'IPSL...")
484        $(AR) crs $@ $^
485
486################################ Dépendances ###################################
487
488
489ifeq (0, $(words $(findstring $(MAKECMDGOALS), $(NODEPS))))
490-include $(DEPENDS)
491endif
492
493
494################################################################################
495
496%.html: %.t2t
497        $(T2F) -t html $<
498
499# Preproc
500$(FSRC_PATH)/%$(FORTEXT): %.f03.in $(FSRC_PATH)/macro.inc
501        $(F90ROC) $@ $<
502
503$(CSRC_PATH)/%.cpp: %.cpp.in $(CSRC_PATH)/macro.inc
504        $(CPPROC) $@ $<
505
506# Dépendances
[157]507$(DEP_PATH)/mark: $(HEADERS)
508        @touch $@
509
510$(DEP_PATH)/%.d: %.cpp $(DEP_PATH)/mark
[158]511        $(CDEP) $(DEFLAGS) -D XIOS_NO_EXTERN -MT $(OBJ_PATH)/$(patsubst %.d,%.o,$(@F)) -MM -MF $@ $<
[142]512
[157]513# Entêtes cpp
514$(INC_PATH)/%.hpp: %.hpp
515        $(COPY) $< $@
516
517$(INC_PATH)/%.conf: %.conf
518        $(COPY) $< $@
519
[142]520# Objets cpp
521$(OBJ_PATH)/%.o: %.cpp %.d
522        $(CCPP) $(CFLAGS) -o $@ -c $<
523
524# Objets fortran
525$(FSRC_PATH)/%.f03: %.f90
526        $(COPY) $< $@
527
528$(FAKE_PATH)/%.f03: %.f90
529        $(COPY) $< $@
530
531$(LIB_PATH)/%.mod: $(OBJ_PATH)/%.o
532
533$(OBJ_PATH)/%.o: $(FSRC_PATH)/%$(FORTEXT) 
534        $(CFORT) $(FFLAGS) -o $@ -c $<
535
536$(OBJ_PATH)/%.o: $(FAKE_PATH)/%$(FORTEXT) $(OBJ_PATH)/ixmlioserver.o
537        $(CFORT) $(FFLAGS) -o $@ -c $<
538
539#################################### FIN #######################################
Note: See TracBrowser for help on using the repository browser.