include ${PETSC_DIR}/conf/variables
PROGwwm = $(HOME)/bin/wwmadv
#PROG = wwmadv

FFLAGS = -DST42 -DWWM_SETUP

# Put MPI = on for compiling with mpi, nothing if no MPI is wished.
MPI = on
# Put PETSC = on for compiling with petsc, nothing if no petsc is wished.
PETSC = on
# Put NETCDF = on for compiling with netcdf, nothing if no netcdf is wished.
NETCDF = on
# Put OPENMP = on for compiling with openmp, nothing if no openmp is wished.
OPENMP =
# Put OPENMP = on for compiling with openmp, nothing if no openmp is wished.
DARKO =
# Put OPENMP = on for compiling with openmp, nothing if no openmp is wished.
SNL4_TSA = 
# Put GRIB = on for compiling with grib library, nothing if GRIB is not wished
GRIB =
# Put TIMINGS = on for timings with
TIME = on
# Put PDLIB = on for using the pdlib library.
PDLIB =


#F90 = gfortran
F90 = mpif90
#F90 = mpif90-vt
#F90 = ifort
#F90 = $(FLINKER)
#F90 = pgf90
#F90 = pathf95

#INTEL
#save opti
#F90OPTI = -fpp -traceback -g
#F90OPTI = -O1 -axSSE4.2 -traceback -g  -check uninit -check bounds -check pointers -warn interfaces,nouncalled
#F90OPTI = -fpp -O2 -stand f03 -assume realloc_lhs -fstack-protector -assume protect_parens
#F90OPTI = -warn interfaces,nouncalled -fpp -gen-interface -g -traceback -check uninit -check bounds -check pointers


#F90OPTI = -ip -O2
F90OPTI =  -O1 -axSSE4.2 -unroll-aggressive -assume byterecl
#F90OPTI = -warn interfaces,nouncalled -fpp -gen-interface -g -traceback -check all -fp-model precise
#F90OPTI =  -O2 -assume realloc_lhs -check all -traceback -warn all -fstack-protector -assume protect_parens -implicitnone
#F90OPTI =  -traceback -fstack-protector -assume protect_parens -g
#F90OPTI = -g -traceback -O5 -axSSE4.2 -unroll-aggressive -assume byterecl

#F90OPTI = -fpp -O2 -stand f03 -assume realloc_lhs -check all -traceback -fstack-protector -assume protect_parens -implicitnone
#extreme aggressive opti ...
#F90OPTI = -g -traceback -O1 -axSSE4.2 -unroll-aggressive -assume byterecl #-openmp#-check all -warn all

#aggressive opti
#F90OPTI = -O1 -fp-model fast -opt-multi-version-aggressive -axSSE4.2 -no-heap-arrays -fpp -stack_temps -unroll-aggressive -vec-guard-write -traceback -g
#aggressive opti no openmp
#F90OPTI = -O1 -axSSE4.2 -fpp
#debug 1
#F90OPTI = -O1 -mp1 -fpp -traceback -g -traceback -check pointers -check bound -check uninit 
#debug 2
#F90OPTI =  -fpp -g -traceback -check all
#aggresive debug openmp
#F90OPTI = -fpp -g -traceback -check all -openmp

#PGI
#F90OPTI = -g -O1 -Mprof=dwarf -Mprof=time -Minfo=ccff -mp
#F90OPTI = -fastsse -Munroll -Minline=reshape -Minline=levels:10 -Mvect -Mipa=fast Mipa=levels:10 -Mlarge_arrays -mp
#F90OPTI  = -g -Mbounds -Mchkfpstk -Mchkptr -Mchkstk

#GFORTRAN
#F90OPTI = -g -O3 -ffree-line-length-0 -fbacktrace -Wall

#LDFLAGS = -Mprof=dwarf -Mprof=lines -Mprof=func -Mprof=time Minfo=ccff
#TCFLAG  = -tcheck
#LDFLAGS = -lpthread

#ITT_BASE = /home/aron/intel/itt

#LIBS = #libgoto_penrynp-r1.26.a #sparskit_pgi.a libgoto.a #sparskit.a

BINDIR       = Binaries
GRIBAPI_INC  = $(GRIBPREFIX)/include
GRIBAPI_LIB  = $(GRIBPREFIX)/lib

CP_OPT      = -DRS6K

SCRATCH_DIR = Build

SFMAKEDEPEND := ../Scripts/sfmakedepend
SimpleDEPEND := ../Scripts/GetSimpleDepend
          AR := ar
     ARFLAGS := r
      RANLIB := ranlib
        TEST := test
       MKDIR := mkdir -p

MDEPFLAGS += --silent --moddir $(SCRATCH_DIR)

SRC = $(wildcard *.F90)
OBJ = $(addprefix $(SCRATCH_DIR)/, $(patsubst %.F90,%.o, $(notdir $(SRC))))

all: PROGwwm

$(BINDIR)/chief: $(SCRATCH_DIR)/libtotal.a $(SCRATCH_DIR)/chief.o
	cd $(SCRATCH_DIR) && $(FC) $(FFLAGS) chief.o libtotal.a $(LIBS) -o ../$(BINDIR)/chief

$(SCRATCH_DIR)/libtotal.a: $(SCRATCH_DIR)/MakeDepend $(SCRATCH_DIR)/MakeSimpleWAM $(SCRATCH_DIR)/MakeSimpleMPLf $(OBJwam)
	$(AR) $(ARFLAGS) $(SCRATCH_DIR)/libtotal.a $(OBJwam) 
	$(RANLIB) $(SCRATCH_DIR)/libtotal.a

-include $(SCRATCH_DIR)/MakeDepend
-include $(SCRATCH_DIR)/MakeSimpleWWM

MDEPFLAGS := --file=- --silent --moddir $(SCRATCH_DIR) --objdir=$(SCRATCH_DIR)

$(SCRATCH_DIR)/MakeDepend: $(SCRATCH_DIR)
	$(SFMAKEDEPEND) $(MDEPFLAGS) *.F90 > $(SCRATCH_DIR)/MakeDepend

$(SCRATCH_DIR)/MakeSimpleWWM: $(SCRATCH_DIR) $(SCRATCH_DIR)/MakeDepend
	$(SimpleDEPEND) Build/ "cd slk(SCRATCH_DIR) && slk(FC) slk(FFLAGS) -c ../" *.F90 > $(SCRATCH_DIR)/MakeSimpleWWM

$(SCRATCH_DIR):
	$(shell $(TEST) -d $(SCRATCH_DIR) || $(MKDIR) $(SCRATCH_DIR) )

clean:
	\rm -f $(SCRATCH_DIR)/*
	\rm -f $(BINDIR)/*
