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

Last change on this file since 249 was 249, checked in by hozdoba, 13 years ago

Ajout d'une partie d'Interface fortran pour la version 4
Ajout des sorties netcdf4 pour la version 4

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