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

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