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

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