#===============================================================================
# SuitOPT/Makefile:
#===============================================================================
SUITEOPT = $(realpath $(CURDIR))
export SUITEOPT
USERCONFIG = $(SUITEOPT)/SuiteOPTconfig/Userconfig.mk
export USERCONFIG

# for Python use:
PYSUITEOPT_RPATH ?=
export PYSUITEOPT_RPATH

default: suiteopt

#-------------------------------------------------------------------------
# Lib - SuiteSparseX dynamic & static libraries + SuiteOPT static libraries
#-------------------------------------------------------------------------
suiteopt:
	( cd SuiteSparseX ; $(MAKE) purge )
	( cd SuiteSparseX ; $(MAKE) install )
	( cd SuiteOPTconfig ; $(MAKE) )
	( cd NAPHEAP ; $(MAKE) )
	( cd PPROJ ; $(MAKE) )
	( cd CGDESCENT ; $(MAKE) )
	( cd PASA  ; $(MAKE) )

#----------------------------------------
# pasa - compile Demo codes and libraries
#        (assumes suitesparse was previously compiled)
#----------------------------------------
pasa:
	( cd SuiteSparseX ; $(MAKE) install )
	( cd PASA ; $(MAKE) )

#----------------------------------------
# cg - compile Demo codes and libraries
#      (assumes suitesparse was previously compiled)
#----------------------------------------
cg:
	( cd SuiteSparseX ; $(MAKE) install )
	( cd CGDESCENT ; $(MAKE) )

#----------------------------------------
# napheap - compile Demo codes and libraries
#           (assumes suitesparse was previously compiled)
#----------------------------------------
napheap:
	( cd SuiteSparseX ; $(MAKE) install )
	( cd NAPHEAP ; $(MAKE) )

#----------------------------------------
# pproj - compile Demo codes and libraries
#         (assumes suitesparse was previously compiled)
#----------------------------------------
pproj:
	( cd SuiteSparseX ; $(MAKE) install )
	( cd PPROJ ; $(MAKE) )

#-------------------------------------------------
# SuiteSparseX - Makes dynamic and static libraries
#-------------------------------------------------
suitesparse:
	( cd SuiteSparseX ; $(MAKE) purge )
	( cd SuiteSparseX ; $(MAKE) install )

#-------------------------------------
# pasacute - CUTEst interface to pasa
#            (assumes suitesparse was previously compiled)
#-------------------------------------
pasacute:
	( cd SuiteSparseX ; $(MAKE) install )
	( cd PASA/CUTEst  ; $(MAKE) )

#----------------------------------------
# cgcute - CUTEst interface to cg_descent
#          (assumes suitesparse was previously compiled)
#----------------------------------------
cgcute:
	( cd SuiteSparseX ; $(MAKE) install )
	( cd CGDESCENT/CUTEst  ; $(MAKE) )

#-----------------------------------------------
# cute - CUTEst interface to cg_descent and pasa
#        (assumes suitesparse was previously compiled)
#-----------------------------------------------
cute:
	( cd SuiteSparseX ; $(MAKE) install )
	( cd PASA/CUTEst  ; $(MAKE) )
	( cd CGDESCENT/CUTEst  ; $(MAKE) )

#-------------------------------------
# Purge
#-------------------------------------

purge:
	( cd SuiteOPTconfig ; $(MAKE) purge )
	( cd PPROJ ; $(MAKE) purge )
	( cd PASA  ; $(MAKE) purge )
	( cd NAPHEAP ; $(MAKE) purge )
	( cd CGDESCENT ; $(MAKE) purge )
	( cd SuiteSparseX ; $(MAKE) purge )
	- $(RM) lib/* ldlibs/* include/*

#-------------------------------------
# Clean
#-------------------------------------

clean:
	( cd SuiteOPTconfig ; $(MAKE) clean )
	( cd PPROJ ; $(MAKE) clean )
	( cd PASA  ; $(MAKE) clean )
	( cd NAPHEAP ; $(MAKE) clean )
	( cd CGDESCENT ; $(MAKE) clean )
	( cd SuiteSparseX ; $(MAKE) clean )
