#--Get the HOST--#
HOST = $(shell hostname)
#Compiler
F90 = ifort 
#Compiler Option
FCFLAGS = -mkl=parallel\
					-fltconsistency\
					-O0\
					-g\
					-i8\
					-qoverride-limits\
					-qopenmp\
					-mcmodel=medium\
					-auto\
					-zero\
					-WB\
					-DVERBOSE_TIMING\
					-shared-intel\
					-Bdynamic\
					-check all\
					-fp-stack-check\
					-init=array\
					-traceback\
					-fstack-protector-all\
					-fstack-security-check\
					-heap-arrays\
					-stand f08\
					-debug\
					-warn all\
					-watch=cmd,source\
#Local Libraries 
LIBLOCAL = ./lib
LIBRARIES = \
						libfftpack_ucar.a\
            libfortran90.a\
						libSHTOOLS.a\
          	libSHTOOLS-mp.a\
			 			libcat.a
# Intel MKL Libraries
ifeq (${HOST},ross)
LIB_LAPACK = -lmkl_intel_ilp64\
						 -lmkl_intel_thread\
						 -lmkl_lapack95_ilp64\
						 -lmkl_core\
						 -liomp5\
						 -lpthread
endif
ifeq (${HOST},descartes)
LIB_LAPACK = -lmkl_intel_ilp64\
						 -lmkl_intel_thread\
						 -lmkl_lapack\
						 -lguide\
						 -lmkl_core\
						 -liomp5\
						 -lpthread
endif
ifeq (${HOST},lithium)
 LIB_LAPACK = -lmkl_intel_ilp64\
							-lmkl_intel_thread\
							-lmkl_lapack\
							-lguide\
							-lmkl_core\
							-liomp5\
							-lpthread
endif
LIB_MATH=$(LIB_LAPACK) -lm
LIB_MISC=$(LIB_MATH)
LIB_FILE=$(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
INCLUDE_SHTOOLS = 
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
INCLUDE_SHTOOLS =
endif
LIB_NETCDF = -lnetcdff90 -lnetcdf

#--Define the OBJ Directory--#
OBJ_DIR=./obj
LIB_DIR=./lib

#--Define the SOURCE Files--#
F90_SOURCE=                  \
selectrealkind.f90           \
Incapsulated.f90             \
HandleStrings.f90            \
HandleNetCDF.f90

#--Define the EXECUTABLE--#
LIBMOD = ./lib/mymodules.a

#--Define Some MACROS--#
f_obj_files = $(F90_SOURCE:%.f90=$(OBJ_DIR)/%.o)

#--Compilation Rules--#
$(OBJ_DIR)/%.o: %.f90 
	$(F90) $(FCFLAGS) -c -I$(INCLUDE_NETCDF) $< 
	mv $(@F) $@

#--Build the Final Executable Image
exec: check_existence $(f_obj_files)
	ar ruv $(LIBMOD) $(f_obj_files)
	ln -sf $(LIBMOD)

check_existence: FORCE
	@mkdir -p $(OBJ_DIR)
	@mkdir -p $(LIB_DIR)

clean:
	rm -rf $(OBJ_DIR)  *.mod

realclean:
	rm -rf $(LIBMOD) $(LIB_DIR) 

.PHONY: all exec check_existence clean realclean 


FORCE:
