#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence #MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt #MNH_LIC for details. version 1. ########################################################## # # # MACRO : dependance_flist # # generate the dependance list for ALL fortran # # "*.f*" files # # searching in PATH=$(1) # ########################################################## # dependance_flist = $(notdir $(shell find $(1) -follow -type f \ -name '*.f' -o -name '*.f90' -o -name '*.fx90' -o -name '*.F90'\ | grep -v ',v' | sed -e 's/\.f.*/.D/g' -e 's/\.F.*/.D/g' )) obj_flist = $(notdir $(shell find $(1) -follow -type f \ -name 'spll_*.f*' | sed -e 's/\..*/.o/g' )) # ########################################################## # # # COMPILER & ARCHITECTURE CONFIGURATION # # # ########################################################## # include Rules.$(ARCH)$(F).mk # ########################################################## ########################################################## ########################################################## # # # DONT MODIFY LINES AFTER THIS !!!!!!!!!!!!! # # # ########################################################## ########################################################## ########################################################## ########################################################## # # # AUTOMATIQUE DEPENDANCE GENERATION !!!!!!!!!!!!! # # # # "*.D" files contain dependance deduceed # # form all "*.f*" FORTRAN sources files # # # # "use" key word # # --> dependance on "*.mod" module files # # "module" key word key word # # --> creation of"*.mod" module files # # # # The "*.D" list of files is contructed from every # # directories of fortran sources : # # ---> user, master , bugfix , etc... # # with or without RCS version control # # # # The "*.D" list is reconstructed automaticaly # # by the commande "spll" , each time a FORTRAN source # # are modified or added . # # # # All modification are allowed !!!!! # # adding new subroutines # # or # # adding new modules # # # # REM : if during modification, you deleting some # # FORTRAN subroutines you must also deleted the # # "spll_*.o" files created by this one by hand # # to avoid potential link problems # # # ########################################################## ########################################################## # # # DEP_MASTER : Automatique --> # # Dependance file of MASTER source # # # ########################################################## # OBJDIR_MASTER=$(OBJDIR_ROOT)/MASTER DEP_MASTER= $(call dependance_flist,$(DIR_MASTER)) # # init VPATH depending on compilation phase # ifdef DO_DEP_MASTER VPATH += $(shell find $(DIR_MASTER) -follow -type d ) VPATH += $(OBJDIR_MASTER) endif # ifdef DO_COMP_MASTER VPATH += $(OBJDIR_MASTER) $(OBJDIR_MASTER)/MOD endif # ########################################################## # # # DEP_USER : Automatique --> # # Dependance file of MY source # # # ########################################################## # ifdef VER_USER OBJDIR_USER=$(OBJDIR_ROOT)/$(VER_USER) # # init VPATH depending on compilation phase # ifdef DO_DEP_USER DEP_USER= $(call dependance_flist,$(DIR_USER)) VPATH += $(shell find $(DIR_USER) -follow -type d ) VPATH += $(OBJDIR_USER) endif # ifdef DO_COMP_USER VPATH += $(OBJDIR_USER) $(OBJDIR_USER)/MOD $(OBJDIR_MASTER) $(OBJDIR_MASTER)/MOD INC += -I$(B)$(OBJDIR_USER)/MOD -I$(B)$(OBJDIR_MASTER)/MOD endif # endif ########################################################## # # # VPATH ADJUSTEMENT : # # # ########################################################## # # #VPATH := $(filter-out $(VPATH_EXCLUDE),$(VPATH)) # ########################################################## # # # OBJS : all *.o to compile # # # ########################################################## # # MASTER # OBJS_LISTE_MASTER := $(OBJS_LISTE_MASTER) $(notdir $(shell find $(OBJDIR_MASTER) -follow -type f -name "spll_*.f*" | sed -e 's/\..*/.o/g' )) #OBJS_LISTE_MASTER := $(OBJS_LISTE_MASTER) $(obj_flist $(OBJDIR_MASTER)) # OBJS_LISTE_MASTER := $(sort $(filter-out $(IGNORE_OBJS),$(OBJS_LISTE_MASTER))) # LIB_MASTER=$(OBJDIR_MASTER)/$(LIB_OBJS_ROOT)-MASTER.a # # USER # #ifdef DO_COMP_USER OBJS_LISTE_USER := $(OBJS_LISTE_USER) $(notdir $(shell find $(OBJDIR_USER) -follow -type f -name "spll_*.f*" | sed -e 's/\..*/.o/g' )) #OBJS_LISTE_USER := $(OBJS_LISTE_USER) $(obj_flist $(OBJDIR_USER)) # OBJS_LISTE_USER := $(sort $(filter-out $(IGNORE_OBJS), $(OBJS_LISTE_USER) $(OBJS_LISTE_MASTER) )) # LIB_USER=$(OBJDIR_USER)/$(LIB_OBJS_ROOT)-$(VER_USER).a #endif ########################################################## # # # DEP_ALL : All dependance *.D to generate # # # ########################################################## # DEP_ALL_MASTER = $(sort $(filter-out $(IGNORE_DEP_MASTER),$(DEP_MASTER)) ) # DEP_ALL_USER = $(sort $(filter-out $(IGNORE_DEP_USER) ,$(DEP_USER)) ) # .PHONY : clean all objdir objdirmaster depall objs lib prog print .DELETE_ON_ERROR: .SUFFIXES: .SUFFIXES: .o .f90 .f .fx90 .mod .D .a .INTERMEDIATE: $(LIB_MASTER) ########################################################## # # # MASTER RULES # # # ########################################################## all : gribapi progmaster objdirmaster : $(OBJDIR_MASTER)/.dummy $(OBJDIR_MASTER)/.dummy : -mkdir -p $(OBJDIR_MASTER)/.dummy -mkdir -p $(OBJDIR_MASTER)/MOD depmaster : objdirmaster @$(MAKE) DO_DEP_MASTER=YES OBJDIR=$(OBJDIR_MASTER) filedepallmaster ifeq "$(VER_CDF)" "CDFAUTO" depmaster : cdf endif depmaster : gribapi filedepallmaster : $(DEP_ALL_MASTER) find $(OBJDIR_MASTER) -follow -name "*.D" > $(OBJDIR_MASTER)/filemaster rm -f $(OBJDIR_MASTER)/filedepallmaster cat $(OBJDIR_MASTER)/filemaster | xargs cat >> $(OBJDIR_MASTER)/filedepallmaster libmaster : depmaster @$(MAKE) -I$(B)$(OBJDIR_MASTER) DO_COMP_MASTER=YES OBJDIR=$(OBJDIR_MASTER) objmaster bibmaster : libmaster @$(MAKE) -I$(B)$(OBJDIR_MASTER) DO_COMP_MASTER=YES OBJDIR=$(OBJDIR_MASTER) $(LIB_MASTER) mv $(LIB_MASTER) $(subst lib-,bib-,$(LIB_MASTER)) objmaster : $(OBJS_LISTE_MASTER) $(LIB_MASTER) : $(OBJS_LISTE_MASTER) cd $(OBJDIR_MASTER) ; find . -follow -name '*.o'| xargs $(AR) r $(LIB_MASTER) progmaster : libmaster @$(MAKE) -I$(B)$(OBJDIR_MASTER) DO_COMP_MASTER=YES \ OBJDIR=$(OBJDIR_MASTER) \ LIB_MNH=$(LIB_MASTER) \ PROG_DIR=$(OBJDIR_MASTER) \ $(PROG_LIST) cleanlibmaster installmaster : libmaster @$(MAKE) -I$(B)$(OBJDIR_MASTER) DO_COMP_MASTER=YES OBJDIR=$(OBJDIR_MASTER) install cleanlibmaster : rm -f $(LIB_MASTER) cleanmaster : test -d $(OBJDIR_MASTER) && rm -fr $(OBJDIR_MASTER) cleanobjmaster : test -d $(OBJDIR_MASTER) && find $(OBJDIR_MASTER) -follow -name "*.o" -o -name "*.mod" | xargs rm cleanprogmaster : test -d $(OBJDIR_MASTER) && cd $(OBJDIR_MASTER) && rm -f $(PROG_LIST) ########################################################## # # # USER RULES # # # ########################################################## user : proguser objdiruser : $(OBJDIR_USER)/.dummy $(OBJDIR_USER)/.dummy : -mkdir -p $(OBJDIR_USER)/.dummy -mkdir -p $(OBJDIR_USER)/MOD depuser : objdiruser @$(MAKE) DO_DEP_USER=YES OBJDIR=$(OBJDIR_USER) filedepalluser filedepalluser : $(DEP_ALL_USER) find $(OBJDIR_USER) -follow -name "*.D" > $(OBJDIR_USER)/fileuser cat $(OBJDIR_USER)/fileuser | sed -e "s!$(OBJDIR_USER)!$(OBJDIR_MASTER)!g" > $(OBJDIR_USER)/filenotmaster grep -F -v -f $(OBJDIR_USER)/filenotmaster $(OBJDIR_MASTER)/filemaster > $(OBJDIR_USER)/filemaster rm -f $(OBJDIR_USER)/filedepalluser cat $(OBJDIR_USER)/fileuser $(OBJDIR_USER)/filemaster | xargs cat >> $(OBJDIR_USER)/filedepalluser libuser : depuser @$(MAKE) -I$(B)$(OBJDIR_USER) DO_COMP_USER=YES OBJDIR=$(OBJDIR_USER) objuser objuser : $(OBJS_LISTE_USER) $(LIB_USER) : $(OBJS_LISTE_USER) rm -f $(LIB_USER) cd $(OBJDIR_MASTER) ; find . -name "*.o" | xargs $(AR) r $(LIB_USER) cd $(OBJDIR_USER) ; find . -name "*.o" | xargs $(AR) r $(LIB_USER) proguser : libuser @$(MAKE) -I$(B)$(OBJDIR_USER) DO_COMP_USER=YES \ OBJDIR=$(OBJDIR_USER) \ LIB_MNH=$(LIB_USER) \ PROG_DIR="$(OBJDIR_USER) $(OBJDIR_MASTER)" \ $(PROG_LIST) # cleanlibuser cleanlibuser : rm -f $(LIB_USER) installuser : @$(MAKE) -I$(B)$(OBJDIR_USER) DO_COMP_USER=YES OBJDIR=$(OBJDIR_USER) install cleanproguser : test -d $(OBJDIR_USER) && cd $(OBJDIR_USER) && rm -f $(PROG_LIST) ########################################################## # # # EXTRA LIB : GRIBEX # # # ########################################################## ifneq "$(findstring 64,$(shell uname -m))" "" A64=A64 endif #$(LIB_GRIBEX) : libmaster $(LIB_GRIBEX) : ifneq "$(ARCH)" "SX8" - [ ! -d $(DIR_GRIBEX)_$(ARCH) ] && cp -Rp $(DIR_GRIBEX) $(DIR_GRIBEX)_$(ARCH) cd $(DIR_GRIBEX)_$(ARCH) && $(MAKE) -j 1 ARCH=$(TARGET_GRIBEX) R64=$(R64_GRIBEX) CNAME=$(CNAME_GRIBEX) A64=$(A64) else ifneq "$(findstring brodie,$(shell uname -n))" "" #brodie - [ ! -d $(DIR_GRIBEX)_$(ARCH) ] && mkdir -p ${workdir}/$(DIR_GRIBEX)_$(ARCH) \ && ln -s ${workdir}/$(DIR_GRIBEX)_$(ARCH) $(DIR_GRIBEX)_$(ARCH) cp /home/rech/mnh/rmnh007/aeronec/mesonh/binaries/libemosR64.a $(DIR_GRIBEX)_$(ARCH)/libgribexR64.a else #tori & yuki - [ ! -d $(DIR_GRIBEX)_$(ARCH) ] && mkdir -p $(DIR_GRIBEX)_$(ARCH) cp /usr/local/SX/lib/libgribex.a $(DIR_GRIBEX)_$(ARCH)/libgribexR64.a endif endif gribex_clean : - [ -d $(DIR_GRIBEX)_$(ARCH) ] && rm -fr $(DIR_GRIBEX)_$(ARCH) ########################################################## # # # EXTRA LIB : GRIBAPI # # # ########################################################## ifneq "$(findstring 64,$(shell uname -m))" "" A64=A64 endif gribapi : $(GRIBAPI_INC) $(GRIBAPI_INC) : cd ${DIR_GRIBAPI} && ./configure --disable-shared --disable-jpeg --prefix=${GRIBAPI_PATH} FC="$(FC)" ${GRIBAPI_CONF} && $(MAKE) -j 1 clean && $(MAKE) -j 1 && $(MAKE) -j 1 install && $(MAKE) -j 1 clean gribapi_clean : - [ -d ${GRIBAPI_PATH} ] && rm -fr ${GRIBAPI_PATH} ########################################################## # # # EXTRA LIB : NETCDF # # # ########################################################## ifeq "$(VER_CDF)" "CDFAUTO" # HDF_OPT = ${OPT_BASE_I4:-$OPT_BASE} NETCDF_OPT = ${OPT_BASE_I4:-$OPT_BASE} # cdf : $(CDF_INC) $(CDF_INC) : cd ${DIR_HDF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --with-zlib=no \ FC="$(FC)" FCFLAGS="$(HDF_OPT)" CPPFLAGS="-DpgiFortran" ${HDF_CONF} && make && make install && $(MAKE) -j 1 clean cd ${DIR_CDF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --disable-cxx --disable-f90 --disable-dap \ FC="$(FC)" FCFLAGS="$(NETCDF_OPT)" CPPFLAGS="-DpgiFortran ${INC_NETCDF}" ${CDF_CONF} LDFLAGS=" -L${CDF_PATH}/lib64" && make && make install && $(MAKE) -j 1 clean cleanmaster : cleancdf cleancdf : - [ -d ${CDF_PATH} ] && rm -fr ${CDF_PATH} endif ########################################################## # # # PROGRAM RULES # # # ########################################################## ifdef PROG_LIST prog : lib $(LIB_GRIBEX) @$(MAKE) -I$(B)$(OBJDIR) DEP=YES $(PROG_LIST) install : $(patsubst %,%-${ARCH_XYZ},$(PROG_LIST)) $(PROG_LIST) : OBJ_PROG=$(shell find $(PROG_DIR) -follow -type f -name "spll_*.f*" \ | xargs grep -l -E -i "^[[:space:]]*program *$@" | sed -e 's/\.f.*/.o/g' | head -1 \ | xargs basename | xargs -i find $(PROG_DIR) -follow -name {} -print | head -1 ) $(PROG_LIST) : $(LIB_MNH) $(LIB_GRIBEX) # echo OBJ_PROG=$(OBJ_PROG) $(F90) $(LDFLAGS) -o $(OBJDIR)/$@ $(OBJ_PROG) $(LIB_MNH) $(LIBS) %-${ARCH_XYZ} :% ifndef DO_COMP_USER ln -sf $(OBJDIR)/$(*F) $(SRC_MESONH)/exe/$(*F)-${ARCH_XYZ} else # ln -sf $(OBJDIR)/$(*F) $(SRC_MESONH)/exe/$(*F)-${ARCH_XYZ}-${VER_USER} ln -sf $(OBJDIR)/$(*F) $(SRC_MESONH)/exe/$(*F)${XYZ} endif rm -f $(SRC_MESONH)/exe/$(*F)_${ARCH_XYZ}~ ########################################################## # # # EXAMPLES RULES # # # ########################################################## PWD_KTEST=$(SRC_MESONH)/MY_RUN/KTEST EXAMPLES=001_2Drelief 002_3Drelief 003_KW78 004_Reunion 007_16janvier examples : $(EXAMPLES) EXAMPLES_CHIMIE=009_ICARTT 011_KW78CHEM chimie : $(EXAMPLES_CHIMIE) $(EXAMPLES) $(EXAMPLES_CHIMIE) 012_dust : cd $(PWD_KTEST)/$@ ; run_$@ EXAMPLES_NCL=004_Reunion 007_16janvier ncl1_examples : $(patsubst %,%_ncl1,$(EXAMPLES_NCL)) ncl2_examples : $(patsubst %,%_ncl2,$(EXAMPLES_NCL)) examplesclean : $(patsubst %,%_clean,$(EXAMPLES)) %_ncl1 : cd $(PWD_KTEST)/$(*F) ; run_$(*F) all_ncl_extractdia %_ncl2 : cd $(PWD_KTEST)/$(*F) ; run_$(*F) all_ncl_lfi2cdf %_clean : cd $(PWD_KTEST)/$(*F) ; $(MAKE) clean # # rules to remove spll* source on MASTER directory # purgelist : $(patsubst %,purge_%,$(notdir $(PL))) purge_%.f90 : cd $(OBJDIR_MASTER) ; grep -l "depfile:$(*F).D" *.f* | xargs rm -f ; rm -f $(*F).D ; rm -f filedepallmaster filemaster purge_%.fx90 : cd $(OBJDIR_MASTER) ; grep -l "depfile:$(*F).D" *.f* | xargs rm -f ; rm -f $(*F).D ; rm -f filedepallmaster filemaster purge_%.f : cd $(OBJDIR_MASTER) ; grep -l "depfile:$(*F).D" *.f* | xargs rm -f ; rm -f $(*F).D ; rm -f filedepallmaster filemaster # # rules to remove spll* source on USER directory # purgelistu : $(patsubst %,purgeu_%,$(notdir $(PL))) purgeu_%.f90 : cd $(OBJDIR_USER) ; grep -l "depfile:$(*F).D" *.f* | xargs rm -f ; rm -f $(*F).D ; rm -f filedepalluse fileuser purgeu_%.fx90 : cd $(OBJDIR_USER) ; grep -l "depfile:$(*F).D" *.f* | xargs rm -f ; rm -f $(*F).D ; rm -f filedepalluse fileuser purgeu_%.f : cd $(OBJDIR_USER) ; grep -l "depfile:$(*F).D" *.f* | xargs rm -f ; rm -f $(*F).D ; rm -f filedepalluse fileuser stat_f90 : cd $(OBJDIR_MASTER) ; find . -name "*.f90" | wc -l stat_o : cd $(OBJDIR_MASTER) ; find . -name "*.o" | wc -l endif cleanuser : test -d $(OBJDIR_USER) && rm -fr $(OBJDIR_USER) clean : examplesclean gribex_clean rm -fr $(OBJDIR_ROOT) cleanprog : cd $(OBJDIR_ROOT) ; rm -f $(PROG_LIST) print : @echo $(VAR)=$($(VAR)) ARFLAGS=r #(%.o): %.o # $(AR) $(ARFLAGS) $(OBJDIR)/$(@F) $(*F).o # $(RM) $(*F).o # # GENERATION OF DEPENDANCE FILES : *.D # %.D:%.F90 $(CPP) $(INC) $(CPPFLAGS) $< > $(OBJDIR)/$(*F).f90 spll $(NSOURCE) $(OBJDIR)/$(*F).f90 rm -f $(OBJDIR)/$(*F).f90 %.D:%.f90 $(CPP) $(INC) $(CPPFLAGS) $< > $(OBJDIR)/$(*F).f90 spll $(NSOURCE) $(OBJDIR)/$(*F).f90 rm -f $(OBJDIR)/$(*F).f90 %.D:%.fx90 $(CPP) $(INC) $(CPPFLAGS) $< > $(OBJDIR)/$(*F).fx90 spll $(NSOURCE) $(OBJDIR)/$(*F).fx90 rm -f $(OBJDIR)/$(*F).fx90 %.D:%.f $(CPP) $(INC) $(CPPFLAGS) $< > $(OBJDIR)/$(*F).f spll $(NSOURCE) $(OBJDIR)/$(*F).f rm -f $(OBJDIR)/$(*F).f # # GENERATION OF OBJET FILES : *.o # %.o:%.f90 $(F90) -I$(OBJDIR) $(INC) -c $(F90FLAGS) $< -mv $(*F).o $(OBJDIR)/. || echo OK $(*F).o %.o:%.f $(F77) -I$(OBJDIR) $(INC) -c $(F77FLAGS) $< -mv $(*F).o $(OBJDIR)/. || echo OK $(*F).o %.o:%.fx90 cp $< $(OBJDIR)/$(*F).f $(FX90) -I$(OBJDIR) $(INC) -c $(FX90FLAGS) $(OBJDIR)/$(*F).f -mv $(*F).o $(OBJDIR)/. || echo OK $(*F).o %.o : %.c $(CC) $(INC) $(CFLAGS) $(CPPFLAGS) -c $< -o $(OBJDIR)/$(*F).o -mv $(*F).o $(OBJDIR)/. || echo OK $(*F).o ifeq "$(DO_COMP_MASTER)" "YES" include filedepallmaster endif ifeq "$(DO_COMP_USER)" "YES" include filedepalluser endif