# modified by É. Canot -- IPR/CNRS -- Dec 2015

#===============================================================================
# CHOLMOD Makefile for compiling on Unix systems (for GNU Make)
#===============================================================================

# Default is to use METIS, so keep the following line commented out.
#CHOLMOD_CONFIG = -DNPARTITION

# no use of MatrixOps (GPL)
CHOLMOD_CONFIG += -DNMATRIXOPS

# no use of Modify (GPL)
CHOLMOD_CONFIG += -DNMODIFY

# don't know if the following is required -- never tested...
# (see CHOLMOD doc.)
# CHOLMOD_CONFIG += -DLONGBLAS='long'

C = $(CC) $(CC_FLAGS) $(CHOLMOD_CONFIG) -I. -I../SuiteSparse_config

#-------------------------------------------------------------------------------
# all include files:
#-------------------------------------------------------------------------------

INC = Include/cholmod.h \
      Include/cholmod_blas.h \
      Include/cholmod_camd.h \
      Include/cholmod_check.h \
      Include/cholmod_cholesky.h \
      Include/cholmod_complexity.h \
      Include/cholmod_config.h \
      Include/cholmod_core.h \
      Include/cholmod_function.h \
      Include/cholmod_gpu.h \
      Include/cholmod_gpu_kernels.h \
      Include/cholmod_internal.h \
      Include/cholmod_io64.h \
      Include/cholmod_matrixops.h \
      Include/cholmod_modify.h \
      Include/cholmod_partition.h \
      Include/cholmod_supernodal.h \
      Include/cholmod_template.h

I = -I../AMD/Include -I../COLAMD/Include -I../CAMD/Include -I../CCOLAMD/Include \
    -I../METIS/Include -I./Include

#-------------------------------------------------------------------------------
# CHOLMOD library modules (long, double)
#-------------------------------------------------------------------------------

LCORE = cholmod_l_aat.o cholmod_l_add.o cholmod_l_band.o \
	cholmod_l_change_factor.o cholmod_l_common.o cholmod_l_complex.o \
	cholmod_l_copy.o cholmod_l_dense.o cholmod_l_error.o \
	cholmod_l_factor.o cholmod_l_memory.o \
	cholmod_l_sparse.o cholmod_l_transpose.o cholmod_l_triplet.o

LCHECK = cholmod_l_check.o cholmod_l_read.o cholmod_l_write.o

LCHOLESKY = cholmod_l_amd.o cholmod_l_analyze.o cholmod_l_colamd.o \
	cholmod_l_etree.o cholmod_l_factorize.o cholmod_l_postorder.o \
	cholmod_l_rcond.o cholmod_l_resymbol.o cholmod_l_rowcolcounts.o \
	cholmod_l_rowfac.o cholmod_l_solve.o cholmod_l_spsolve.o

LPARTITION = cholmod_l_ccolamd.o cholmod_l_csymamd.o \
	cholmod_l_metis.o cholmod_l_nesdis.o cholmod_l_camd.o

LSUPERNODAL = cholmod_l_super_numeric.o cholmod_l_super_solve.o \
	cholmod_l_super_symbolic.o

DL = $(LCORE) $(LCHECK) $(LCHOLESKY) $(LPARTITION) $(LSUPERNODAL)

#-------------------------------------------------------------------------------

OBJ = $(subst cholmod_,../obj/cholmod_,$(DL))

all : $(OBJ)

#-------------------------------------------------------------------------------
# Check Module:
#-------------------------------------------------------------------------------

../obj/cholmod_l_check.o: Check/cholmod_check.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_read.o: Check/cholmod_read.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_write.o: Check/cholmod_write.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

#-------------------------------------------------------------------------------
# Core Module:
#-------------------------------------------------------------------------------

../obj/cholmod_l_common.o: Core/cholmod_common.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_dense.o: Core/cholmod_dense.c Core/t_cholmod_dense.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_factor.o: Core/cholmod_factor.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_change_factor.o: Core/cholmod_change_factor.c \
	Core/t_cholmod_change_factor.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_memory.o: Core/cholmod_memory.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_sparse.o: Core/cholmod_sparse.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_complex.o: Core/cholmod_complex.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_transpose.o: Core/cholmod_transpose.c Core/t_cholmod_transpose.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_band.o: Core/cholmod_band.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_copy.o: Core/cholmod_copy.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_triplet.o: Core/cholmod_triplet.c Core/t_cholmod_triplet.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_error.o: Core/cholmod_error.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_aat.o: Core/cholmod_aat.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_add.o: Core/cholmod_add.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

#-------------------------------------------------------------------------------
# Cholesky Module:
#-------------------------------------------------------------------------------

../obj/cholmod_l_amd.o: Cholesky/cholmod_amd.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_analyze.o: Cholesky/cholmod_analyze.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_colamd.o: Cholesky/cholmod_colamd.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_etree.o: Cholesky/cholmod_etree.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_factorize.o: Cholesky/cholmod_factorize.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_postorder.o: Cholesky/cholmod_postorder.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_rcond.o: Cholesky/cholmod_rcond.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_resymbol.o: Cholesky/cholmod_resymbol.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_rowcolcounts.o: Cholesky/cholmod_rowcolcounts.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_solve.o: Cholesky/cholmod_solve.c Cholesky/t_cholmod_lsolve.c \
	Cholesky/t_cholmod_ltsolve.c Cholesky/t_cholmod_solve.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_spsolve.o: Cholesky/cholmod_spsolve.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_rowfac.o: Cholesky/cholmod_rowfac.c Cholesky/t_cholmod_rowfac.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

#-------------------------------------------------------------------------------
# Partition Module:
#-------------------------------------------------------------------------------

../obj/cholmod_l_ccolamd.o: Partition/cholmod_ccolamd.c
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_csymamd.o: Partition/cholmod_csymamd.c
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_camd.o: Partition/cholmod_camd.c
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_metis.o: Partition/cholmod_metis.c
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_nesdis.o: Partition/cholmod_nesdis.c
	$(C) -DDLONG -c $(I) $< -o $@

#-------------------------------------------------------------------------------
# Supernodal Module:
#-------------------------------------------------------------------------------

../obj/cholmod_l_super_numeric.o: Supernodal/cholmod_super_numeric.c \
	Supernodal/t_cholmod_super_numeric.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_super_symbolic.o: Supernodal/cholmod_super_symbolic.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@

../obj/cholmod_l_super_solve.o: Supernodal/cholmod_super_solve.c \
	Supernodal/t_cholmod_super_solve.c $(INC)
	$(C) -DDLONG -c $(I) $< -o $@
