# This is the makefile for the mesa library of numerical routines

MESA_DIR = ../..

#################################################################
#
# PREAMBLE

include $(MESA_DIR)/utils/makefile_header

ifeq ($(NUM_OFFLOAD),YES)
# compile all files for MIC
CC += -Doffload $(MIC_OFFLOAD)
FC += -Doffload $(MIC_OFFLOAD)
endif

#################################################################
#
# SOURCE FILES

SRCS = \
   mebdfi_solver_def.f num_def.f \
   mod_dop853.f mod_dopri5.f mod_cash_karp.f mod_dc_decsol.f \
   mod_rosenbrock.f mod_brent.f90 mod_qsort.f90 mod_root.f mod_solout_root.f \
   mod_random.f90 mod_newton.f mod_bobyqa.f mod_newuoa.f \
   mebdfi_support.f mebdfi_stiff.f \
   mod_simplex.f90 num_lib.f

#################################################################
#
# TARGETS

LIB = libnum.a
LIB_DEFS = mebdfi_solver_def.o num_def.o
LIB_OBJS = $(filter-out $(LIB_DEFS),$(patsubst %.f,%.o,$(patsubst %.f90,%.o,$(SRCS))))
$(LIB) : $(LIB_DEFS) $(LIB_OBJS)
	$(LIB_TOOL) $(LIB) $(LIB_OBJS)

#################################################################
#
# COMPULATION RULES

#COMPILE = $(COMPILE_TO_TEST) $(FCfixed)
COMPILE = $(COMPILE_TO_DEPLOY) $(FCfixed)

#COMPILE_FREE = $(COMPILE_TO_TEST) $(FCfree)
COMPILE_FREE = $(COMPILE_TO_DEPLOY) $(FCfree)

#COMPILE_XTRA = $(COMPILE_NO_CHECKS) $(FCfixed) -c
COMPILE_XTRA = $(COMPILE_BASIC) $(FCopt) $(FCfixed) -c

COMPILE_CMD = $(COMPILE)

mod_qsort.o: COMPILE_CMD = $(COMPILE_FREE)
mod_random.o: COMPILE_CMD = $(COMPILE_FREE)
mod_brent.o: COMPILE_CMD = $(COMPILE_FREE)
mod_simplex.o: COMPILE_CMD = $(COMPILE_FREE)
mod_bobyqa.o: COMPILE_CMD = $(COMPILE_XTRA)
mod_newuoa.o: COMPILE_CMD = $(COMPILE_XTRA)
mod_dop853.o: COMPILE_CMD = $(COMPILE_XTRA)
mod_dopri5.o: COMPILE_CMD = $(COMPILE_XTRA)
mod_dc_decsol.o: COMPILE_CMD = $(COMPILE_XTRA)
mod_rosenbrock.o: COMPILE_CMD = $(COMPILE_XTRA)
mebdfi_support.o: COMPILE_CMD = $(COMPILE_XTRA)
mebdfi_stiff.o: COMPILE_CMD = $(COMPILE_XTRA)

%.o : %.f
	$(COMPILE_CMD) $<
%.o : %.f90
	$(COMPILE_CMD) $<
%.mod : %.o
	@true

clean:
	-@rm -f *.o *.mod *.modmic *genmod.f90 *.a .depend

#################################################################
#
# DEPENDENCIES

# Paths to search for source & include files

VPATH = $(MOD_PUBLIC_DIR):$(MOD_PRIVATE_DIR)

# Automatic dependency generation using makedepf90

nodeps : $(.DEFAULT_GOAL)

NODEPS = $(or $(filter nodeps,$(MAKECMDGOALS)),$(filter clean,$(MAKECMDGOALS)))

ifeq ($(NODEPS),)

  DEPEND_DIRS = $(MOD_PUBLIC_DIR):$(MOD_PRIVATE_DIR)

  .depend :
	makedepf90 -m %m.mod -I$(DEPEND_DIRS) $(SRCS) > .depend
  -include .depend

endif
