# This file is modified for building BLAS and LAPACK libraries
# for GNAT.
#
#  Top Level Makefile for LAPACK
#  Version 3.0
#  June 30, 1999
#

include make.inc

#all: install lib testing blas_testing timing blas_timing
all:
	$(MAKE) f2clib
	$(MAKE) blaslib
	$(MAKE) install
	$(MAKE) lib
	$(MAKE) libgnalasup.a

#lib: lapacklib tmglib
lib:
	$(MAKE) f2clib
	$(MAKE) lapacklib
	$(MAKE) tmglib

clean: cleanlib cleantesting cleantiming cleangnalasup

install:
	cd INSTALL; $(MAKE); ./testlsame; ./testslamch; \
	./testdlamch; ./testsecond; ./testdsecnd; \
	cp lsame.c ../BLAS/SRC/; cp lsame.c ../SRC; \
	cp slamch.c ../SRC/; cp dlamch.c ../SRC/; \
	cp second.c ../SRC/; cp dsecnd.c ../SRC/

blaslib:
	$(MAKE) -C BLAS/SRC

cblaswrap:
	$(MAKE) -C BLAS/WRAP libcblaswr.a && cp BLAS/WRAP/libcblaswr.a .

fblaswrap:
	$(MAKE) -C BLAS/WRAP libfblaswr.a && cp BLAS/WRAP/libfblaswr.a .

lapacklib:
	$(MAKE) -C SRC

tmglib:
	$(MAKE) -C TESTING/MATGEN

f2clib:
	$(MAKE) -C F2CLIBS/libF77
	$(MAKE) -C F2CLIBS/libI77

testing:
	$(MAKE) -C TESTING

blas_testing:
	$(MAKE) -C BLAS/TESTING -f Makeblat1
	cd BLAS
	./xblat1s > sblat1.out; \
	./xblat1d > dblat1.out; \
	./xblat1c > cblat1.out; \
	./xblat1z > zblat1.out
	cd ..

	$(MAKE) -C BLAS/TESTING -f Makeblat2
	cd BLAS
	./xblat2s < sblat2.in ; \
	./xblat2d < dblat2.in ; \
	./xblat2c < cblat2.in ; \
	./xblat2z < zblat2.in
	cd ..

	$(MAKE) -C BLAS/TESTING -f Makeblat3
	cd BLAS
	./xblat3s < sblat3.in ; \
	./xblat3d < dblat3.in ; \
	./xblat3c < cblat3.in ; \
	./xblat3z < zblat3.in
	cd ..

timing:
	$(MAKE) -C TIMING

blas_timing:
	$(MAKE) -C TIMING/LIN
	cd TIMING
	./xlintims < sblasa.in > sblasa.out ; \
	./xlintims < sblasb.in > sblasb.out ; \
	./xlintims < sblasc.in > sblasc.out
	./xlintimd < dblasa.in > dblasa.out ; \
	./xlintimd < dblasb.in > dblasb.out ; \
	./xlintimd < dblasc.in > dblasc.out
	./xlintimc < cblasa.in > cblasa.out ; \
	./xlintimc < cblasb.in > cblasb.out ; \
	./xlintimc < cblasc.in > cblasc.out
	./xlintimz < zblasa.in > zblasa.out ; \
	./xlintimz < zblasb.in > zblasb.out ; \
	./xlintimz < zblasc.in > zblasc.out
	cd ..

cleanlib:
	$(MAKE) -C INSTALL clean
	$(MAKE) -C BLAS/SRC clean
	$(MAKE) -C BLAS/WRAP clean
	$(MAKE) -C SRC clean
	$(MAKE) -C TESTING/MATGEN clean
	$(MAKE) -C F2CLIBS/libF77 clean
	$(MAKE) -C F2CLIBS/libI77 clean

cleantesting:
	$(MAKE) -C TESTING/LIN clean && rm -f *.a )
	$(MAKE) -C TESTING/EIG clean && rm -f *.a )
	cd TESTING && rm -f xlin* xeig* *.out && cd ..

cleantiming:
	$(MAKE) -C TIMING/LIN clean
	$(MAKE) -C TIMING/LIN/LINSRC clean
	$(MAKE) -C TIMING/EIG clean
	$(MAKE) -C TIMING/EIG/EIGSRC clean
	cd TIMING && rm -f xlin* xeig* && cd ..

blaswrap_copy:
	cp INSTALL/blaswrap.h SRC
	cp INSTALL/blaswrap.h BLAS/SRC
	cp INSTALL/blaswrap.h BLAS/TESTING
	cp INSTALL/blaswrap.h BLAS/WRAP
	cp INSTALL/blaswrap.h TESTING/LIN
	cp INSTALL/blaswrap.h TESTING/EIG
	cp INSTALL/blaswrap.h TESTING/MATGEN
	cp INSTALL/blaswrap.h TIMING/EIG
	cp INSTALL/blaswrap.h TIMING/EIG/EIGSRC
	cp INSTALL/blaswrap.h TIMING/LIN
	cp INSTALL/blaswrap.h TIMING/LIN/LINSRC

cleangnalasup:
	-rm -f libgnalasup.a
	-rm -f gnalasup/*.o
	-rm -f cdotzdot.o
	-rmdir gnalasup

distclean: clean
	find . -name \*.o -exec rm {} \;
	find BLAS -perm +111 -type f -name xbla\* -exec rm {} \;
	find INSTALL -perm +111 -type f -name test\* -exec rm {} \;
	find . -name \*.SUMM -exec rm {} \;
	find . -name \*.a -exec rm {} \;
	find . -name \*.out -exec rm {} \;

cdotzdot.o: cdotzdot.c
	$(CC) -c -o $@ $(CFLAGS) $<

libgnalasup.a: cdotzdot.o $(GNALASUPLIB)
	mkdir -p gnalasup && cd gnalasup && \
	$(foreach archive,$(GNALASUPLIB),$(ARCH) x ../$(archive) && ) true
	cd gnalasup && $(ARCH) $(ARCHFLAGS) ../$@ *.o ../cdotzdot.o
	$(RANLIB) libgnalasup.a

