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

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