#  Standard GALAHAD HSL makefile definitions

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

SHELL = /bin/$(BINSHELL)

ifeq "$(PRECIS)" "single_64"
  DPREC = -DREAL_32 -DINTEGER_64 $(QUADREAL)
  HSL_PRECIS = s64
  INTEGER = 64bit
else ifeq "$(PRECIS)" "quadruple_64"
  DPREC = -DREAL_128 -DINTEGER_64 $(QUADREAL)
  HSL_PRECIS = q64
  INTEGER = 64bit
else ifeq "$(PRECIS)" "double_64"
  DPREC = -DINTEGER_64 $(QUADREAL)
  HSL_PRECIS = d64
  INTEGER = 64bit
else ifeq "$(PRECIS)" "single"
  DPREC = -DREAL_32 $(QUADREAL)
  HSL_PRECIS = s
  INTEGER = 32bit
else ifeq "$(PRECIS)" "quadruple"
  DPREC = -DREAL_128 $(QUADREAL)
  HSL_PRECIS = q
  INTEGER = 32bit
else
  DPREC = $(QUADREAL)
  HSL_PRECIS = d
  INTEGER = 32bit
endif

#  compiler flags

ifeq "$(INTEGER)" "64bit"
  FFLAGS = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F90) $(USUAL) \
               $(DPREC) -I $(GALAHAD)/include $(I8)
  FFLAGSS   = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F90) $(SPECIAL) \
                 $(DPREC) -I $(GALAHAD)/include $(I8)
  FFLAGSN   = $(BASIC) $(NOOPTIMIZATION) $(DEBUG) $(MODULES) $(F90) \
                 $(DPREC) -I $(GALAHAD)/include $(I8)
  FFLAGS77 = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F77) $(USUAL) \
               $(DPREC) -I $(GALAHAD)/include $(I8)
  FFLAGS77S = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F77) $(SPECIAL) \
                 $(DPREC) -I $(GALAHAD)/include $(I8)
  FFLAGS95  = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F95) $(USUAL) \
                 $(DPREC) -I $(GALAHAD)/include  $(I8)
  FFLAGS95S = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F95) $(SPECIAL) \
                 $(DPREC) -I $(GALAHAD)/include  $(I8)
  FFLAGS95N = $(BASIC) $(NOOPTIMIZATION) $(DEBUG) $(MODULES) $(F95) \
                 $(DPREC) -I $(GALAHAD)/include  $(I8)
  FFLAGSOMP = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F90) $(USUAL) \
                 $(DPREC) -I $(GALAHAD)/include $(OPENMP) $(I8)
else
  FFLAGS = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F90) $(USUAL) \
             $(DPREC) -I $(GALAHAD)/include
  FFLAGSS   = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F90) $(SPECIAL) \
                 $(DPREC) -I $(GALAHAD)/include
  FFLAGSN   = $(BASIC) $(NOOPTIMIZATION) $(DEBUG) $(MODULES) $(F90) \
                 $(DPREC) -I $(GALAHAD)/include
  FFLAGS77 = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F77) $(USUAL) \
               $(DPREC) -I $(GALAHAD)/include
  FFLAGS77S = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F77) $(SPECIAL) \
                 $(DPREC) -I $(GALAHAD)/include
  FFLAGS95  = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F95) $(USUAL) \
                 $(DPREC) -I $(GALAHAD)/include
  FFLAGS95S = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F95) $(SPECIAL) \
                 $(DPREC) -I $(GALAHAD)/include
  FFLAGS95N = $(BASIC) $(NOOPTIMIZATION) $(DEBUG) $(MODULES) $(F95) \
                 $(DPREC) -I $(GALAHAD)/include
  FFLAGSOMP = $(BASIC) $(OPTIMIZATION) $(DEBUG) $(MODULES) $(F90) $(USUAL) \
                 $(DPREC) -I $(GALAHAD)/include $(OPENMP)
endif

#  linking and run flags

RUNFFLAGS =    $(OPTIMIZATION) $(DEBUG) $(MODULES)
RUNFFLAGSOMP = $(OPTIMIZATION) $(DEBUG) $(MODULES) $(OPENMP)

#  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

BLG  = $(OBJ)/libgalahad_blas.a
BLGS = $(OBJS)/libgalahad_blas.a
BLGD = $(OBJD)/libgalahad_blas.a
BLGQ = $(OBJQ)/libgalahad_blas.a
BLGS64 = $(OBJS64)/libgalahad_blas.a
BLGD64 = $(OBJD64)/libgalahad_blas.a
BLGQ64 = $(OBJQ64)/libgalahad_blas.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

HLG  = $(OBJ)/libgalahad_hsl.a
HLGS = $(OBJS)/libgalahad_hsl.a
HLGD = $(OBJD)/libgalahad_hsl.a
HLGQ = $(OBJQ)/libgalahad_hsl.a
HLGS64 = $(OBJS64)/libgalahad_hsl.a
HLGD64 = $(OBJD64)/libgalahad_hsl.a
HLGQ64 = $(OBJQ64)/libgalahad_hsl.a

HCLG  = $(OBJ)/libgalahad_hsl_c.a
HCLGS = $(OBJS)/libgalahad_hsl_c.a
HCLGD = $(OBJD)/libgalahad_hsl_c.a
HCLGQ = $(OBJQ)/libgalahad_hsl_c.a
HCLGS64 = $(OBJS64)/libgalahad_hsl_c.a
HCLGD64 = $(OBJD64)/libgalahad_hsl_c.a
HCLGQ64 = $(OBJQ64)/libgalahad_hsl_c.a

LLG  = $(OBJ)/libgalahad_lapack.a
LLGS = $(OBJS)/libgalahad_lapack.a
LLGD = $(OBJD)/libgalahad_lapack.a
LLGQ = $(OBJQ)/libgalahad_lapack.a
LLGS64 = $(OBJS64)/libgalahad_lapack.a
LLGD64 = $(OBJD64)/libgalahad_lapack.a
LLGQ64 = $(OBJQ64)/libgalahad_lapack.a

M4LG  = $(OBJ)/libgalahad_metis4.a
M4LGS = $(OBJS)/libgalahad_metis4.a
M4LGD = $(OBJD)/libgalahad_metis4.a
M4LGQ = $(OBJQ)/libgalahad_metis4.a
M4LGS64 = $(OBJS64)/libgalahad_metis4.a
M4LGD64 = $(OBJD64)/libgalahad_metis4.a
M4LGQ64 = $(OBJQ64)/libgalahad_metis4.a

M51LG  = $(OBJ)/libgalahad_metis51.a
M51LGS = $(OBJS)/libgalahad_metis51.a
M51LGD = $(OBJD)/libgalahad_metis51.a
M51LGQ = $(OBJQ)/libgalahad_metis51.a
M51LGS64 = $(OBJS64)/libgalahad_metis51.a
M51LGD64 = $(OBJD64)/libgalahad_metis51.a
M51LGQ64 = $(OBJQ64)/libgalahad_metis51.a

M5LG  = $(OBJ)/libgalahad_metis5.a
M5LGS = $(OBJS)/libgalahad_metis5.a
M5LGD = $(OBJD)/libgalahad_metis5.a
M5LGQ = $(OBJQ)/libgalahad_metis5.a
M5LGS64 = $(OBJS64)/libgalahad_metis5.a
M5LGD64 = $(OBJD64)/libgalahad_metis5.a
M5LGQ64 = $(OBJQ64)/libgalahad_metis5.a

MDLG  = $(OBJ)/libgalahad_metis_dummy.a
MDLGS = $(OBJS)/libgalahad_metis_dummy.a
MDLGD = $(OBJD)/libgalahad_metis_dummy.a
MDLGQ = $(OBJQ)/libgalahad_metis_dummy.a
MDLGS64 = $(OBJS64)/libgalahad_metis_dummy.a
MDLGD64 = $(OBJD64)/libgalahad_metis_dummy.a
MDLGQ64 = $(OBJQ64)/libgalahad_metis_dummy.a

#  Libraries used

LIBS = $(HSL) $(METIS4) $(LAPACK) $(BLAS)

#  Archive manipulation strings

ARR = $(AR) $(ARREPFLAGS) $(LG)
RMARFILE = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $(LG)
RMARFILES = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $(LGS)
RMARFILED = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $(LGD)
RMOBFILE = $(GALAHAD)/bin/rmobfile $(RM) $(OBJ)

BARR = $(AR) $(ARREPFLAGS) $(BLG)
BRMARFILE = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $(BLG)

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

LARR = $(AR) $(ARREPFLAGS) $(LLG)
LRMARFILE = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $(LLG)

HARR = $(AR) $(ARREPFLAGS) $(HLG)
HRMARFILE = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $(HLG)
HRMARFILES = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $(HLGS)
HRMARFILED = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $(HLGD)

HCARR = $(AR) $(ARREPFLAGS) $(HCLG)
HCRMARFILE = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $(HCLG)

M4ARR = $(AR) $(ARREPFLAGS) $(M4LG)
M4RMARFILE = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $M4LG)

M5ARR = $(AR) $(ARREPFLAGS) $(M5LG)
M5RMARFILE = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $M5LG)

MDARR = $(AR) $(ARREPFLAGS) $(MDLG)
MDRMARFILE = $(GALAHAD)/bin/rmarfile $(AR) $(GREP) $MDLG)

#  strings

SUCC = precision version) compiled successfully
