#$Id: Rules.make,v 1.17 2006-10-26 13:12:46 kbk Exp $ SHELL = /bin/sh # The compilation mode is obtained from $COMPILATION_MODE - # default production - else debug or profiling ifndef COMPILATION_MODE compilation=production else compilation=$(COMPILATION_MODE) endif # Force this here. Could be done in bashrc. #FORTRAN_COMPILER=PGF90 FORTRAN_COMPILER=GFORTRAN #FORTRAN_COMPILER=IFORT DEFINES=-DNUDGE_VEL DEFINES=-D$(FORTRAN_COMPILER) # What do we include in this compilation NetCDF = true SEDIMENT = false SEAGRASS = false BIO = true FEATURES = FEATURE_LIBS = EXTRA_LIBS = INCDIRS = LDFLAGS = # If we want NetCDF - where are the include files and the library NETCDFINC = /usr/include NETCDFLIBDIR = /usr/lib64 ifdef NETCDFINC INCDIRS += -I$(NETCDFINC) endif ifdef NETCDFLIBNAME NETCDFLIB = $(NETCDFLIBNAME) else NETCDFLIB = -lnetcdff endif ifdef NETCDFLIBDIR LDFLAGS += -L$(NETCDFLIBDIR) endif # phony targets .PHONY: clean realclean distclean dummy # Top of this version of GOTM. ifndef GOTMDIR GOTMDIR := $(HOME)/git/gotm_ismer endif CPP = /usr/bin/cpp # Here you can put defines for the [c|f]pp - some will also be set depending # on compilation mode. ifeq ($(NetCDF),true) DEFINES += -DNETCDF_FMT EXTRA_LIBS += $(NETCDFLIB) endif ifeq ($(SEDIMENT),true) DEFINES += -DSEDIMENT FEATURES += extras/sediment FEATURE_LIBS += -lsediment$(buildtype) endif ifeq ($(SEAGRASS),true) DEFINES += -DSEAGRASS FEATURES += extras/seagrass FEATURE_LIBS += -lseagrass$(buildtype) endif ifeq ($(BIO),true) DEFINES += -DBIO FEATURES += extras/bio FEATURE_LIBS += -lbio$(buildtype) endif # Directory related settings. ifndef BINDIR BINDIR = $(GOTMDIR)/bin endif ifndef LIBDIR LIBDIR += $(GOTMDIR)/lib/$(FORTRAN_COMPILER) endif ifndef MODDIR #MODDIR = $(GOTMDIR)/modules MODDIR = $(GOTMDIR)/modules/$(FORTRAN_COMPILER) endif INCDIRS += -I/usr/local/include -I$(GOTMDIR)/include -I$(MODDIR) # Normaly this should not be changed - unless you want something very specific. # The Fortran compiler is determined from the EV FORTRAN_COMPILER - options # sofar NAG(linux), FUJITSU(Linux), DECF90 (OSF1 and likely Linux on alpha), # SunOS, PGF90 - Portland Group Fortran Compiler (on Intel Linux). # Sets options for debug compilation ifeq ($(compilation),debug) buildtype = _debug DEFINES += -DDEBUG $(STATIC) FLAGS = $(DEBUG_FLAGS) endif # Sets options for profiling compilation ifeq ($(compilation),profiling) buildtype = _prof DEFINES += -DPROFILING $(STATIC) FLAGS = $(PROF_FLAGS) endif # Sets options for production compilation ifeq ($(compilation),production) buildtype = _prod DEFINES += -DPRODUCTION $(STATIC) FLAGS = $(PROD_FLAGS) endif include $(GOTMDIR)/compilers/compiler.$(FORTRAN_COMPILER) #DEFINES += -DREAL_4B=$(REAL_4B) #ifeq ($(FORTRAN_COMPILER),XLF) #DEFINES:=-WF,"$(DEFINES)" #DEFINES=-WF,"-DXLF -DNETCDF_FMT -DSEAGRASS -DFORTRAN95 -DPRODUCTION -DREAL_4B=real\(4\)" #endif # For making the source code documentation. PROTEX = protex -b -n -s .SUFFIXES: .SUFFIXES: .F90 LINKDIR = -L$(LIBDIR) CPPFLAGS = $(DEFINES) $(INCDIRS) FFLAGS = $(DEFINES) $(FLAGS) $(MODULES) $(INCDIRS) $(EXTRAS) F90FLAGS = $(FFLAGS) LDFLAGS += $(FFLAGS) $(LINKDIR) # # Common rules # ifeq ($(can_do_F90),true) %.o: %.F90 $(FC) $(F90FLAGS) $(EXTRA_FFLAGS) -c $< -o $@ else %.f90: %.F90 # $(CPP) $(CPPFLAGS) $< -o $@ $(F90_to_f90) %.o: %.f90 $(FC) $(F90FLAGS) $(EXTRA_FFLAGS) -c $< -o $@ endif