CXX=clang++
PKG_CPPFLAGS= -I../inst/include/ -I./inst/ -DHAVE_CONFIG_H
PKG_LIBS= $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) -L../inst/ -lsundials_all
LIBS=-L./ -L../inst/

.PHONY: all ../inst/libsundials_all.a

SOURCES= check_retval.cpp cvode.cpp cvodes.cpp RcppExports.cpp
OBJECTS= $(SOURCES:.cpp=.o)

#SOURCES_CVODE= ./sundials/cvode/cvode.c ./sundials/cvode/cvode_bandpre.c \
#./sundials/cvode/cvode_bbdpre.c \
#./sundials/cvode/cvode_diag.c \
#./sundials/cvode/cvode_io.c \
#./sundials/cvode/cvode_ls.c \
#./sundials/cvode/cvode_nls.c

SOURCES_CVODES = ./sundials/cvodes/cvodea.c ./sundials/cvodes/cvodea_io.c \
./sundials/cvodes/cvodes.c \
./sundials/cvodes/cvodes_bandpre.c ./sundials/cvodes/cvodes_bbdpre.c \
./sundials/cvodes/cvodes_diag.c ./sundials/cvodes/cvodes_io.c \
./sundials/cvodes/cvodes_ls.c ./sundials/cvodes/cvodes_nls.c \
./sundials/cvodes/cvodes_nls_sim.c ./sundials/cvodes/cvodes_nls_stg.c \
./sundials/cvodes/cvodes_nls_stg1.c

SOURCES_NVECSERIAL= ./sundials/nvec_ser/fnvector_serial.c \
./sundials/nvec_ser/nvector_serial.c

SOURCES_SUNDIALS= ./sundials/sundials/sundials_band.c ./sundials/sundials/sundials_dense.c \
./sundials/sundials/sundials_direct.c ./sundials/sundials/sundials_iterative.c \
./sundials/sundials/sundials_linearsolver.c \
./sundials/sundials/sundials_math.c ./sundials/sundials/sundials_matrix.c \
./sundials/sundials/sundials_mpi.c ./sundials/sundials/sundials_nonlinearsolver.c \
./sundials/sundials/sundials_nvector.c ./sundials/sundials/sundials_nvector_senswrapper.c \
./sundials/sundials/sundials_pcg.c \
./sundials/sundials/sundials_sparse.c ./sundials/sundials/sundials_spbcgs.c \
./sundials/sundials/sundials_sptfqmr.c \
./sundials/sundials/sundials_version.c

#./sundials/sundials/sundials_spfgmr.c ./sundials/sundials/sundials_spgmr.c

SOURCES_SUNLINSOL_DENSE = ./sundials/sunlinsol_dense/fsunlinsol_dense.c \
./sundials/sunlinsol_dense/sunlinsol_dense.c

SOURCES_SUNLINSOL_BAND = ./sundials/sunlinsol_band/sunlinsol_band.c \
./sundials/sunlinsol_band/fsunlinsol_band.c


SOURCES_SUNMAT = ./sundials/sunmat_dense/fsunmatrix_dense.c \
./sundials/sunmat_dense/sunmatrix_dense.c \
./sundials/sunmat_band/fsunmatrix_band.c \
./sundials/sunmat_band/sunmatrix_band.c

SOURCES_SUNNONLINSOL = ./sundials/sunnonlinsol/newton/sunnonlinsol_newton.c \
./sundials/sunnonlinsol/newton/fsunnonlinsol_newton.c \
./sundials/sunnonlinsol/fixedpoint/sunnonlinsol_fixedpoint.c \
./sundials/sunnonlinsol/fixedpoint/fsunnonlinsol_fixedpoint.c


SOURCES_SUNDIALS_ALL= $(SOURCES_CVODES) $(SOURCES_NVECSERIAL) $(SOURCES_SUNDIALS) \
$(SOURCES_SUNLINSOL_DENSE) $(SOURCES_SUNLINSOL_BAND) \
$(SOURCES_SUNMAT) $(SOURCES_SUNNONLINSOL)

OBJECTS_SUNDIALS_ALL = $(SOURCES_SUNDIALS_ALL:.c=.o)

all: $(SHLIB)

$(SHLIB): ../inst/libsundials_all.a

../inst/libsundials_all.a: $(OBJECTS_SUNDIALS_ALL)
	$(AR) -crvs ../inst/libsundials_all.a $(OBJECTS_SUNDIALS_ALL)
	$(RANLIB) $@


clean:
	(cd ./sundials/cvode;rm -f *.o)
	(cd ./sundials/cvodes;rm -f *.o)
	(cd ./sundials/nvec_ser;rm -f *.o)
	(cd ./sundials/sundials;rm -f *.o)
	(cd ./sundials/sunlinsol_dense;rm -f *.o)
	(cd ./sundials/sunmat_band;rm -f *.o)
	(cd ./sundials/sunmat_dense;rm -f *.o)
	(cd ./sundials/sunlinsol_band;rm -f *.o)
	(cd ./sundials/sunnonlinsol/fixedpoint;rm -f *.o)
	(cd ./sundials/sunnonlinsol/newton;rm -f *.o)
	rm -f *.dll
	rm -f *.exe
	(cd ../inst;rm -f *.a)
