#!/bin/bash


# use this shell command to check on offloading
#export OFFLOAD_REPORT=1


USE_STUB_FOR_CRLIBM = NO
# must change crlibm build_and_test configure 
# ./configure CC="icc -offload-attribute-target=mic"


# add MIC_OFFLOAD to CC or FC to get entire files compiled for MIC
MIC_OFFLOAD = -offload-attribute-target=mic


ATM_OFFLOAD = NO
COLORS_OFFLOAD = NO
CONST_OFFLOAD = NO
CRLIBM_OFFLOAD = NO
EOS_OFFLOAD = NO
INTERP_1D_OFFLOAD = NO
INTERP_2D_OFFLOAD = NO
IONIZATION_OFFLOAD = NO
KAP_OFFLOAD = NO
MLT_OFFLOAD = NO
MTX_OFFLOAD = NO
NET_OFFLOAD = NO
NEU_OFFLOAD = NO
NSE_OFFLOAD = NO
NUM_OFFLOAD = NO
RATES_OFFLOAD = NO
UTILS_OFFLOAD = NO



CC = icc
FC = ifort


# if you need special flags for the compiler, define them here:
SPECIAL_FC_FLAGS = 
SPECIAL_C_FLAGS = 

# step 1.a) [temporary workaround for loader problem on Mac:] 
#           go down to select the correct entry for LOAD_MATRIX 
#           depending on whether you are on Linux or Mac 

# step 2) specify whether isnan is supported or not

# pick one of the following options:

UTILS_ISNAN = utils_isnan_okay

# these are the standard defaults
WHICH_LAPACK = USE_SRCS
LOAD_LAPACK = -lmesalapack
WHICH_BLAS = USE_SRCS
LOAD_BLAS = -lmesablas
MKL_INCLUDE = 

USE_GYRE = NO

USE_PGSTAR = NO
LOAD_PGPLOT = 


USE_SE = NO
LOAD_SE = 
INCLUDE_SE = 

USE_OPENMP = YES

#FCbasic = $(SPECIAL_FC_FLAGS) -assume protect-parens -fp-model source -prec-div -prec-sqrt -ftz -vec-report0 -traceback -error-limit 6
FCbasic = $(SPECIAL_FC_FLAGS) -assume protect-parens -fp-model source -prec-div -prec-sqrt -vec-report0 -traceback -error-limit 6

FCimpno = -implicitnone 
FCchecks = -check uninit -check pointers -check bounds -check all
FCwarn = -warn all -warn nounused
FCwarn_unused = -warn unused
FC_fixed_preprocess = -fpp
FC_free_preprocess = -fpp
FCfixed = -fixed -132 $(FC_fixed_preprocess)
FCfixed72 = -fixed $(FC_fixed_preprocess)
FCfree = -free $(FC_free_preprocess)
FCopt = -O2
FCdebug = -g
ifeq ($(USE_OPENMP),YES)
FCopenmp = -openmp -threads
else
FCopenmp = 
endif
FCstatic =

# LOADER creates executables
LOADER = $(FC)

# LIB_TOOL creates libraries
LIB_TOOL = xiar -qoffload-build rcs


# some definitions used in the module makefiles
MODULE_DIR = ..
MOD_PUBLIC_DIR = $(MODULE_DIR)/public
MOD_PRIVATE_DIR = $(MODULE_DIR)/private
MODULE_INCLUDES = -I$(MOD_PUBLIC_DIR) -I$(MOD_PRIVATE_DIR)
OTHER_INCLUDES = -I$(MESA_DIR)/include
INCLUDES = $(MODULE_INCLUDES) $(OTHER_INCLUDES)

COMPILE_BASIC_FLAGS = $(FCbasic) $(FCopenmp) $(FCstatic) $(INCLUDES)
COMPILE_BASIC = $(FC) $(COMPILE_BASIC_FLAGS)

COMPILE_TO_TEST   = $(COMPILE_BASIC) $(FCwarn) $(FCimpno) $(FCchecks) $(FCopt) $(FCdebug) -c
COMPILE_TO_DEPLOY = $(COMPILE_BASIC) $(FCwarn) $(FCimpno) $(FCopt) -c

COMPILE_NO_OPENMP_NO_OPT = \
   $(FC) $(FCbasic) $(INCLUDES) $(FCwarn) $(FCimpno) $(FCchecks) $(FCdebug) -c -O
COMPILE_ASAP = \
   $(FC) $(FCbasic) $(INCLUDES) $(FCwarn) $(FCimpno) $(FCdebug) -c -O

COMPILE_FAST = $(COMPILE_BASIC) -c
COMPILE_NO_CHECKS = $(COMPILE_BASIC) $(FCopt) -c
COMPILE_NO_OPT    = $(COMPILE_BASIC) $(FCwarn) $(FCimpno) $(FCchecks) $(FCdebug) -c -O
COMPILE_DEVEL     = $(COMPILE_NO_OPT)

# some definitions used in the test makefiles and client makefiles

WORK_COMPILE = \
   $(FC) $(FCbasic) $(FCopenmp) $(FCchecks) $(FCdebug) \
   $(FCfree) $(FC_free_preprocess) -I$(MESA_INCLUDE_DIR) $(INCLUDE_SE) -c
 
TEST_DIR = ..
TEST_SRC_DIR = $(TEST_DIR)/src
PACKAGE_DIR = ../..
LOCAL_LIB_DIR = $(PACKAGE_DIR)/make
MESA_LIB_DIR = $(MESA_DIR)/lib
MESA_INCLUDE_DIR = $(MESA_DIR)/include
TEST_INCLUDES = -I$(LOCAL_LIB_DIR) -I$(PACKAGE_DIR)/public -I$(MESA_INCLUDE_DIR) $(INCLUDE_SE)
TEST_COMPILE_FLAGS = $(FCbasic) $(FCopenmp) $(TEST_INCLUDES) $(FCchecks) $(FCdebug) -c
TEST_COMPILE = $(FC) $(TEST_COMPILE_FLAGS)

ifeq ($(USE_STUB_FOR_CRLIBM),NO)
LOAD_CRLIBM = -lcrlibm
endif

LOAD_MATRIX = -lf2crlibm $(LOAD_CRLIBM) -lmtx -lconst -lutils -lmesaklu $(LOAD_LAPACK) $(LOAD_BLAS)
LOAD_MESA_NUMERICS = -linterp_2d -linterp_1d -lnum $(LOAD_MATRIX)

# micro uses numerics
LOAD_MESA_MICRO = \
   -lnse -lnet -leos -lkap -lrates -lneu -lchem \
   $(LOAD_MESA_NUMERICS)

# macro uses micro
LOAD_MESA_MACRO = \
   -lionization -latm -lcolors -lmlt $(LOAD_MESA_MICRO)

# star_support uses macro (for now, LOAD_MESA_STAR_SUPPORT just = LOAD_MESA_MACRO)
LOAD_MESA_STAR_SUPPORT = $(LOAD_MESA_MACRO)

# star uses star_support
LOAD_STAR_MODS = -lstar $(LOAD_MESA_STAR_SUPPORT)
STAR_LOAD_LIST = $(LOAD_STAR_MODS) $(LOAD_PGPLOT) $(LOAD_SE)
LOAD_MESA_STAR = -L$(MESA_LIB_DIR) $(STAR_LOAD_LIST)
LOAD_MESA_BINARY = -L$(MESA_LIB_DIR) -lbinary $(STAR_LOAD_LIST)



STAR_WORK_OBJS = \
   run_star_extras.o run_star.o 

BINARY_WORK_OBJS = \
   $(STAR_WORK_OBJS) run_binary_extras.o run_binary.o
