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

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