CXX=clang++
PKG_CPPFLAGS= -I../inst/include/ -I./inst/ -DHAVE_CONFIG_H -DARMA_USE_CXX11 -I./sundials/sundials
#CXX_STD = CXX11
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 \
ida.cpp cvsolve.cpp rhs_func.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 = $(wildcard ./sundials/cvodes/*.c)

#SOURCES_IDA = $(wildcard ./sundials/ida/*.c)
SOURCES_IDAS = $(wildcard ./sundials/idas/*.c)

SOURCES_KINSOL = $(wildcard ./sundials/kinsol/*.c)

SOURCES_NVECSERIAL= ./sundials/nvector/serial/nvector_serial.c

SOURCES_SUNDIALS= $(wildcard ./sundials/sundials/*.c)

#./sundials/sundials/sundials_mpi.c \
#./sundials/sundials/sundials_pcg.c \
./sundials/sundials/sundials_sparse.c ./sundials/sundials/sundials_spbcgs.c \
./sundials/sundials/sundials_sptfqmr.c

SOURCES_SUNLINSOL_BAND = ./sundials/sunlinsol/band/sunlinsol_band.c

SOURCES_SUNLINSOL_DENSE = ./sundials/sunlinsol/dense/sunlinsol_dense.c

SOURCES_SUNMAT_BAND = ./sundials/sunmatrix/band/sunmatrix_band.c

SOURCES_SUNMAT_DENSE = ./sundials/sunmatrix/dense/sunmatrix_dense.c

SOURCES_SUNNONLINSOL_FIXEDPOINT = ./sundials/sunnonlinsol/fixedpoint/sunnonlinsol_fixedpoint.c

SOURCES_SUNNONLINSOL_NEWTON = ./sundials/sunnonlinsol/newton/sunnonlinsol_newton.c

SOURCES_SUNDIALS_ALL= $(SOURCES_CVODES) $(SOURCES_IDAS) $(SOURCES_NVECSERIAL) $(SOURCES_SUNDIALS) \
$(SOURCES_SUNLINSOL_DENSE) $(SOURCES_SUNLINSOL_BAND) \
$(SOURCES_SUNMAT_BAND) $(SOURCES_SUNMAT_DENSE) \
$(SOURCES_SUNNONLINSOL_FIXEDPOINT) $(SOURCES_SUNNONLINSOL_NEWTON) $(SOURCES_KINSOL)

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/ida;rm -f *.o)
	(cd ./sundials/idas;rm -f *.o)
	(cd ./sundials/kinsol;rm -f *.o)
	(cd ./sundials/nvector/serial;rm -f *.o)
	(cd ./sundials/sundials;rm -f *.o)
	(cd ./sundials/sunlinsol/band;rm -f *.o)
	(cd ./sundials/sunlinsol/dense;rm -f *.o)
	(cd ./sundials/sunmatrix/band;rm -f *.o)
	(cd ./sundials/sunmatrix/dense;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)
