Rules.make 3.41 KB
#$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