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

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