#

M4FUS    = 
M4FUS    = -Dm4fortran_underscore_suffix
M4DOUBLE = -Dm4precision=D
M4F      = -Dm4interfaces=Fortran
M4C      = -Dm4interfaces=C

M4IT     = -Dinteger_t=int
M4ST     = -Dreal_t=float
M4DT     = -Dm4double_t=double
M4CT     = -Dcomplex_t=complex
M4ZT     = -Ddcomplex_t=dcomplex
M4HT     = -Dcharacter_t=char

M4TYPES  = $(M4IT) $(M4ST) $(M4DT) $(M4CT) $(M4ZT) $(M4HT)

CC     = gcc
CFLAGS = -g
CFLAGS = -O3

CC     = cc
CFLAGS = -g
CFLAGS = -O -64 -mips4

F77    = f77
FFLAGS = -O -64 -mips4

# makefile for sparse LU factorization
# John Gilbert, November 1987

.SUFFIXES: .f .o 

all: libgp.a

interfacefiles  = gp_c.o gp_f.o dgstrf_gp_c.o dgstrf_gp_f.o
 
# removed rowcnt.o. Sivan Toledo 2/97

lufiles		= lufact.o lusolv.o ludfs.o lucomp.o \
		  lucopy.o lsolve.o usolve.o ifill.o \
		  rfill.o icopy.o rcopy.o requiv.o \
		  second.o flops.o \
                  ltsolve.o utsolve.o maxmatch.o ordstat.o

lufact: main.o $(lufiles)
	$(F77) $(FFLAGS) -o lufact main.o $(lufiles)

libgp.a: $(interfacefiles) $(lufiles)
	-rm libgp.a
	ar cr libgp.a $(interfacefiles) $(lufiles)

#	ranlib libgp.a

# "requiv" must be compiled without optimization, at least on the SPARC2000,
# because its trick to detect parameter aliasing gets optimized out.

requiv.o: requiv.f
	$(F77) $(FFLAGS) -u -c requiv.f

.f.o:
	$(F77) $(FFLAGS) $(opt) -u -c $<

dgstrf_gp_c.c: gstrf_gp.m4 cinclude.m4
	-rm $@
	m4 -s $(M4DOUBLE) $(M4C) $(M4FUS) $(M4TYPES) gstrf_gp.m4 > $@

dgstrf_gp_f.c: gstrf_gp.m4 cinclude.m4
	-rm $@
	m4 -s $(M4DOUBLE) $(M4F) $(M4FUS) $(M4TYPES) gstrf_gp.m4 > $@

gp_c.c: gp.m4 cinclude.m4
	-rm $@
	m4 -s $(M4DOUBLE) $(M4C) $(M4FUS) $(M4TYPES) gp.m4 > $@

gp_f.c: gp.m4 cinclude.m4
	-rm $@
	m4 -s $(M4DOUBLE) $(M4F) $(M4FUS) $(M4TYPES) gp.m4 > $@

clean:
	/bin/rm *~ *.o *.a