.SUFFIXES: .f90 .F90

# Default compiler
FC = gfortran

# Source files
SRCS = src/m1qn3.f90    \
       src/var_def.f90 \
       src/main.f90     \
       src/simul_sh.f90 \
       src/test_adj.f90 
       
# Objects files
OBJS := $(SRCS:.f90=.o)
SRCS += src/bglib_sh.F90
OBJS += src/bglib_sh.o

# Setting options for the ifort compiler
#CHECK?=none
ifeq ($(FC), ifort)
    # FC=ifort
    ifeq ($(PRECOMP), 1)
        INC_SHTOOLS = 
        LIB_SHTOOL  = 
    else
        INC_SHTOOLS = -I/usr/local/include64
        LIB_SHTOOLS = -L/usr/local/lib64  -lshtools -lfftw3 -lpthread
    endif
    INC_LAPACK  = 
    LIB_LAPACK  = -lmkl -lmkl_intel_lp64
    OPTC        = -O3 -cpp -openmp -fpic -vec-report0 -Iinclude $(INC_SHTOOLS) -module include $(INC_LAPACK)
    OPTL        = -openmp -liomp5 -shared-intel 
    ifeq ($(CHECK),safe)
       OPTC	  += -O0 -g -traceback -check bounds -check pointers -check uninit
    else
       OPTC	  += -check $(CHECK)
    endif
endif

# Setting options for the gfortran compiler
ifeq ($(FC), gfortran)
    # FC=gfortran
    ifeq ($(PRECOMP), 1)
        INC_SHTOOLS = 
        LIB_SHTOOL  = 
    else
        INC_SHTOOLS = -I/usr/local/include64/shtools_gfortran
        LIB_SHTOOLS = -L/usr/local/lib64 -lshtools_gfortran -lfftw3 
    endif

    INC_LAPACK  = -I/usr/local/include64
    LIB_LAPACK  = -llapack 
    OPTC        = -O3 -fpic -Iinclude $(INC_SHTOOLS) -Jinclude -std=gnu $(INC_LAPACK)
    OPTL        =  -fopenmp 
    ifeq ($(CHECK),safe)
       OPTC	  += -O0 -g -fbounds-check -fno-range-check
    #else
    #   OPTC	  += -check $(CHECK)
    endif
endif

ifeq ($(PRECOMP), 1)
    OPTC += -DPRECOMP
    LIBS = $(LIB_LAPACK)
else
    LIBS = $(LIB_SHTOOLS) $(LIB_LAPACK)
endif
# can be one of 'all', 'arg_temp_created', 'bounds', 'format', 'none', 'output_conversion',
#	'pointers', 'uninit' or 'safe' which means "debug" and 'bounds+pointers+uninit'


bin/test_bglib: $(OBJS)
	$(FC) $(OPTL) -o $@ $(OBJS) $(OPTL) $(LIBS)

clean:
	rm -f include/*.mod src/*.o bin/program

include/%.mod: src/%.f90
	$(FC) -c -o $@ $(OPTC) $<
%.o: %.f90
	$(FC) -c -o $@ $(OPTC) $<
%.o: %.F90
	$(FC) -c -o $@ $(OPTC) $<


# DEPENDENCIES, do not edit, unless you know what you are doing
src/main.o:             include/bglib.mod include/var_def.mod
src/simul_sh.o:         include/bglib.mod include/var_def.mod
src/test_adj.o:         include/bglib.mod include/var_def.mod
src/test_inv.o:         include/bglib.mod include/var_def.mod
include/bglib.mod:      src/bglib_sh.o
src/bglib_sh.o:         include/var_def.mod
include/var_def.mod:    src/var_def.f90


