#--Get the HOST--#
HOST = $(shell hostname)
#--Define Compiler Type--#
F90 = ifort 
#--Define Compiler Options--#
FCFLAGS = -mkl=parallel\
					-qopenmp\
					-fltconsistency\
					-O0\
					-g\
					-i8\
					-qoverride-limits\
					-mcmodel=medium\
					-auto\
					-zero\
					-WB\
					-DVERBOSE_TIMING\
					-shared-intel\
					-Bdynamic\
					-check all\
					-fp-stack-check\
					-traceback\
					-init=array\
					-fstack-protector-all\
					-fstack-security-check\
					-heap-arrays\
					-stand f08\
					-diag-disable 406\
					-debug\
					-warn all
					-watch=source\

#--Define the OBJ directories--#
OBJ_DIR = ./obj
#--Define the BIN dir--#
BIN_DIR = ./bin
#--Define Path to Local Libraries--# 
LIBLOCAL = ./modules/lib
LIBRARIES =                \
       mymodules.a         
#--Include Intel MKL--#
ifeq (${HOST},ross)
LIB_LAPACK = \
						 -lmkl_intel_ilp64\
						 -lmkl_intel_thread\
						 -lmkl_lapack95_ilp64\
						 -lmkl_core\
						 -liomp5\
						 -lpthread\
						 -ldl
endif 
ifeq (${HOST},descartes)
LIB_LAPACK = \
						 -lmkl_intel_ilp64\
						 -lmkl_intel_thread\
						 -lmkl_lapack95_ilp64\
						 -lmkl_core\
						 -liomp5\
						 -lpthread
endif 

LIB_MATH=$(LIB_LAPACK) -lm
LIB_MISC = $(LIB_MATH)
LIB_FILES = $(LIBRARIES:%.a=$(LIBLOCAL)/%.a)
#--Include NetCDF Libraries--#	
ifeq (${HOST},descartes) 
NETCDFF90 = /usr/depot/sl7_64/netcdf/4.4.3-fortran-11.1/lib
NETCDF = /usr/depot/sl7_64/netcdf/4.4.1.1/lib
INCLUDE_NETCDF = /usr/depot/sl7_64/netcdf/4.4.3-fortran-11.1/include
endif 
ifeq (${HOST},ross) 
NETCDFF90 = /usr/depot/sl7_64/netcdf/4.4.3-fortran/lib 
NETCDF = /usr/depot/sl7_64/netcdf/4.4.1.1/lib
INCLUDE_NETCDF = /usr/depot/sl7_64/netcdf/4.4.3-fortran/include 
endif 
LIB_NETCDF = -lnetcdff -lnetcdf

#--Define PATH to .mod Files--#
MODFILES = ./modules

#--Just Checking if ARGS has been defined--#
ifeq ($(ARGS),)
 $(error "Undefined Variable ARGS")
endif 
NAME = $(ARGS)

#--Define the executable--#
EXEC = \
$(BIN_DIR)/$(NAME).e

#--Define the obj--#
OBJS = \
$(NAME).o

#--Define the SOURCE Files--#
F90_SOURCE =              \
$(NAME).f90

#--Compilation Rules for f90 files which do require modules--#
#--Target exec--#
exec: $(OBJ_DIR)/$(OBJS)
	$(F90) $(FCFLAGS) $(OBJ_DIR)/$(OBJS) -I$(MODFILES)   $(LIB_FILES) $(LIB_MISC) -o $(EXEC)
$(OBJ_DIR)/$(OBJS): $(F90_SOURCE)
	$(F90) $(FCFLAGS) -c $(F90_SOURCE) -I$(MODFILES)  -I$(INCLUDE_NETCDF)
	 mv $(@F) $@

#--Target execnet--#
execnet: $(OBJ_DIR)/$(OBJS)
	$(F90) $(FCFLAGS) $(OBJ_DIR)/$(OBJS) -I$(MODFILES) -I$(INCLUDE_NETCDF) -L$(NETCDF)   -L$(NETCDFF90) $(LIB_NETCDF) $(LIB_FILES) $(LIB_MISC) -o $(EXEC)
$(OBJ_DIR)/$(OBJS): $(F90_SOURCE)
	$(F90) $(FCFLAGS) -c $(F90_SOURCE) -I$(MODFILES) -I$(INCLUDE_NETCDF) 
	 mv $(@F) $@

#--Target check_existence (mkdir)--#
check_existence: FORCE
	@mkdir -p $(BIN_DIR)
	@mkdir -p $(OBJ_DIR)

#--Target printvar--#
printvar:
	@echo ' NAME ' $(NAME)
	@echo ' F90_SOURCE ' $(F90_SOURCE)
	@echo ' NETCDFF90 ' $(NETCDFF90)
	@echo ' NETCDF    ' $(NETCDF)

#--Target clean
clean:
	rm -rf $(OBJ_DIR)/$(OBJS) $(EXEC) 

FORCE:
