#  Main body of the installation makefile for the SPRAL SSIDS package
#  SPRAL SSIDS was developed by Jonathan Hogg (now at Apple) and is
#  available under a BSD licence as part of GALAHAD

#  Nick Gould, for GALAHAD production
#  This version: 2024-12-12

SHELL = /bin/$(BINSHELL)

ifeq "$(PRECIS)" "single_64"
  DPREC = -DREAL_32 -DINTEGER_64
  METIS_64 = _64
else ifeq "$(PRECIS)" "quadruple_64"
  DPREC = -DREAL_128 -DINTEGER_64
  METIS_64 = _64
else ifeq "$(PRECIS)" "double_64"
  DPREC = -DINTEGER_64
  METIS_64 = _64
else ifeq "$(PRECIS)" "single"
  DPREC = -DREAL_32
  METIS_64 =
else ifeq "$(PRECIS)" "quadruple"
  DPREC = -DREAL_128
  METIS_64 =
else
  DPREC =
  METIS_64 =
endif

ifeq "$(HWLOC)" "un"
 DHWLOC = -DSPRAL_NO_HWLOC
else
 DHWLOC = -DSPRAL_HAVE_HWLOC
endif

ifeq "$(GETCPU)" "un"
 DGETCPU = -DSPRAL_NO_SCHED_GETCPU
else
 DGETCPU = -DSPRAL_HAVE_SCHED_GETCPU
endif

GALINCLUDE = $(GALAHAD)/include

#  compiler flags

FFLAGS = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F90) $(USUAL) \
         $(DPREC) -I $(GALINCLUDE)
FFLAGSS = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F90) $(SPECIAL) \
          $(DPREC) -I $(GALINCLUDE)
FFLAGSN = $(BASIC) $(NOOPTIMIZATION) $(DEBUG) $(MODULES) $(F90) \
          $(DPREC) -I $(GALINCLUDE)
FFLAGS77 = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F77) $(USUAL) \
           $(DPREC) -I $(GALINCLUDE)
FFLAGS77S = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F77) $(SPECIAL) \
            $(DPREC) -I $(GALINCLUDE)
FFLAGSOMP = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F90) $(USUAL) \
            $(SOMP) $(DPREC) -I $(GALINCLUDE)
FFLAGSNOMP = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F90) \
             $(SOMP) $(DPREC) -I $(GALINCLUDE)

#  C++ compiler flags

CXXFLAGSOMP   = $(CXXBASIC) $(OPTIMIZATION) $(CXXDEBUG) $(SOMP) \
                 $(DPREC) $(DHWLOC) $(DGETCPU) -I $(GALINCLUDE)
CXXFLAGSNOMP  = $(CXXBASIC) $(NOOPTIMIZATION) $(CXXDEBUG) $(SOMP) \
                 $(DPREC) $(DHWLOC) $(DGETCPU) -I $(GALINCLUDE)

#  CUDA compiler flags

#CUDAFLAGS   = -arch=$(CUDAARCH) -code=$(CUDACODE) $(CUDABASIC) \
#                $(OPTIMIZATION) -I $(GALINCLUDE)
#CUDAFLAGSN  = -arch=$(CUDAARCH) -code=$(CUDACODE) $(CUDABASIC) \
#               $(NOOPTIMIZATION)  -I$(GALINCLUDE)

CUDAFLAGS = $(CUDABASIC) $(CUDAOPTIMIZATION) -I$(GALINCLUDE)
CUDAFLAGSN = $(CUDABASIC) $(CUDANOOPTIMIZATION) -I$(GALINCLUDE)

#  linking and run flags

RUNFFLAGS     = $(OPTIMIZATION) $(DEBUG) $(MODULES)
RUNFFLAGSCUDA = $(OPTIMIZATION) $(MODULES)
RUNFFLAGSOMP  = $(OPTIMIZATION) $(DEBUG) $(MODULES) $(SOMP)

#  names of random libraries

LG  = $(OBJ)/libgalahad.a
LGS = $(OBJS)/libgalahad.a
LGD = $(OBJD)/libgalahad.a
LGQ = $(OBJQ)/libgalahad.a
LGS64 = $(OBJS64)/libgalahad.a
LGD64 = $(OBJD64)/libgalahad.a
LGQ64 = $(OBJQ64)/libgalahad.a

CLG  = $(OBJ)/libgalahad_c.a
CLGS = $(OBJS)/libgalahad_c.a
CLGD = $(OBJD)/libgalahad_c.a
CLGQ = $(OBJQ)/libgalahad_c.a
CLGS64 = $(OBJS64)/libgalahad_c.a
CLGD64 = $(OBJD64)/libgalahad_c.a
CLGQ64 = $(OBJQ64)/libgalahad_c.a

RLG  = $(OBJ)/libgalahad_spral.a
RLGS = $(OBJS)/libgalahad_spral.a
RLGD = $(OBJD)/libgalahad_spral.a
RLGQ = $(OBJQ)/libgalahad_spral.a
RLGS64 = $(OBJS64)/libgalahad_spral.a
RLGD64 = $(OBJD64)/libgalahad_spral.a
RLGQ64 = $(OBJQ64)/libgalahad_spral.a

#  Libraries used

ifeq "$(METIS_64)" "_64"
# LIBS = -L$(OBJ) $(METIS64) $(LAPACK64) $(BLAS64) -lgalahad $(METIS64) $(HSL)
  LIBS = -L$(OBJ) $(METIS64) $(LAPACK) $(BLAS) -lgalahad $(METIS64) $(HSL)
else
  LIBS = -L$(OBJ) $(METIS) $(LAPACK) $(BLAS) -lgalahad $(METIS) $(HSL)
endif

PLIBS = $(LIBS) -lgalahad_problem

#  Archive manipulation strings

RMARFILE = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $(LG)
RMOBFILE = $(GALAHAD)/bin/rmobfile $(RM) $(OBJ)

RARR = $(AR) $(ARREPFLAGS) $(RLG)
RRMARFILE = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $(RLG)

CARR = $(AR) $(ARREPFLAGS) $(CLG)
CRMARFILE = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $(CLG)

#  sed scripts

BLASLAPACKSEDS = $(GALAHAD)/seds/blaslapack_$(PRECIS).sed

#  strings

SUCC = precision version) compiled successfully

#  compilation agenda

SSIDSSS = $(SSIDSS) $(OBJS)/ssidss_single.o
SSIDSDS = $(SSIDSD) $(OBJD)/ssidss_double.o
SSIDSQS = $(SSIDSQ) $(OBJQ)/ssidss_quadruple.o
SSIDSST = $(SSIDSS) $(OBJS)/ssidst_single.o
SSIDSDT = $(SSIDSD) $(OBJD)/ssidst_double.o
SSIDSQT = $(SSIDSQ) $(OBJQ)/ssidst_quadruple.o

SSIDSSS64 = $(SSIDSS64) $(OBJS64)/ssidss_single_64.o
SSIDSDS64 = $(SSIDSD64) $(OBJD64)/ssidss_double_64.o
SSIDSQS64 = $(SSIDSQ64) $(OBJQ64)/ssidss_quadruple_64.o
SSIDSST64 = $(SSIDSS64) $(OBJS64)/ssidst_single_64.o
SSIDSDT64 = $(SSIDSD64) $(OBJD64)/ssidst_double_64.o
SSIDSQT64 = $(SSIDSQ64) $(OBJQ64)/ssidst_quadruple_64.o

RSSIDSSS = $(OBJS)/ssidss_single.o -L$(OBJS) $(SPRAL) $(LIBS)
RSSIDSDS = $(OBJD)/ssidss_double.o -L$(OBJD) $(SPRAL) $(LIBS)
RSSIDSQS = $(OBJQ)/ssidss_quadruple.o -L$(OBJQ) $(SPRAL) $(LIBS)
RSSIDSST = $(OBJS)/ssidst_single.o -L$(OBJS) $(SPRAL) $(LIBS)
RSSIDSDT = $(OBJD)/ssidst_double.o -L$(OBJD) $(SPRAL) $(LIBS)
RSSIDSQT = $(OBJQ)/ssidst_quadruple.o -L$(OBJQ) $(SPRAL) $(LIBS)

RSSIDSSS64 = $(OBJS64)/ssidss_single_64.o -L$(OBJS64) $(SPRAL) $(LIBS)
RSSIDSDS64 = $(OBJD64)/ssidss_double_64.o -L$(OBJD64) $(SPRAL) $(LIBS)
RSSIDSQS64 = $(OBJQ64)/ssidss_quadruple_64.o -L$(OBJQ64) $(SPRAL) $(LIBS)
RSSIDSST64 = $(OBJS64)/ssidst_single_64.o -L$(OBJS64) $(SPRAL) $(LIBS)
RSSIDSDT64 = $(OBJD64)/ssidst_double_64.o -L$(OBJD64) $(SPRAL) $(LIBS)
RSSIDSQT64 = $(OBJQ64)/ssidst_quadruple_64.o -L$(OBJQ64) $(SPRAL) $(LIBS)

CUDAS = $(RLGS)(cuda_nocuda_single.o)
CUDAD = $(RLGD)(cuda_nocuda_double.o)
CUDAQ = $(RLGQ)(cuda_nocuda_quadruple.o)
CUDAS64 = $(RLGS64)(cuda_nocuda_single_64.o)
CUDAD64 = $(RLGD64)(cuda_nocuda_double_64.o)
CUDAQ64 = $(RLGQ64)(cuda_nocuda_quadruple_64.o)

CUDAScuda = $(RLGS)(api_wrappers_single.o) $(RLGS)(cuda_single.o)
CUDADcuda = $(RLGD)(api_wrappers_double.o) $(RLGD)(cuda_double.o)
CUDAQcuda = $(RLGQ)(api_wrappers_quadruple.o) $(RLGQ)(cuda_quadruple.o)
CUDAS64cuda = $(RLGS64)(api_wrappers_single_64.o) $(RLGS64)(cuda_single_64.o)
CUDAD64cuda = $(RLGD64)(api_wrappers_quadruple_64.o) \
              $(RLGD64)(cuda_quadruple_64.o)
CUDAQ64cuda = $(RLGQ64)(api_wrappers_quadruple_64.o) \
              $(RLGQ64)(cuda_quadruple_64.o)

CUDASUSE = $(CUDAS$(CUDA))
CUDADUSE = $(CUDAD$(CUDA))
CUDAQUSE = $(CUDAQ$(CUDA))
GPUSUSE = $(GPUS$(CUDA))
GPUDUSE = $(GPUD$(CUDA))
GPUQUSE = $(GPUQ$(CUDA))
CUDASUSE64 = $(CUDAS64$(CUDA))
CUDADUSE64 = $(CUDAD64$(CUDA))
CUDAQUSE64 = $(CUDAQ64$(CUDA))
GPUSUSE64 = $(GPUS64$(CUDA))
GPUDUSE64 = $(GPUD64$(CUDA))
GPUQUSE64 = $(GPUQ64$(CUDA))

GPUS = $(RLGS)(gpu_subtree_no_cuda_single.o)
GPUScuda = $(RLGS)(gpu_alloc_single.o) $(RLGS)(cpu_solve_single.o) \
           $(RLGS)(gpu_datatypes_single.o) $(RLGS)(gpu_interfaces_single.o) \
           $(RLGS)(gpu_dense_factor_single.o) $(RLGS)(gpu_solve_single.o) \
           $(RLGS)(gpu_smalloc_single.o) $(RLGS)(gpu_factor_single.o) \
           $(RLGS)(gpu_subtree_single.o) $(RLGS)(assemble_single.o) \
           $(RLGS)(dense_factor_single.o) $(RLGS)(reorder_single.o) \
           $(RLGS)(solve_single.o) $(RLGS)(syrk_single.o)
GPUD = $(RLGD)(gpu_subtree_no_cuda_double.o)
GPUDcuda = $(RLGD)(gpu_alloc_double.o) $(RLGD)(cpu_solve_double.o) \
           $(RLGD)(gpu_datatypes_double.o) $(RLGD)(gpu_interfaces_double.o) \
           $(RLGD)(gpu_dense_factor_double.o) $(RLGD)(gpu_solve_double.o) \
           $(RLGD)(gpu_smalloc_double.o) $(RLGD)(gpu_factor_double.o) \
           $(RLGD)(gpu_subtree_double.o) $(RLGD)(assemble_double.o) \
           $(RLGD)(dense_factor_double.o) $(RLGD)(reorder_double.o) \
           $(RLGD)(solve_double.o) $(RLGD)(syrk_double.o)
GPUQ = $(RLGQ)(gpu_subtree_no_cuda_quadruple.o)
GPUQcuda = $(RLGQ)(gpu_alloc_quadruple.o) $(RLGQ)(cpu_solve_quadruple.o) \
           $(RLGQ)(gpu_datatypes_quadruple.o) \
           $(RLGQ)(gpu_interfaces_quadruple.o) \
           $(RLGQ)(gpu_dense_factor_quadruple.o) \
           $(RLGQ)(gpu_solve_quadruple.o) \
           $(RLGQ)(gpu_smalloc_quadruple.o) $(RLGQ)(gpu_factor_quadruple.o) \
           $(RLGQ)(gpu_subtree_quadruple.o) $(RLGQ)(assemble_quadruple.o) \
           $(RLGQ)(dense_factor_quadruple.o) $(RLGQ)(reorder_quadruple.o) \
           $(RLGQ)(solve_quadruple.o) $(RLGQ)(syrk_quadruple.o)
GPUS64 = $(RLGS64)(gpu_subtree_no_cuda_single_64.o)
GPUS64cuda = $(RLGS64)(gpu_alloc_single_64.o) $(RLGS64)(cpu_solve_single_64.o) \
           $(RLGS64)(gpu_datatypes_single_64.o) \
           $(RLGS64)(gpu_interfaces_single_64.o) \
           $(RLGS64)(gpu_dense_factor_single_64.o) \
           $(RLGS64)(gpu_solve_single_64.o) \
           $(RLGS64)(gpu_smalloc_single_64.o) \
           $(RLGS64)(gpu_factor_single_64.o) \
           $(RLGS64)(gpu_subtree_single_64.o) $(RLGS64)(assemble_single_64.o) \
           $(RLGS64)(dense_factor_single_64.o) $(RLGS64)(reorder_single_64.o) \
           $(RLGS64)(solve_single_64.o) $(RLGS64)(syrk_single_64.o)
GPUD64 = $(RLGD64)(gpu_subtree_no_cuda_double_64.o)
GPUD64cuda = $(RLGD64)(gpu_alloc_double_64.o) $(RLGD64)(cpu_solve_double_64.o) \
           $(RLGD64)(gpu_datatypes_double_64.o) \
           $(RLGD64)(gpu_interfaces_double_64.o) \
           $(RLGD64)(gpu_dense_factor_double_64.o) \
           $(RLGD64)(gpu_solve_double_64.o) \
           $(RLGD64)(gpu_smalloc_double_64.o) \
           $(RLGD64)(gpu_factor_double_64.o) \
           $(RLGD64)(gpu_subtree_double_64.o) $(RLGD64)(assemble_double_64.o) \
           $(RLGD64)(dense_factor_double_64.o) $(RLGD64)(reorder_double_64.o) \
           $(RLGD64)(solve_double_64.o) $(RLGD64)(syrk_double_64.o)
GPUQ64 = $(RLGQ64)(gpu_subtree_no_cuda_quadruple_64.o)
GPUQ64cuda = $(RLGQ64)(gpu_alloc_quadruple_64.o) \
           $(RLGQ64)(cpu_solve_quadruple_64.o) \
           $(RLGQ64)(gpu_datatypes_quadruple_64.o) \
           $(RLGQ64)(gpu_interfaces_quadruple_64.o) \
           $(RLGQ64)(gpu_dense_factor_quadruple_64.o) \
           $(RLGQ64)(gpu_solve_quadruple_64.o) \
           $(RLGQ64)(gpu_smalloc_quadruple_64.o) \
           $(RLGQ64)(gpu_factor_quadruple_64.o) \
           $(RLGQ64)(gpu_subtree_quadruple_64.o) \
           $(RLGQ64)(assemble_quadruple_64.o) \
           $(RLGQ64)(dense_factor_quadruple_64.o) \
           $(RLGQ64)(reorder_quadruple_64.o) \
           $(RLGQ64)(solve_quadruple_64.o) $(RLGQ64)(syrk_quadruple_64.o)

SPRALRBS = $(RLGS)(spral_kinds.o) $(RLGS)(spral_kinds_single.o) \
           $(RLGS)(matrix_util_single.o) \
           $(RLGS)(random_single.o) $(RLGS)(rutherford_boeing_single.o)
SPRALRBD = $(RLGD)(spral_kinds.o) $(RLGD)(spral_kinds_double.o) \
           $(RLGD)(matrix_util_double.o) \
           $(RLGD)(random_double.o) $(RLGD)(rutherford_boeing_double.o)
SPRALRBQ = $(RLGQ)(spral_kinds.o) $(RLGQ)(spral_kinds_quadruple.o) \
           $(RLGQ)(matrix_util_quadruple.o) \
           $(RLGQ)(random_quadruple.o) $(RLGQ)(rutherford_boeing_quadruple.o)
SPRALRBS64 = $(RLGS64)(spral_kinds.o) $(RLGS64)(spral_kinds_single_64.o) \
             $(RLGS64)(matrix_util_single_64.o) \
             $(RLGS64)(random_single_64.o) \
             $(RLGS64)(rutherford_boeing_single_64.o)
SPRALRBD64 = $(RLGD64)(spral_kinds.o) $(RLGD64)(spral_kinds_double_64.o) \
             $(RLGD64)(matrix_util_double_64.o) \
             $(RLGD64)(random_double_64.o) \
             $(RLGD64)(rutherford_boeing_double_64.o)
SPRALRBQ64 = $(RLGQ64)(spral_kinds.o) $(RLGQ64)(spral_kinds_quadruple_64.o) \
             $(RLGQ64)(matrix_util_quadruple_64.o) \
             $(RLGQ64)(random_quadruple_64.o) \
             $(RLGQ64)(rutherford_boeing_quadruple_64.o)

SSIDSS = extend basics $(SPRALRBS) $(CUDASUSE) \
         $(RLGS)(compat.o) $(RLGS)(guess_topology.o) \
         $(RLGS)(omp.o) $(RLGS)(profile.o) $(RLGS)(SymbolicSubtree.o) \
         $(RLGS)(NumericSubtree_single.o) \
         $(RLGS)(cholesky_single.o) $(RLGS)(ldlt_app_single.o) \
         $(RLGS)(ldlt_nopiv_single.o) $(RLGS)(ldlt_tpp_single.o) \
         $(RLGS)(wrappers_single.o) \
         $(RLGS)(ThreadStats.o) $(RLGS)(hw_topology.o) \
         $(RLGS)(spral_scaling_single.o) \
         $(RLGS)(match_order_single.o) $(RLGS)(datatypes_single.o) \
         $(RLGS)(core_analyse.o) $(RLGS)(pgm.o) \
         $(RLGS)(inform_single.o) $(RLGS)(contrib_single.o) \
         $(RLGS)(subtree_single.o) $(RLGS)(akeep_single.o) \
         $(RLGS)(blas_iface.o) $(RLGS)(lapack_iface.o) \
         $(RLGS)(cpu_iface_single.o) $(RLGS)(cpu_subtree_single.o) \
         $(RLGS)(profile_iface.o) $(GPUSUSE) \
         $(RLGS)(anal_single.o) $(RLGS)(fkeep_single.o) \
         $(RLGS)(contrib_free_single.o) $(RLGS)(ssids_single.o)
SSIDSD = extend basics $(SPRALRBD) $(CUDADUSE) \
         $(RLGD)(compat.o) $(RLGD)(guess_topology.o) \
         $(RLGD)(omp.o) $(RLGD)(profile.o) $(RLGD)(SymbolicSubtree.o) \
         $(RLGD)(NumericSubtree_double.o) \
         $(RLGD)(cholesky_double.o) $(RLGD)(ldlt_app_double.o) \
         $(RLGD)(ldlt_nopiv_double.o) $(RLGD)(ldlt_tpp_double.o) \
         $(RLGD)(wrappers_double.o) \
         $(RLGD)(ThreadStats.o) $(RLGD)(hw_topology.o) \
         $(RLGD)(spral_scaling_double.o) \
         $(RLGD)(match_order_double.o) $(RLGD)(datatypes_double.o) \
         $(RLGD)(core_analyse.o) $(RLGD)(pgm.o) \
         $(RLGD)(inform_double.o) $(RLGD)(contrib_double.o) \
         $(RLGD)(subtree_double.o) $(RLGD)(akeep_double.o) \
         $(RLGD)(blas_iface.o) $(RLGD)(lapack_iface.o) \
         $(RLGD)(cpu_iface_double.o) $(RLGD)(cpu_subtree_double.o) \
         $(RLGD)(profile_iface.o) $(GPUDUSE) \
         $(RLGD)(anal_double.o) $(RLGD)(fkeep_double.o) \
         $(RLGD)(contrib_free_double.o) $(RLGD)(ssids_double.o)
SSIDSQ = extend basics $(SPRALRBQ) $(CUDAQUSE) \
         $(RLGQ)(compat.o) $(RLGQ)(guess_topology.o) \
         $(RLGQ)(omp.o) $(RLGQ)(profile.o) $(RLGQ)(SymbolicSubtree.o) \
         $(RLGQ)(NumericSubtree_quadruple.o) \
         $(RLGQ)(cholesky_quadruple.o) $(RLGQ)(ldlt_app_quadruple.o) \
         $(RLGQ)(ldlt_nopiv_quadruple.o) $(RLGQ)(ldlt_tpp_quadruple.o) \
         $(RLGQ)(wrappers_quadruple.o) \
         $(RLGQ)(ThreadStats.o) $(RLGQ)(hw_topology.o) \
         $(RLGQ)(spral_scaling_quadruple.o) \
         $(RLGQ)(match_order_quadruple.o) $(RLGQ)(datatypes_quadruple.o) \
         $(RLGQ)(core_analyse.o) $(RLGQ)(pgm.o) \
         $(RLGQ)(inform_quadruple.o) $(RLGQ)(contrib_quadruple.o) \
         $(RLGQ)(subtree_quadruple.o) $(RLGQ)(akeep_quadruple.o) \
         $(RLGQ)(blas_iface.o) $(RLGQ)(lapack_iface.o) \
         $(RLGQ)(cpu_iface_quadruple.o) $(RLGQ)(cpu_subtree_quadruple.o) \
         $(RLGQ)(profile_iface.o) $(GPUQUSE) \
         $(RLGQ)(anal_quadruple.o) $(RLGQ)(fkeep_quadruple.o) \
         $(RLGQ)(contrib_free_quadruple.o) $(RLGQ)(ssids_quadruple.o)
SSIDSS64 = extend basics $(SPRALRBS64) $(CUDASUSE64) \
         $(RLGS64)(compat.o) $(RLGS64)(guess_topology.o) \
         $(RLGS64)(omp.o) $(RLGS64)(profile.o) \
         $(RLGS64)(SymbolicSubtree.o) $(RLGS64)(NumericSubtree_single_64.o) \
         $(RLGS64)(cholesky_single_64.o) $(RLGS64)(ldlt_app_single_64.o) \
         $(RLGS64)(ldlt_nopiv_single_64.o) $(RLGS64)(ldlt_tpp_single_64.o) \
         $(RLGS64)(wrappers_single_64.o) $(RLGS64)(ThreadStats.o) \
         $(RLGS64)(hw_topology.o) \
         $(RLGS64)(spral_scaling_single_64.o) \
         $(RLGS64)(match_order_single_64.o) $(RLGS64)(datatypes_single_64.o) \
         $(RLGS64)(core_analyse.o) $(RLGS64)(pgm.o) \
         $(RLGS64)(inform_single_64.o) $(RLGS64)(contrib_single_64.o) \
         $(RLGS64)(subtree_single_64.o) $(RLGS64)(akeep_single_64.o) \
         $(RLGS64)(blas_iface.o) $(RLGS64)(lapack_iface.o) \
         $(RLGS64)(cpu_iface_single_64.o) $(RLGS64)(cpu_subtree_single_64.o) \
         $(RLGS64)(profile_iface.o) $(GPUSUSE64) \
         $(RLGS64)(anal_single_64.o) $(RLGS64)(fkeep_single_64.o) \
         $(RLGS64)(contrib_free_single_64.o) $(RLGS64)(ssids_single_64.o)
SSIDSD64 = extend basics $(SPRALRBD64) $(CUDADUSE64) \
         $(RLGD64)(compat.o) $(RLGD64)(guess_topology.o) \
         $(RLGD64)(omp.o) $(RLGD64)(profile.o) \
         $(RLGD64)(SymbolicSubtree.o) $(RLGD64)(NumericSubtree_double_64.o) \
         $(RLGD64)(cholesky_double_64.o) $(RLGD64)(ldlt_app_double_64.o) \
         $(RLGD64)(ldlt_nopiv_double_64.o) $(RLGD64)(ldlt_tpp_double_64.o) \
         $(RLGD64)(wrappers_double_64.o) $(RLGD64)(ThreadStats.o) \
         $(RLGD64)(hw_topology.o) \
         $(RLGD64)(spral_scaling_double_64.o) \
         $(RLGD64)(match_order_double_64.o) $(RLGD64)(datatypes_double_64.o) \
         $(RLGD64)(core_analyse.o) $(RLGD64)(pgm.o) \
         $(RLGD64)(inform_double_64.o) $(RLGD64)(contrib_double_64.o) \
         $(RLGD64)(subtree_double_64.o) $(RLGD64)(akeep_double_64.o) \
         $(RLGD64)(blas_iface.o) $(RLGD64)(lapack_iface.o) \
         $(RLGD64)(cpu_iface_double_64.o) $(RLGD64)(cpu_subtree_double_64.o) \
         $(RLGD64)(profile_iface.o) $(GPUDUSE64) \
         $(RLGD64)(anal_double_64.o) $(RLGD64)(fkeep_double_64.o) \
         $(RLGD64)(contrib_free_double_64.o) $(RLGD64)(ssids_double_64.o)
SSIDSQ64 = extend basics $(SPRALRBQ64) $(CUDAQUSE64) \
         $(RLGQ64)(compat.o) $(RLGQ64)(guess_topology.o) \
         $(RLGQ64)(omp.o) $(RLGQ64)(profile.o) \
         $(RLGQ64)(SymbolicSubtree.o) $(RLGQ64)(NumericSubtree_quadruple_64.o) \
         $(RLGQ64)(cholesky_quadruple_64.o) $(RLGQ64)(ldlt_app_quadruple_64.o) \
         $(RLGQ64)(ldlt_nopiv_quadruple_64.o) \
         $(RLGQ64)(ldlt_tpp_quadruple_64.o) \
         $(RLGQ64)(wrappers_quadruple_64.o) $(RLGQ64)(ThreadStats.o) \
         $(RLGQ64)(hw_topology.o) \
         $(RLGQ64)(spral_scaling_quadruple_64.o) \
         $(RLGQ64)(match_order_quadruple_64.o) \
         $(RLGQ64)(datatypes_quadruple_64.o) \
         $(RLGQ64)(core_analyse.o) $(RLGQ64)(pgm.o) \
         $(RLGQ64)(inform_quadruple_64.o) $(RLGQ64)(contrib_quadruple_64.o) \
         $(RLGQ64)(subtree_quadruple_64.o) $(RLGQ64)(akeep_quadruple_64.o) \
         $(RLGQ64)(blas_iface.o) $(RLGQ64)(lapack_iface.o) \
         $(RLGQ64)(cpu_iface_quadruple_64.o) \
         $(RLGQ64)(cpu_subtree_quadruple_64.o) \
         $(RLGQ64)(profile_iface.o) $(GPUQUSE64) \
         $(RLGQ64)(anal_quadruple_64.o) $(RLGQ64)(fkeep_quadruple_64.o) \
         $(RLGQ64)(contrib_free_quadruple_64.o) $(RLGQ64)(ssids_quadruple_64.o)

SSIDSCS = $(SSIDSS) $(CLGS)(ssids_ciface_single.o)
SSIDSCD = $(SSIDSD) $(CLGD)(ssids_ciface_double.o)
SSIDSCQ = $(SSIDSQ) $(CLGQ)(ssids_ciface_quadruple.o)
SSIDSCS64 = $(SSIDSS64) $(CLGS64)(ssids_ciface_single_64.o)
SSIDSCD64 = $(SSIDSD64) $(CLGD64)(ssids_ciface_double_64.o)
SSIDSCQ64 = $(SSIDSQ64) $(CLGQ64)(ssids_ciface_quadruple_64.o)

#  main compilations and runs

all: ssids

# ssids

ssids_silent: ssids_silent_$(PRECIS)
ssids_silent_single: $(SSIDSS)
	$(RANLIB) $(RLGS)
ssids_silent_double: $(SSIDSD)
	$(RANLIB) $(RLGD)
ssids_silent_quadruple: $(SSIDSQ)
	$(RANLIB) $(RLGQ)
ssids_silent_single_64: $(SSIDSS64)
	$(RANLIB) $(RLGS64)
ssids_silent_double_64: $(SSIDSD64)
	$(RANLIB) $(RLGD64)
ssids_silent_quadruple_64: $(SSIDSQ64)
	$(RANLIB) $(RLGQ64)

ssids: ssids_$(PRECIS)
	@printf ' %-21s\n' "GALAHAD: SSIDS ($(PRECIS) $(SUCC)"
ssids_single: $(SSIDSS)
	$(RANLIB) $(RLGS)
ssids_double: $(SSIDSD)
	$(RANLIB) $(RLGD)
ssids_quadruple: $(SSIDSQ)
	$(RANLIB) $(RLGQ)
ssids_single_64: $(SSIDSS64)
	$(RANLIB) $(RLGS64)
ssids_double_64: $(SSIDSD64)
	$(RANLIB) $(RLGD64)
ssids_quadruple_64: $(SSIDSQ64)
	$(RANLIB) $(RLGQ64)

ssids_ciface: ssids_ciface_$(PRECIS)
	@printf ' %-21s\n' "SSIDS C routines ($(PRECIS) $(SUCC)"
ssids_ciface_silent: ssids_ciface_$(PRECIS)
ssids_ciface_single: $(SSIDSCS)
ssids_ciface_double: $(SSIDSCD)
ssids_ciface_quadruple: $(SSIDSCQ)
ssids_ciface_single_64: $(SSIDSCS64)
ssids_ciface_double_64: $(SSIDSCD64)
ssids_ciface_quadruple_64: $(SSIDSCQ64)

# spralrb

spralrb_silent: spralrb_silent_$(PRECIS)
spralrb_silent_single: $(SPRALRBS)
	$(RANLIB) $(RLGS)
spralrb_silent_double: $(SPRALRBD)
	$(RANLIB) $(RLGD)
spralrb_silent_quadruple: $(SPRALRBQ)
	$(RANLIB) $(RLGQ)
spralrb_silent_single_64: $(SPRALRBS64)
	$(RANLIB) $(RLGS64)
spralrb_silent_double_64: $(SPRALRBD64)
	$(RANLIB) $(RLGD64)
spralrb_silent_quadruple_64: $(SPRALRBQ64)
	$(RANLIB) $(RLGQ64)

spralrb: spralrb_$(PRECIS)
	@printf ' %-21s\n' "GALAHAD: SPRALRB ($(PRECIS) $(SUCC)"
spralrb_single: $(SPRALRBS)
	$(RANLIB) $(RLGS)
spralrb_double: $(SPRALRBD)
	$(RANLIB) $(RLGD)
spralrb_quadruple: $(SPRALRBQ)
	$(RANLIB) $(RLGQ)
spralrb_single_64: $(SPRALRBS64)
	$(RANLIB) $(RLGS64)
spralrb_double_64: $(SPRALRBD64)
	$(RANLIB) $(RLGD64)
spralrb_quadruple_64: $(SPRALRBQ64)
	$(RANLIB) $(RLGQ64)

# run spec-sheet example tests

ssidsss: $(SSIDSSS)
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSSS)
#	- ../ssids/run_ssids < ../ssids/ssidss.data
	- ../ssids/run_ssids < ../ssids/ssidss.data \
                             > ../ssids/ssidss.output 2>&1
	cat ../ssids/ssidss.output
	rm ../ssids/run_ssids

ssidsds: $(SSIDSDS)
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSDS)
#	- ../ssids/run_ssids < ../ssids/ssidss.data
	- ../ssids/run_ssids < ../ssids/ssidss.data \
                             > ../ssids/ssidsds.output 2>&1
	cat ../ssids/ssidsds.output
	rm ../ssids/run_ssids

ssidsqs: $(SSIDSQS)
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSQS)
#	- ../ssids/run_ssids < ../ssids/ssidss.data
	- ../ssids/run_ssids < ../ssids/ssidss.data \
                             > ../ssids/ssidsds.output 2>&1
	cat ../ssids/ssidsds.output
	rm ../ssids/run_ssids

ssidsds_valgrind: $(SSIDSDS)
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSDS)
	- valgrind -v --tool=memcheck --leak-check=yes \
            --show-reachable=yes ../ssids/run_ssids < ../ssids/ssidss.data
	rm ../ssids/run_ssids

ssidsds_cuda: $(SSIDSDS)
	cd ../ssids ; $(CUDACOMP) $(CUDAOPENMP) -o run_ssids \
                      $(RSSIDSDS) $(CUDALIBS) $(RUNFFLAGSCUDA) $(SPECIAL)
#	- ../ssids/run_ssids < ../ssids/ssidss.data
	- ../ssids/run_ssids < ../ssids/ssidss.data \
                             > ../ssids/ssidsds.output 2>&1
	cat ../ssids/ssidsds.output
	rm ../ssids/run_ssids

ssidsds_cuda_valgrind: $(SSIDSDS)
	cd ../ssids ; $(CUDACOMP) $(CUDAOPENMP) -o run_ssids \
                      $(RSSIDSDS) $(CUDALIBS) $(RUNFFLAGSCUDA) $(SPECIAL)
	- valgrind -v --tool=memcheck --leak-check=yes \
            --show-reachable=yes ../ssids/run_ssids < ../ssids/ssidss.data
	rm ../ssids/run_ssids

ssidsss_64: $(SSIDSSS64)
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSSS64)
#	- ../ssids/run_ssids < ../ssids/ssidss.data
	- ../ssids/run_ssids < ../ssids/ssidss.data \
                             > ../ssids/ssidss_64.output 2>&1
	cat ../ssids/ssidss_64.output
	rm ../ssids/run_ssids

ssidsds_64: $(SSIDSDS64)
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSDS64)
#	- ../ssids/run_ssids < ../ssids/ssidss.data
	- ../ssids/run_ssids < ../ssids/ssidss.data \
                             > ../ssids/ssidsds_64.output 2>&1
	cat ../ssids/ssidsds_64.output
	rm ../ssids/run_ssids

ssidsqs_64: $(SSIDSDQ64)
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSDQ64)
	- ../ssids/run_ssids < ../ssids/ssidss.data \
                             > ../ssids/ssidsds_64.output 2>&1
	cat ../ssids/ssidsds_64.output
	rm ../ssids/run_ssids

ssidsds_64_cuda: $(SSIDSDS64)
	cd ../ssids ; $(CUDACOMP) $(CUDAOPENMP) -o run_ssids \
                      $(RSSIDSDS64) $(CUDALIBS) $(RUNFFLAGSCUDA) $(SPECIAL)
#	- ../ssids/run_ssids < ../ssids/ssidss.data
	- ../ssids/run_ssids < ../ssids/ssidss.data \
                             > ../ssids/ssidsds_64.output 2>&1
	cat ../ssids/ssidsds_64.output
	rm ../ssids/run_ssids

ssidsds_64_valgrind: $(SSIDSDS64)
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSDS64)
	- valgrind -v --tool=memcheck --leak-check=yes \
            --show-reachable=yes ../ssids/run_ssids < ../ssids/ssidss.data
	rm ../ssids/run_ssids

ssidsds_64_cuda_valgrind: $(SSIDSDS64)
	cd ../ssids ; $(CUDACOMP) $(CUDAOPENMP) -o run_ssids \
                      $(RSSIDSDS64) $(CUDALIBS) $(RUNFFLAGSCUDA) $(SPECIAL)
	- valgrind -v --tool=memcheck --leak-check=yes \
            --show-reachable=yes ../ssids/run_ssids < ../ssids/ssidss.data
	rm ../ssids/run_ssids

# run full tests

ssidsst: $(SSIDSST)
	echo " Exhaustive test of subroutine interface to ssids"
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSST)
#	- ../ssids/run_ssids < ../ssids/ssidss.data
	- ../ssids/run_ssids > ../ssids/ssidst.output 2>&1
	cat ../ssids/ssidst.output
	rm ../ssids/run_ssids

ssidsdt: $(SSIDSDT)
	echo " Exhaustive test of subroutine interface to ssids"
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSDT)
#	- ../ssids/run_ssids
	- ../ssids/run_ssids  > ../ssids/ssidsdt.output 2>&1
	cat ../ssids/ssidsdt.output
	rm ../ssids/run_ssids

ssidsqt: $(SSIDSQT)
	echo " Exhaustive test of subroutine interface to ssids"
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSQT)
#	- ../ssids/run_ssids
	- ../ssids/run_ssids  > ../ssids/ssidsdt.output 2>&1
	cat ../ssids/ssidsdt.output
	rm ../ssids/run_ssids

ssidsdt_gdb: $(SSIDSDT)
	echo " Exhaustive test of subroutine interface to ssids"
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSDT)
	- gdb $(GDB) ./run_ssids
	rm ../ssids/run_ssids

ssidsdt_cuda: $(SSIDSDT)
	cd ../ssids ; $(CUDACOMP) $(CUDAOPENMP) -o run_ssids \
                      $(RSSIDSDT) $(CUDALIBS) $(RUNFFLAGSCUDA) $(SPECIAL)
#	- ../ssids/run_ssids
	- ../ssids/run_ssids > ../ssids/ssidsdt.output 2>&1
	cat ../ssids/ssidsdt.output
	rm ../ssids/run_ssids

ssidsdt_valgrind: $(SSIDSDT)
	echo " Exhaustive test of subroutine interface to ssids"
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSDT)
#	- ../ssids/run_ssids
	- valgrind -v --tool=memcheck --leak-check=yes \
            --show-reachable=yes --track-origins=yes ../ssids/run_ssids
	rm ../ssids/run_ssids

ssidsdt_cuda_valgrind: $(SSIDSDT)
	cd ../ssids ; $(CUDACOMP) $(CUDAOPENMP) -o run_ssids \
                      $(RSSIDSDT) $(CUDALIBS) $(RUNFFLAGSCUDA) $(SPECIAL)
	- valgrind -v --tool=memcheck --leak-check=yes \
            --show-reachable=yes ../ssids/run_ssids
	rm ../ssids/run_ssids


ssidsst_64: $(SSIDSST64)
	echo " Exhaustive test of subroutine interface to ssids"
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSST64)
#	- ../ssids/run_ssids < ../ssids/ssidss.data
	- ../ssids/run_ssids > ../ssids/ssidst_64.output 2>&1
	cat ../ssids/ssidst_64.output
	rm ../ssids/run_ssids

ssidsdt_64: $(SSIDSDT64)
	echo " Exhaustive test of subroutine interface to ssids"
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSDT64)
	- ../ssids/run_ssids
#	- ../ssids/run_ssids  > ../ssids/ssidsdt_64.output 2>&1
#	cat ../ssids/ssidsdt_64.output
	rm ../ssids/run_ssids

ssidsqt_64: $(SSIDSQT64)
	echo " Exhaustive test of subroutine interface to ssids"
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSQT64)
	- ../ssids/run_ssids
#	- ../ssids/run_ssids  > ../ssids/ssidsdt_64.output 2>&1
#	cat ../ssids/ssidsdt_64.output
	rm ../ssids/run_ssids

ssidsdt_64_gdb: $(SSIDSDT64)
	echo " Exhaustive test of subroutine interface to ssids"
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSDT64)
	- gdb $(GDB) ./run_ssids
	rm ../ssids/run_ssids

ssidsdt_64_cuda: $(SSIDSDT64)
	cd ../ssids ; $(CUDACOMP) $(CUDAOPENMP) -o run_ssids \
                      $(RSSIDSDT64) $(CUDALIBS) $(RUNFFLAGSCUDA) $(SPECIAL)
#	- ../ssids/run_ssids
	- ../ssids/run_ssids > ../ssids/ssidsdt_64.output 2>&1
	cat ../ssids/ssidsdt_64.output
	rm ../ssids/run_ssids

ssidsdt_64_valgrind: $(SSIDSDT64)
	echo " Exhaustive test of subroutine interface to ssids"
	cd ../ssids ; $(FORTRAN) $(RUNFFLAGSOMP) $(SPECIAL) \
          -o run_ssids $(RSSIDSDT64)
#	- ../ssids/run_ssids
	- valgrind -v --tool=memcheck --leak-check=yes \
            --show-reachable=yes --track-origins=yes ../ssids/run_ssids
	rm ../ssids/run_ssids

ssidsdt_64_cuda_valgrind: $(SSIDSDT64)
	cd ../ssids ; $(CUDACOMP) $(CUDAOPENMP) -o run_ssids \
                      $(RSSIDSDT64) $(CUDALIBS) $(RUNFFLAGSCUDA) $(SPECIAL)
	- valgrind -v --tool=memcheck --leak-check=yes \
            --show-reachable=yes ../ssids/run_ssids
	rm ../ssids/run_ssids

#  basic packages

extend:
	( cd ../extend ; $(MAKE) -f $(GALAHAD)/makefiles/$(VERSION) \
            extend_silent PRECIS=$(PRECIS) PWD=$(PWD)/../extend )
basics:
	( cd ../general ; $(MAKE) -f $(GALAHAD)/makefiles/$(VERSION) \
            basic_silent PRECIS=$(PRECIS) PWD=$(PWD)/../general )

#  individual compilations

spral_kinds.o: $(RLG)(spral_kinds.o)

$(RLG)(spral_kinds.o): ../spral/spral_kinds.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "spral_kinds  "
	$(CP) ../spral/spral_kinds.F90 $(OBJ)/spral_kinds.F90
	cd $(OBJ) ; $(FORTRAN) -o spral_kinds.o $(FFLAGSOMP) spral_kinds.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o spral_kinds.o $(FFLAGSNOMP) spral_kinds.F90 )
	cd $(OBJ) ; $(RARR) spral_kinds.o ; $(RM) spral_kinds.F90 spral_kinds.o
	$(RRMARFILE) spral_kinds_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

spral_kinds_real.o: $(RLG)(spral_kinds_$(PRECIS).o)

$(RLG)(spral_kinds_$(PRECIS).o): ../spral/spral_kinds_real.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "spral_kinds_real  "
	$(CP) ../spral/spral_kinds_real.F90 $(OBJ)/spral_kinds_$(PRECIS).F90
	cd $(OBJ) ; $(FORTRAN) -o spral_kinds_$(PRECIS).o $(FFLAGSOMP) \
                    spral_kinds_$(PRECIS).F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o spral_kinds_$(PRECIS).o $(FFLAGSNOMP) \
                    spral_kinds_$(PRECIS).F90 )
	cd $(OBJ) ; $(RARR) spral_kinds_$(PRECIS).o ; \
          $(RM) spral_kinds_$(PRECIS).F90 spral_kinds_$(PRECIS).o
	$(RRMARFILE) cuda_$(PRECIS).o
	$(RRMARFILE) cuda_nocuda_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

matrix_util.o: $(RLG)(matrix_util_$(PRECIS).o)

$(RLG)(matrix_util_$(PRECIS).o): ../spral/matrix_util.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "matrix_util  "
	$(CP) ../spral/matrix_util.F90 $(OBJ)/matrix_util.F90
	cd $(OBJ) ; $(FORTRAN) -o matrix_util_$(PRECIS).o \
                      $(FFLAGSOMP) matrix_util.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o matrix_util_$(PRECIS).o \
                      $(FFLAGSNOMP) matrix_util.F90 )
	cd $(OBJ) ; $(RARR) matrix_util_$(PRECIS).o ; \
                      $(RM) matrix_util.F90 matrix_util_$(PRECIS).o
	$(RRMARFILE) spral_scaling_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

random.o: $(RLG)(random_$(PRECIS).o)

$(RLG)(random_$(PRECIS).o): ../spral/random.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "random  "
	$(CP) ../spral/random.F90 $(OBJ)/random.F90
	cd $(OBJ) ; $(FORTRAN) -o random_$(PRECIS).o $(FFLAGSOMP) \
           random.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o random_$(PRECIS).o $(FFLAGSNOMP) \
           random.F90 )
	cd $(OBJ) ; $(RARR) random_$(PRECIS).o ; \
                      $(RM) random.F90 random_$(PRECIS).o
	$(RRMARFILE) rutherford_boeing_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

rutherford_boeing.o: $(RLG)(rutherford_boeing_$(PRECIS).o)

$(RLG)(rutherford_boeing_$(PRECIS).o): ../spral/rutherford_boeing.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "rutherford_boeing  "
	$(CP) ../spral/rutherford_boeing.F90 $(OBJ)/rutherford_boeing.F90
	cd $(OBJ) ; $(FORTRAN) -o rutherford_boeing_$(PRECIS).o \
                      $(FFLAGSOMP) rutherford_boeing.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o rutherford_boeing_$(PRECIS).o \
                      $(FFLAGSNOMP) rutherford_boeing.F90 )
	cd $(OBJ) ; $(RARR) rutherford_boeing_$(PRECIS).o ; \
                      $(RM) rutherford_boeing.F90 rutherford_boeing_$(PRECIS).o
	$(RRMARFILE) ssids.o
	$(MVMODS)
	@printf '[ OK ]\n'

cuda.o: $(RLG)(cuda_$(PRECIS).o)

$(RLG)(cuda_$(PRECIS).o): ../spral/cuda.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "cuda  "
	$(CP) ../spral/cuda.F90 $(OBJ)/cuda.F90
	cd $(OBJ) ; $(FORTRAN) -o cuda_$(PRECIS).o $(FFLAGSOMP) cuda.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o cuda_$(PRECIS).o $(FFLAGSNOMP) cuda.F90 )
	cd $(OBJ) ; $(RARR) cuda_$(PRECIS).o ; $(RM) cuda.F90 cuda_$(PRECIS).o
	$(RRMARFILE) anal_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

cuda_nocuda.o: $(RLG)(cuda_nocuda_$(PRECIS).o)

$(RLG)(cuda_nocuda_$(PRECIS).o): ../spral/cuda_nocuda.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "cuda_nocuda  "
	$(CP) ../spral/cuda_nocuda.F90 $(OBJ)/cuda_nocuda.F90
	cd $(OBJ) ; $(FORTRAN) -o cuda_nocuda_$(PRECIS).o \
                      $(FFLAGSOMP) cuda_nocuda.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o cuda_nocuda_$(PRECIS).o \
                      $(FFLAGSNOMP) cuda_nocuda.F90 )
	cd $(OBJ) ; $(RARR) cuda_nocuda_$(PRECIS).o ; \
                      $(RM) cuda_nocuda.F90 cuda_nocuda_$(PRECIS).o
	$(RRMARFILE) anal_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

compat.o: $(RLG)(compat.o) 

$(RLG)(compat.o): ../spral/compat.cxx \
                  $(GALINCLUDE)/spral_compat.hxx
	@printf ' %-9s %-15s\t\t' "Compiling" "compat  "
	$(CP) ../spral/compat.cxx $(OBJ)/
	cd $(OBJ) ; $(CXX) -I. -o compat.o $(CXXFLAGSOMP) compat.cxx \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CXX) -I. -o compat.o $(CXXFLAGSNCOMP) compat.cxx )
	cd $(OBJ) ; $(RARR) compat.o ; $(RM) compat.cxx compat.o
	@printf '[ OK ]\n'

guess_topology.o: $(RLG)(guess_topology.o)

$(RLG)(guess_topology.o): ../spral/guess_topology.cxx \
                  $(GALINCLUDE)/spral_guess_topology.hxx
	@printf ' %-9s %-15s\t\t' "Compiling" "guess_topology  "
	$(CP) ../spral/guess_topology.cxx $(OBJ)/
	cd $(OBJ) ; $(CXX) -I. -o guess_topology.o $(CXXFLAGSOMP) \
          guess_topology.cxx \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CXX) -I. -o guess_topology.o $(CXXFLAGSNOMP) \
                      guess_topology.cxx )
	cd $(OBJ) ; $(RARR) guess_topology.o ; \
          $(RM) guess_topology.cxx guess_topology.o
	@printf '[ OK ]\n'

omp.o: $(RLG)(omp.o)

$(RLG)(omp.o): ../spral/omp.cxx $(GALINCLUDE)/spral_omp.hxx
	@printf ' %-9s %-15s\t\t' "Compiling" "omp  "
	$(CP) ../spral/omp.cxx $(OBJ)/
	cd $(OBJ) ; $(CXX) -I. -o omp.o $(CXXFLAGSOMP) \
          omp.cxx \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CXX) -I. -o omp.o $(CXXFLAGSNOMP) omp.cxx )
	cd $(OBJ) ; $(RARR) omp.o ; $(RM) omp.cxx omp.o
	@printf '[ OK ]\n'

profile.o: $(RLG)(profile.o)

$(RLG)(profile.o): ../ssids/profile.cxx \
                   $(GALINCLUDE)/ssids_profile.hxx
	@printf ' %-9s %-15s\t\t' "Compiling" "profile  "
	$(CP) ../ssids/profile.cxx $(OBJ)/
	cd $(OBJ) ; $(CXX) -I. -o profile.o $(CXXFLAGSOMP) \
          profile.cxx \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CXX) -I. -o profile.o $(CXXFLAGSNOMP) profile.cxx )
	cd $(OBJ) ; $(RARR) profile.o ; $(RM) profile.cxx profile.o
	@printf '[ OK ]\n'

SymbolicSubtree.o: $(RLG)(SymbolicSubtree.o)

$(RLG)(SymbolicSubtree.o): ../ssids/SymbolicSubtree.cxx \
                           $(GALINCLUDE)/ssids_cpu_SymbolicSubtree.hxx
	@printf ' %-9s %-15s\t\t' "Compiling" "SymbolicSubtree  "
	$(CP) ../ssids/SymbolicSubtree.cxx $(OBJ)/
	cd $(OBJ) ; $(CXX) -I. -o SymbolicSubtree.o $(CXXFLAGSOMP) \
          SymbolicSubtree.cxx \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CXX) -I. -o SymbolicSubtree.o $(CXXFLAGSNOMP) \
                      SymbolicSubtree.cxx )
	cd $(OBJ) ; $(RARR) SymbolicSubtree.o ; \
                      $(RM) SymbolicSubtree.cxx SymbolicSubtree.o
	@printf '[ OK ]\n'

NumericSubtree.o: $(RLG)(NumericSubtree_$(PRECIS).o)

$(RLG)(NumericSubtree_$(PRECIS).o): ../ssids/NumericSubtree.cxx \
                                    $(GALINCLUDE)/ssids_cpu_NumericSubtree.hxx
	@printf ' %-9s %-15s\t\t' "Compiling" "NumericSubtree  "
	$(CP) ../ssids/NumericSubtree.cxx $(OBJ)/
	cd $(OBJ) ; $(CXX) -I. -o NumericSubtree_$(PRECIS).o $(CXXFLAGSOMP) \
          NumericSubtree.cxx \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CXX) -I. -o NumericSubtree_$(PRECIS).o $(CXXFLAGSNOMP) \
                      NumericSubtree.cxx )
	cd $(OBJ) ; $(RARR) NumericSubtree_$(PRECIS).o ; \
                      $(RM) NumericSubtree.cxx NumericSubtree_$(PRECIS).o
	@printf '[ OK ]\n'

cholesky.o: $(RLG)(cholesky_$(PRECIS).o)

$(RLG)(cholesky_$(PRECIS).o): ../ssids/cholesky.cxx \
                              $(GALINCLUDE)/ssids_cpu_kernels_cholesky.hxx
	@printf ' %-9s %-15s\t\t' "Compiling" "cholesky  "
	$(CP) ../ssids/cholesky.cxx $(OBJ)/
	cd $(OBJ) ; $(CXX) -I. -o cholesky_$(PRECIS).o $(CXXFLAGSOMP) \
          cholesky.cxx \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CXX) -I. -o cholesky_$(PRECIS).o $(CXXFLAGSNOMP) \
                      cholesky.cxx )
	cd $(OBJ) ; $(RARR) cholesky_$(PRECIS).o ; \
                       $(RM) cholesky.cxx cholesky_$(PRECIS).o
	@printf '[ OK ]\n'

ldlt_app.o: $(RLG)(ldlt_app_$(PRECIS).o)

$(RLG)(ldlt_app_$(PRECIS).o): ../ssids/ldlt_app.cxx \
                              $(GALINCLUDE)/ssids_cpu_kernels_block_ldlt.hxx
	@printf ' %-9s %-15s\t\t' "Compiling" "ldlt_app  "
	$(CP) ../ssids/ldlt_app.cxx $(OBJ)/
	cd $(OBJ) ; $(CXX) -I. -o ldlt_app_$(PRECIS).o $(CXXFLAGSOMP) \
          ldlt_app.cxx \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CXX) -I. -o ldlt_app_$(PRECIS).o $(CXXFLAGSNOMP) \
                      ldlt_app.cxx )
	cd $(OBJ) ; $(RARR) ldlt_app_$(PRECIS).o ; \
                      $(RM) ldlt_app.cxx ldlt_app_$(PRECIS).o
	@printf '[ OK ]\n'

ldlt_nopiv.o: $(RLG)(ldlt_nopiv_$(PRECIS).o)

$(RLG)(ldlt_nopiv_$(PRECIS).o): ../ssids/ldlt_nopiv.cxx \
                              $(GALINCLUDE)/ssids_cpu_kernels_ldlt_nopiv.hxx
	@printf ' %-9s %-15s\t\t' "Compiling" "ldlt_nopiv  "
	$(CP) ../ssids/ldlt_nopiv.cxx $(OBJ)/
	cd $(OBJ) ; $(CXX) -I. -o ldlt_nopiv_$(PRECIS).o $(CXXFLAGSOMP) \
          ldlt_nopiv.cxx \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CXX) -I. -o ldlt_nopiv_$(PRECIS).o $(CXXFLAGSNOMP) \
                      ldlt_nopiv.cxx )
	cd $(OBJ) ; $(RARR) ldlt_nopiv_$(PRECIS).o ; \
                      $(RM) ldlt_nopiv.cxx ldlt_nopiv_$(PRECIS).o
	@printf '[ OK ]\n'

ldlt_tpp.o: $(RLG)(ldlt_tpp_$(PRECIS).o)

$(RLG)(ldlt_tpp_$(PRECIS).o): ../ssids/ldlt_tpp.cxx \
                              $(GALINCLUDE)/ssids_cpu_kernels_ldlt_tpp.hxx
	@printf ' %-9s %-15s\t\t' "Compiling" "ldlt_tpp  "
	$(CP) ../ssids/ldlt_tpp.cxx $(OBJ)/
	cd $(OBJ) ; $(CXX) -I. -o ldlt_tpp_$(PRECIS).o $(CXXFLAGSOMP) \
          ldlt_tpp.cxx \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CXX) -I. -o ldlt_tpp_$(PRECIS).o $(CXXFLAGSNOMP) \
                      ldlt_tpp.cxx )
	cd $(OBJ) ; $(RARR) ldlt_tpp_$(PRECIS).o ; \
                      $(RM) ldlt_tpp.cxx ldlt_tpp_$(PRECIS).o
	@printf '[ OK ]\n'

wrappers.o: $(RLG)(wrappers_$(PRECIS).o)

$(RLG)(wrappers_$(PRECIS).o): ../ssids/wrappers.cxx \
                              $(GALINCLUDE)/ssids_cpu_kernels_wrappers.hxx
	@printf ' %-9s %-15s\t\t' "Compiling" "wrappers  "
	$(CP) ../ssids/wrappers.cxx $(OBJ)/wrappers.cxx
	cd $(OBJ) ; $(CXX) -I. -o wrappers_$(PRECIS).o $(CXXFLAGSOMP) \
          wrappers.cxx \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CXX) -I. -o wrappers_$(PRECIS).o $(CXXFLAGSNOMP) \
                      wrappers.cxx )
	cd $(OBJ) ; $(RARR) wrappers_$(PRECIS).o ; \
                      $(RM) wrappers.cxx wrappers_$(PRECIS).o
	@printf '[ OK ]\n'

ThreadStats.o: $(RLG)(ThreadStats.o)

$(RLG)(ThreadStats.o): ../ssids/ThreadStats.cxx \
                       $(GALINCLUDE)/ssids_cpu_ThreadStats.hxx
	@printf ' %-9s %-15s\t\t' "Compiling" "ThreadStats  "
	$(CP) ../ssids/ThreadStats.cxx $(OBJ)/
	cd $(OBJ) ; $(CXX) -I. -o ThreadStats.o $(CXXFLAGSOMP) \
          ThreadStats.cxx \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CXX) -I. -o ThreadStats.o $(CXXFLAGSNOMP) \
                      ThreadStats.cxx )
	cd $(OBJ) ; $(RARR) ThreadStats.o ; \
                      $(RM) ThreadStats.cxx ThreadStats.o
	@printf '[ OK ]\n'

hw_topology.o: $(RLG)(hw_topology.o)

$(RLG)(hw_topology.o): ../spral/hw_topology.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "hw_topology  "
	$(CP) ../spral/hw_topology.F90 $(OBJ)/hw_topology.F90
	cd $(OBJ) ; $(FORTRAN) -o hw_topology.o $(FFLAGSOMP) hw_topology.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o hw_topology.o $(FFLAGSNOMP) hw_topology.F90 )
	cd $(OBJ) ; $(RARR) hw_topology.o ; $(RM) hw_topology.F90 hw_topology.o
	$(RRMARFILE) ssids_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

metis4_wrapper.o: $(RLG)(metis4_wrapper.o)

$(RLG)(metis4_wrapper.o): ../spral/metis4_wrapper.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "metis4_wrapper  "
	$(CP) ../spral/metis4_wrapper.F90 $(OBJ)/metis4_wrapper.F90
	cd $(OBJ) ; $(FORTRAN) -o metis4_wrapper.o $(FFLAGSOMP) \
           metis4_wrapper.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o metis4_wrapper.o $(FFLAGSNOMP) \
           metis4_wrapper.F90 )
	cd $(OBJ) ; $(RARR) metis4_wrapper.o ; \
          $(RM) metis4_wrapper.F90 metis4_wrapper.o
	$(RRMARFILE) match_order_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

spral_scaling.o: $(RLG)(spral_scaling_$(PRECIS).o)

$(RLG)(spral_scaling_$(PRECIS).o): ../spral/spral_scaling.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "spral_scaling  "
	$(CP) ../spral/spral_scaling.F90 $(OBJ)/spral_scaling.F90
	cd $(OBJ) ; $(FORTRAN) -o spral_scaling_$(PRECIS).o \
                      $(FFLAGSOMP) spral_scaling.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o spral_scaling_$(PRECIS).o \
                      $(FFLAGSNOMP) spral_scaling.F90 )
	cd $(OBJ) ; $(RARR) spral_scaling_$(PRECIS).o ; \
                      $(RM) spral_scaling.F90 spral_scaling_$(PRECIS).o
	$(RRMARFILE) ssids_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

match_order.o: $(RLG)(match_order_$(PRECIS).o)

$(RLG)(match_order_$(PRECIS).o): ../spral/match_order.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "match_order  "
	$(CP) ../spral/match_order.F90 $(OBJ)/match_order.F90
	cd $(OBJ) ; $(FORTRAN) -o match_order_$(PRECIS).o \
                      $(FFLAGSOMP) match_order.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o match_order_$(PRECIS).o \
                      $(FFLAGSNOMP) match_order.F90 )
	cd $(OBJ) ; $(RARR) match_order_$(PRECIS).o ; \
                      $(RM) match_order.F90 match_order_$(PRECIS).o
	$(RRMARFILE) ssids_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

datatypes.o: $(RLG)(datatypes_$(PRECIS).o)

$(RLG)(datatypes_$(PRECIS).o): ../ssids/datatypes.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "datatypes  "
	$(CP) ../ssids/datatypes.F90 $(OBJ)/datatypes.F90
	cd $(OBJ) ; $(FORTRAN) -o datatypes_$(PRECIS).o \
                      $(FFLAGSOMP) datatypes.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o datatypes_$(PRECIS).o \
                      $(FFLAGSNOMP) datatypes.F90 )
	cd $(OBJ) ; $(RARR) datatypes_$(PRECIS).o ; \
                      $(RM) datatypes.F90 datatypes_$(PRECIS).o
	$(RRMARFILE) cpu_subtree_$(PRECIS).o
	$(RRMARFILE) gpu_alloc_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

core_analyse.o: $(RLG)(core_analyse.o)

$(RLG)(core_analyse.o): ../spral/core_analyse.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "core_analyse  "
	$(CP) ../spral/core_analyse.F90 $(OBJ)/core_analyse.F90
	cd $(OBJ) ; $(FORTRAN) -o core_analyse.o $(FFLAGSOMP) core_analyse.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                  $(FORTRAN) -o core_analyse.o $(FFLAGSNOMP) core_analyse.F90 )
	cd $(OBJ) ; $(RARR) core_analyse.o ; \
          $(RM) core_analyse.F90 core_analyse.o
	$(RRMARFILE) anal.o
	$(MVMODS)
	@printf '[ OK ]\n'

pgm.o: $(RLG)(pgm.o)

$(RLG)(pgm.o): ../spral/pgm.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "pgm  "
	$(CP) ../spral/pgm.F90 $(OBJ)/pgm.F90
	cd $(OBJ) ; $(FORTRAN) -o pgm.o $(FFLAGSOMP) pgm.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o pgm.o $(FFLAGSNOMP) pgm.F90 )
	cd $(OBJ) ; $(RARR) pgm.o ; $(RM) pgm.F90 pgm.o
	$(RRMARFILE) anal.o
	$(MVMODS)
	@printf '[ OK ]\n'

inform.o: $(RLG)(inform_$(PRECIS).o)

$(RLG)(inform_$(PRECIS).o): ../ssids/inform.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "inform  "
	$(CP) ../ssids/inform.F90 $(OBJ)/inform.F90
	cd $(OBJ) ; $(FORTRAN) -o inform_$(PRECIS).o $(FFLAGSOMP) inform.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o inform_$(PRECIS).o $(FFLAGSNOMP) inform.F90 )
	cd $(OBJ) ; $(RARR) inform_$(PRECIS).o ; \
                      $(RM) inform.F90 inform_$(PRECIS).o
	$(RRMARFILE) cpu_subtree_$(PRECIS).o
	$(RRMARFILE) akeep_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

contrib.o: $(RLG)(contrib_$(PRECIS).o)

$(RLG)(contrib_$(PRECIS).o): ../ssids/contrib.F90 \
                             $(GALINCLUDE)/ssids_contrib.h
	@printf ' %-9s %-15s\t\t' "Compiling" "contrib  "
	$(CP) ../ssids/contrib.F90 $(OBJ)/contrib.F90
	cd $(OBJ) ; $(FORTRAN) -o contrib_$(PRECIS).o \
                      $(FFLAGSOMP) contrib.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o contrib_$(PRECIS).o \
                      $(FFLAGSNOMP) contrib.F90 )
	cd $(OBJ) ; $(RARR) contrib_$(PRECIS).o ; \
                      $(RM) contrib.F90 contrib_$(PRECIS).o
	$(RRMARFILE) cpu_subtree_$(PRECIS).o
	$(RRMARFILE) subtree_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

subtree.o: $(RLG)(subtree_$(PRECIS).o)

$(RLG)(subtree_$(PRECIS).o): ../ssids/subtree.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "subtree  "
	$(CP) ../ssids/subtree.F90 $(OBJ)/subtree.F90
	cd $(OBJ) ; $(FORTRAN) -o subtree_$(PRECIS).o \
                      $(FFLAGSOMP) subtree.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o subtree_$(PRECIS).o \
                      $(FFLAGSNOMP) subtree.F90 )
	cd $(OBJ) ; $(RARR) subtree_$(PRECIS).o ; \
                      $(RM) subtree.F90 subtree_$(PRECIS).o
	$(RRMARFILE) cpu_subtree_$(PRECIS).o
	$(RRMARFILE) akeep_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

akeep.o: $(RLG)(akeep_$(PRECIS).o)

$(RLG)(akeep_$(PRECIS).o): ../ssids/akeep.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "akeep  "
	$(CP) ../ssids/akeep.F90 $(OBJ)/akeep.F90
	cd $(OBJ) ; $(FORTRAN) -o akeep_$(PRECIS).o $(FFLAGSOMP) akeep.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o akeep_$(PRECIS).o $(FFLAGSNOMP) akeep.F90 )
	cd $(OBJ) ; $(RARR) akeep_$(PRECIS).o ; \
                      $(RM) akeep.F90 akeep_$(PRECIS).o
	$(RRMARFILE) anal_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

blas_iface.o: $(RLG)(blas_iface.o)

$(RLG)(blas_iface.o): ../ssids/blas_iface.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "blas_iface  "
	$(CP) ../ssids/blas_iface.F90 $(OBJ)/blas_iface.F90
	cd $(OBJ) ; $(FORTRAN) -o blas_iface.o $(FFLAGSOMP) blas_iface.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o blas_iface.o $(FFLAGSNOMP) blas_iface.F90 )
	cd $(OBJ) ; $(RARR) blas_iface.o ; $(RM) blas_iface.F90 blas_iface.o
	$(RRMARFILE) cpu_iface_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

lapack_iface.o: $(RLG)(lapack_iface.o)

$(RLG)(lapack_iface.o): ../ssids/lapack_iface.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "lapack_iface  "
	$(CP) ../ssids/lapack_iface.F90 $(OBJ)/lapack_iface.F90
	cd $(OBJ) ; $(FORTRAN) -o lapack_iface.o $(FFLAGSOMP) lapack_iface.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                  $(FORTRAN) -o lapack_iface.o $(FFLAGSNOMP) lapack_iface.F90 )
	cd $(OBJ) ; $(RARR) lapack_iface.o ; \
          $(RM) lapack_iface.F90 lapack_iface.o
	$(RRMARFILE) cpu_iface_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

cpu_iface.o: $(RLG)(cpu_iface_$(PRECIS).o)

$(RLG)(cpu_iface_$(PRECIS).o): ../ssids/cpu_iface.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "cpu_iface  "
	$(CP) ../ssids/cpu_iface.F90 $(OBJ)/cpu_iface.F90
	cd $(OBJ) ; $(FORTRAN) -o cpu_iface_$(PRECIS).o \
                      $(FFLAGSOMP) cpu_iface.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o cpu_iface_$(PRECIS).o \
                      $(FFLAGSNOMP) cpu_iface.F90 )
	cd $(OBJ) ; $(RARR) cpu_iface_$(PRECIS).o ; \
                      $(RM) cpu_iface.F90 cpu_iface_$(PRECIS).o
	$(RRMARFILE) cpu_subtree_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

cpu_subtree.o: $(RLG)(cpu_subtree_$(PRECIS).o)

$(RLG)(cpu_subtree_$(PRECIS).o): ../ssids/cpu_subtree.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "cpu_subtree  "
	$(CP) ../ssids/cpu_subtree.F90 $(OBJ)/cpu_subtree.F90
	cd $(OBJ) ; $(FORTRAN) -o cpu_subtree_$(PRECIS).o \
                      $(FFLAGSOMP) cpu_subtree.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o cpu_subtree_$(PRECIS).o \
                      $(FFLAGSNOMP) cpu_subtree.F90 )
	cd $(OBJ) ; $(RARR) cpu_subtree_$(PRECIS).o ; \
                      $(RM) cpu_subtree.F90 cpu_subtree_$(PRECIS).o
	$(RRMARFILE) anal_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

profile_iface.o: $(RLG)(profile_iface.o)

$(RLG)(profile_iface.o): ../ssids/profile_iface.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "profile_iface  "
	$(CP) ../ssids/profile_iface.F90 $(OBJ)/profile_iface.F90
	cd $(OBJ) ; $(FORTRAN) -o profile_iface.o $(FFLAGSOMP) \
          profile_iface.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o profile_iface.o $(FFLAGSNOMP) \
                      profile_iface.F90 )
	cd $(OBJ) ; $(RARR) profile_iface.o ; \
           $(RM) profile_iface.F90 profile_iface.o
	$(RRMARFILE) fkeep.o
	$(MVMODS)
	@printf '[ OK ]\n'

gpu_subtree_no_cuda.o: $(RLG)(gpu_subtree_no_cuda_$(PRECIS).o)

$(RLG)(gpu_subtree_no_cuda_$(PRECIS).o): ../ssids/gpu_subtree_no_cuda.F90
	@printf ' %-9s %-15s\t' "Compiling" "gpu_subtree_no_cuda  "
	$(CP) ../ssids/gpu_subtree_no_cuda.F90 $(OBJ)/gpu_subtree_no_cuda.F90
	cd $(OBJ) ; $(FORTRAN) -o gpu_subtree_no_cuda_$(PRECIS).o \
                      $(FFLAGSOMP) gpu_subtree_no_cuda.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o gpu_subtree_no_cuda_$(PRECIS).o \
                      $(FFLAGSNOMP) gpu_subtree_no_cuda.F90 )
	cd $(OBJ) ; $(RARR) gpu_subtree_no_cuda_$(PRECIS).o ; \
          $(RM) gpu_subtree_no_cuda.F90 gpu_subtree_no_cuda_$(PRECIS).o
	$(RRMARFILE) anal_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

$(RLG)(gpu_alloc_$(PRECIS).o): ../ssids/gpu_alloc.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "gpu_alloc  "
	$(CP) ../ssids/gpu_alloc.F90 $(OBJ)/gpu_alloc.F90
	cd $(OBJ) ; $(FORTRAN) -o gpu_alloc_$(PRECIS).o \
                      $(FFLAGSOMP) gpu_alloc.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o gpu_alloc_$(PRECIS).o \
                      $(FFLAGSNOMP) gpu_alloc.F90 )
	cd $(OBJ) ; $(RARR) gpu_alloc_$(PRECIS).o ; \
                      $(RM) gpu_alloc.F90 gpu_alloc_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

$(RLG)(cpu_solve_$(PRECIS).o): ../ssids/cpu_solve.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "cpu_solve  "
	$(CP) ../ssids/cpu_solve.F90 $(OBJ)/cpu_solve.F90
	cd $(OBJ) ; $(FORTRAN) -o cpu_solve_$(PRECIS).o \
                     $(FFLAGSOMP) cpu_solve.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o cpu_solve_$(PRECIS).o \
                      $(FFLAGSNOMP) cpu_solve.F90 )
	cd $(OBJ) ; $(RARR) cpu_solve_$(PRECIS).o ; \
          $(RM) cpu_solve.F90 cpu_solve_$(PRECIS).o
#	$(RRMARFILE) ssids_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

$(RLG)(gpu_datatypes_$(PRECIS).o): ../ssids/gpu_datatypes.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "gpu_datatypes  "
	$(CP) ../ssids/gpu_datatypes.F90 $(OBJ)/gpu_datatypes.F90
	cd $(OBJ) ; $(FORTRAN) -o gpu_datatypes_$(PRECIS).o $(FFLAGSOMP) \
           gpu_datatypes.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o gpu_datatypes_$(PRECIS).o $(FFLAGSNOMP) \
                       gpu_datatypes.F90 )
	cd $(OBJ) ; $(RARR) gpu_datatypes_$(PRECIS).o ; \
          $(RM) gpu_datatypes.F90 gpu_datatypes_$(PRECIS).o
#	$(RRMARFILE) ssids_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

$(RLG)(gpu_interfaces_$(PRECIS).o): ../ssids/gpu_interfaces.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "gpu_interfaces  "
	$(CP) ../ssids/gpu_interfaces.F90 $(OBJ)/gpu_interfaces.F90
	cd $(OBJ) ; $(FORTRAN) -o gpu_interfaces_$(PRECIS).o $(FFLAGSOMP) \
           gpu_interfaces.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o gpu_interfaces_$(PRECIS).o $(FFLAGSNOMP) \
                       gpu_interfaces.F90 )
	cd $(OBJ) ; $(RARR) gpu_interfaces_$(PRECIS).o ; \
          $(RM) gpu_interfaces.F90 gpu_interfaces_$(PRECIS).o
#	$(RRMARFILE) ssids_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

$(RLG)(gpu_dense_factor_$(PRECIS).o): ../ssids/gpu_dense_factor.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "gpu_dense_factor  "
	$(CP) ../ssids/gpu_dense_factor.F90 $(OBJ)/gpu_dense_factor.F90
	cd $(OBJ) ; $(FORTRAN) -o gpu_dense_factor_$(PRECIS).o $(FFLAGSOMP) \
           gpu_dense_factor.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o gpu_dense_factor_$(PRECIS).o $(FFLAGSNOMP) \
                       gpu_dense_factor.F90 )
	cd $(OBJ) ; $(RARR) gpu_dense_factor_$(PRECIS).o ; \
          $(RM) gpu_dense_factor.F90 gpu_dense_factor_$(PRECIS).o
#	$(RRMARFILE) ssids_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

$(RLG)(gpu_solve_$(PRECIS).o): ../ssids/gpu_solve.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "gpu_solve  "
	$(CP) ../ssids/gpu_solve.F90 $(OBJ)/gpu_solve.F90
	cd $(OBJ) ; $(FORTRAN) -o gpu_solve_$(PRECIS).o \
                    $(FFLAGSOMP) gpu_solve.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o gpu_solve_$(PRECIS).o \
                       $(FFLAGSNOMP) gpu_solve.F90 )
	cd $(OBJ) ; $(RARR) gpu_solve_$(PRECIS).o ; \
                      $(RM) gpu_solve.F90 gpu_solve_$(PRECIS).o
#	$(RRMARFILE) ssids_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

$(RLG)(gpu_smalloc_$(PRECIS).o): ../ssids/gpu_smalloc.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "gpu_smalloc  "
	$(CP) ../ssids/gpu_smalloc.F90 $(OBJ)/gpu_smalloc.F90
	cd $(OBJ) ; $(FORTRAN) -o gpu_smalloc_$(PRECIS).o \
                      $(FFLAGSOMP) gpu_smalloc.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o gpu_smalloc_$(PRECIS).o \
                      $(FFLAGSNOMP) gpu_smalloc.F90 )
	cd $(OBJ) ; $(RARR) gpu_smalloc_$(PRECIS).o ; \
          $(RM) gpu_smalloc.F90 gpu_smalloc_$(PRECIS).o
#	$(RRMARFILE) ssids_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

$(RLG)(gpu_factor_$(PRECIS).o): ../ssids/gpu_factor.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "gpu_factor  "
	$(CP) ../ssids/gpu_factor.F90 $(OBJ)/gpu_factor.F90
	cd $(OBJ) ; $(FORTRAN) -o gpu_factor_$(PRECIS).o \
                      $(FFLAGSOMP) gpu_factor.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o gpu_factor_$(PRECIS).o \
                      $(FFLAGSNOMP) gpu_factor.F90 )
	cd $(OBJ) ; $(RARR) gpu_factor_$(PRECIS).o ; \
                      $(RM) gpu_factor.F90 gpu_factor_$(PRECIS).o
#	$(RRMARFILE) ssids_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

gpu_subtree.o: $(RLG)(gpu_subtree_$(PRECIS).o)

$(RLG)(gpu_subtree_$(PRECIS).o): ../ssids/gpu_subtree.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "gpu_subtree  "
	$(CP) ../ssids/gpu_subtree.F90 $(OBJ)/gpu_subtree.F90
	cd $(OBJ) ; $(FORTRAN) -o gpu_subtree_$(PRECIS).o \
                      $(FFLAGSOMP) gpu_subtree.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o gpu_subtree_$(PRECIS).o \
                      $(FFLAGSNOMP) gpu_subtree.F90 )
	cd $(OBJ) ; $(RARR) gpu_subtree_$(PRECIS).o ; \
                      $(RM) gpu_subtree.F90 gpu_subtree_$(PRECIS).o
	$(RRMARFILE) anal_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

api_wrappers.o: $(RLG)(api_wrappers_$(PRECIS).o)

$(RLG)(api_wrappers_$(PRECIS).o): ../spral/api_wrappers.cu
	@printf ' %-9s %-15s\t\t' "Compiling" "api_wrappers  "
	$(CP) ../spral/api_wrappers.cu $(OBJ)/api_wrappers.cu
	cd $(OBJ) ; $(CUDACOMP) -o api_wrappers_$(PRECIS).o \
                      $(CUDAFLAGS) api_wrappers.cu \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CUDACOMP) -o api_wrappers_$(PRECIS).o \
                      $(CUDAFLAGSN) api_wrappers.cu )
	cd $(OBJ) ; $(RARR) api_wrappers_$(PRECIS).o ; \
                      $(RM) api_wrappers.cu api_wrappers_$(PRECIS).o
#	$(RRMARFILE) anal_$(PRECIS).o
#	$(RANLIB) $(RLG)
#	$(MVMODS)
	@printf '[ OK ]\n'

assemble.o: $(RLG)(assemble_$(PRECIS).o)

$(RLG)(assemble_$(PRECIS).o): ../ssids/assemble.cu
	@printf ' %-9s %-15s\t\t' "Compiling" "assemble  "
	$(CP) ../ssids/assemble.cu $(OBJ)/assemble.cu
	cd $(OBJ) ; $(CUDACOMP) -o assemble_$(PRECIS).o \
                      $(CUDAFLAGS) assemble.cu \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CUDACOMP) -o assemble_$(PRECIS).o \
                      $(CUDAFLAGSN) assemble.cu )
	cd $(OBJ) ; $(RARR) assemble_$(PRECIS).o ; \
                      $(RM) assemble.cu assemble_$(PRECIS).o
#	$(RRMARFILE) anal_$(PRECIS).o
#	$(RANLIB) $(RLG)
#	$(MVMODS)
	@printf '[ OK ]\n'

dense_factor.o: $(RLG)(dense_factor_$(PRECIS).o)

$(RLG)(dense_factor_$(PRECIS).o): ../ssids/dense_factor.cu
	@printf ' %-9s %-15s\t\t' "Compiling" "dense_factor  "
	$(CP) ../ssids/dense_factor.cu $(OBJ)/dense_factor.cu
	cd $(OBJ) ; $(CUDACOMP) -o dense_factor_$(PRECIS).o \
           $(CUDAFLAGS) dense_factor.cu \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CUDACOMP) -o dense_factor_$(PRECIS).o $(CUDAFLAGSN) \
                    dense_factor.cu )
	cd $(OBJ) ; $(RARR) dense_factor_$(PRECIS).o ; \
                      $(RM) dense_factor.cu dense_factor_$(PRECIS).o
#	$(RRMARFILE) anal_$(PRECIS).o
#	$(RANLIB) $(RLG)
#	$(MVMODS)
	@printf '[ OK ]\n'

reorder.o: $(RLG)(reorder_$(PRECIS).o)

$(RLG)(reorder_$(PRECIS).o): ../ssids/reorder.cu
	@printf ' %-9s %-15s\t\t' "Compiling" "reorder  "
	$(CP) ../ssids/reorder.cu $(OBJ)/reorder.cu
	cd $(OBJ) ; $(CUDACOMP) -o reorder_$(PRECIS).o $(CUDAFLAGS) reorder.cu \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CUDACOMP) -o reorder_$(PRECIS).o $(CUDAFLAGSN) \
                    reorder.cu )
	cd $(OBJ) ; $(RARR) reorder_$(PRECIS).o ; \
                       $(RM) reorder.cu reorder_$(PRECIS).o
#	$(RRMARFILE) anal_$(PRECIS).o
#	$(RANLIB) $(RLG)
#	$(MVMODS)
	@printf '[ OK ]\n'

solve.o: $(RLG)(solve_$(PRECIS).o)

$(RLG)(solve_$(PRECIS).o): ../ssids/solve.cu
	@printf ' %-9s %-15s\t\t' "Compiling" "solve  "
	$(CP) ../ssids/solve.cu $(OBJ)/solve.cu
	cd $(OBJ) ; $(CUDACOMP) -o solve_$(PRECIS).o $(CUDAFLAGS) solve.cu \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CUDACOMP) -o solve_$(PRECIS).o $(CUDAFLAGSN) \
                    solve.cu )
	cd $(OBJ) ; $(RARR) solve_$(PRECIS).o ; $(RM) solve.cu solve_$(PRECIS).o
#	$(RRMARFILE) anal_$(PRECIS).o
#	$(RANLIB) $(RLG)
#	$(MVMODS)
	@printf '[ OK ]\n'

syrk.o: $(RLG)(syrk_$(PRECIS).o)

$(RLG)(syrk_$(PRECIS).o): ../ssids/syrk.cu
	@printf ' %-9s %-15s\t\t' "Compiling" "syrk  "
	$(CP) ../ssids/syrk.cu $(OBJ)/syrk.cu
	cd $(OBJ) ; $(CUDACOMP) -o syrk_$(PRECIS).o $(CUDAFLAGS) syrk.cu \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(CUDACOMP) -o syrk_$(PRECIS).o $(CUDAFLAGSN) \
                    syrk.cu )
	cd $(OBJ) ; $(RARR) syrk_$(PRECIS).o ; $(RM) syrk.cu syrk_$(PRECIS).o
#	$(RRMARFILE) anal_$(PRECIS).o
#	$(RANLIB) $(RLG)
#	$(MVMODS)
	@printf '[ OK ]\n'

anal.o: $(RLG)(anal_$(PRECIS).o)

$(RLG)(anal_$(PRECIS).o): ../ssids/anal.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "anal  "
	$(CP) ../ssids/anal.F90 $(OBJ)/anal.F90
	cd $(OBJ) ; $(FORTRAN) -o anal_$(PRECIS).o $(FFLAGSOMP) anal.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o anal_$(PRECIS).o $(FFLAGSNOMP) anal.F90 )
	cd $(OBJ) ; $(RARR) anal_$(PRECIS).o ; $(RM) anal.F90 anal_$(PRECIS).o
	$(RRMARFILE) ssids_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

fkeep.o: $(RLG)(fkeep_$(PRECIS).o)

$(RLG)(fkeep_$(PRECIS).o): ../ssids/fkeep.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "fkeep  "
	$(CP) ../ssids/fkeep.F90 $(OBJ)/fkeep.F90
	cd $(OBJ) ; $(FORTRAN) -o fkeep_$(PRECIS).o $(FFLAGSOMP) fkeep.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o fkeep_$(PRECIS).o $(FFLAGSNOMP) fkeep.F90 )
	cd $(OBJ) ; $(RARR) fkeep_$(PRECIS).o ; \
                      $(RM) fkeep.F90 fkeep_$(PRECIS).o
	$(RRMARFILE) ssids_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

contrib_free.o: $(RLG)(contrib_free_$(PRECIS).o)

$(RLG)(contrib_free_$(PRECIS).o): ../ssids/contrib_free.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "contrib_free  "
	$(CP) ../ssids/contrib_free.F90 $(OBJ)/contrib_free.F90
	cd $(OBJ) ; $(FORTRAN) -o contrib_free_$(PRECIS).o $(FFLAGSOMP) \
                     contrib_free.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o contrib_free_$(PRECIS).o $(FFLAGSNOMP) \
                       contrib_free.F90 )
	cd $(OBJ) ; $(RARR) contrib_free_$(PRECIS).o ; \
          $(RM) contrib_free.F90 contrib_free_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

ssids.o: $(RLG)(ssids_$(PRECIS).o)

$(RLG)(ssids_$(PRECIS).o): ../ssids/ssids.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "ssids  "
	$(CP) ../ssids/ssids.F90 $(OBJ)/ssids.F90
	cd $(OBJ) ; $(FORTRAN) -o ssids_$(PRECIS).o $(FFLAGSOMP) ssids.F90 \
                 || ( printf ' %-26s' "=> Disabling optimization " ; \
                    $(FORTRAN) -o ssids_$(PRECIS).o $(FFLAGSNOMP) ssids.F90 )
	cd $(OBJ) ; $(RARR) ssids_$(PRECIS).o ; \
                      $(RM) ssids.F90 ssids_$(PRECIS).o
	$(RMARFILE) sls_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

#  C interface

ssids_ciface.o: $(CLG)(ssids_ciface_$(PRECIS).o)

$(CLG)(ssids_ciface_$(PRECIS).o): ../ssids/C/ssids_ciface.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "ssids_ciface"
	$(CP) ../ssids/C/ssids_ciface.F90 $(OBJ)/ssids_ciface.F90
	cd $(OBJ) ; $(FORTRAN) -o ssids_ciface_$(PRECIS).o $(FFLAGSOMP) \
                      ssids_ciface.F90
	cd $(OBJ) ; $(CARR) ssids_ciface_$(PRECIS).o ; \
                    $(RM) ssids_ciface.F90 ssids_ciface_$(PRECIS).o
	$(CRMARFILE) sls_ciface_$(PRECIS).o
	$(MVMODS)
	@printf '[ OK ]\n'

#  test programs

ssidss.o: $(OBJ)/ssidss_$(PRECIS).o

$(OBJ)/ssidss_$(PRECIS).o: ../ssids/ssidss.f90
	@printf ' %-9s %-15s\t\t' "Compiling" "ssidss  "
	$(SED) -f $(SEDS) ../ssids/ssidss.f90 > $(OBJ)/ssidss.f90
	cd $(OBJ) ; $(FORTRAN) -o ssidss_$(PRECIS).o $(FFLAGSOMP) ssidss.f90
	rm $(OBJ)/*.f90
	@printf '[ OK ]\n'

ssidst.o: $(OBJ)/ssidst_$(PRECIS).o

$(OBJ)/ssidst_$(PRECIS).o: ../ssids/ssidst.F90
	@printf ' %-9s %-15s\t\t' "Compiling" "ssidst  "
	$(CP) ../ssids/ssidst.F90 $(OBJ)/ssidst.F90
	cd $(OBJ) ; $(FORTRAN) -o ssidst_$(PRECIS).o $(FFLAGSS) ssidst.F90
	rm $(OBJ)/*.F90
	@printf '[ OK ]\n'

#  book keeping

clean:
	@printf ' %-9s %-15s\t\t' "Cleaning $(PRECIS) precision spral"
	$(RM) $(LGS) $(LGD) $(OBJ)/ssids*.o $(OBJ)/libgalahad_spral.a \
                            $(MOD)/spral*
	@printf '[ OK ]\n'

cleanall:
	@printf ' %-14s\t\t' \
          "Removing all $(PRECIS) precision object and module files"
	$(RM) -r $(OBJ)/* $(MOD)/*
	@printf '[ OK ]\n'

rmssids:
	@printf ' %-9s %-15s\t\t' "Removing" "ssids from archive "
	$(RRMARFILE) ssids_$(PRECIS).o
	@printf '[ OK ]\n'
