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

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