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

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