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

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