Build CBLAS interfaces for CROTG and ZROTG as well
authorMartin Kroeker <martin@ruby.chemie.uni-freiburg.de>
Tue, 12 Jan 2021 23:27:42 +0000 (00:27 +0100)
committerGitHub <noreply@github.com>
Tue, 12 Jan 2021 23:27:42 +0000 (00:27 +0100)
Makefile

index de0735c..fab403c 100644 (file)
--- a/Makefile
+++ b/Makefile
-TOPDIR = .
-include ./Makefile.system
+TOPDIR = ..
+include $(TOPDIR)/Makefile.system
 
-BLASDIRS = interface driver/level2 driver/level3 driver/others
+SUPPORT_GEMM3M = 0
 
-ifneq ($(DYNAMIC_ARCH), 1)
-BLASDIRS += kernel
+ifeq ($(ARCH), x86)
+SUPPORT_GEMM3M = 1
 endif
 
-ifdef SANITY_CHECK
-BLASDIRS += reference
+ifeq ($(ARCH), x86_64)
+SUPPORT_GEMM3M = 1
 endif
 
-SUBDIRS        = $(BLASDIRS)
-ifneq ($(NO_LAPACK), 1)
-SUBDIRS        += lapack
+ifeq ($(ARCH), ia64)
+SUPPORT_GEMM3M = 1
 endif
 
-RELA =
-ifeq ($(BUILD_RELAPACK), 1)
-RELA = re_lapack
+ifeq ($(ARCH), MIPS)
+SUPPORT_GEMM3M = 1
 endif
 
-ifeq ($(NO_FORTRAN), 1)
-define NOFORTRAN
-1
-endef
-define NO_LAPACK
-1
-endef
-export NOFORTRAN
-export NO_LAPACK
-endif
+ifneq ($(NO_FBLAS), 1)
 
-LAPACK_NOOPT := $(filter-out -O0 -O1 -O2 -O3 -Ofast,$(LAPACK_FFLAGS))
+SBLAS1OBJS    = \
+               saxpy.$(SUFFIX) sswap.$(SUFFIX) \
+               scopy.$(SUFFIX) sscal.$(SUFFIX) \
+               sdot.$(SUFFIX) sdsdot.$(SUFFIX) dsdot.$(SUFFIX) \
+               sasum.$(SUFFIX) ssum.$(SUFFIX) snrm2.$(SUFFIX) \
+               smax.$(SUFFIX) samax.$(SUFFIX) ismax.$(SUFFIX) isamax.$(SUFFIX) \
+               smin.$(SUFFIX) samin.$(SUFFIX) ismin.$(SUFFIX) isamin.$(SUFFIX) \
+               srot.$(SUFFIX) srotg.$(SUFFIX) srotm.$(SUFFIX) srotmg.$(SUFFIX) \
+               saxpby.$(SUFFIX)
 
-SUBDIRS_ALL = $(SUBDIRS) test ctest utest exports benchmark ../laswp ../bench cpp_thread_test
+SBLAS2OBJS    = \
+               sgemv.$(SUFFIX) sger.$(SUFFIX) \
+               strsv.$(SUFFIX) strmv.$(SUFFIX) ssymv.$(SUFFIX) \
+               ssyr.$(SUFFIX)  ssyr2.$(SUFFIX) sgbmv.$(SUFFIX) \
+               ssbmv.$(SUFFIX) sspmv.$(SUFFIX) \
+               sspr.$(SUFFIX)  sspr2.$(SUFFIX) \
+               stbsv.$(SUFFIX) stbmv.$(SUFFIX) \
+               stpsv.$(SUFFIX) stpmv.$(SUFFIX)
 
-.PHONY : all libs netlib $(RELA) test ctest shared install
-.NOTPARALLEL : all libs $(RELA) prof lapack-test install blas-test
+SBLAS3OBJS    = \
+               sgemm.$(SUFFIX) ssymm.$(SUFFIX) strmm.$(SUFFIX) \
+               strsm.$(SUFFIX) ssyrk.$(SUFFIX) ssyr2k.$(SUFFIX) \
+               somatcopy.$(SUFFIX) simatcopy.$(SUFFIX)\
+               sgeadd.$(SUFFIX)
 
-all :: libs netlib $(RELA) tests shared
-       @echo
-       @echo " OpenBLAS build complete. ($(LIB_COMPONENTS))"
-       @echo
-       @echo "  OS               ... $(OSNAME)             "
-       @echo "  Architecture     ... $(ARCH)               "
-ifndef BINARY64
-       @echo "  BINARY           ... 32bit                 "
-else
-       @echo "  BINARY           ... 64bit                 "
-endif
-
-ifdef INTERFACE64
-ifneq ($(INTERFACE64), 0)
-       @echo "  Use 64 bits int    (equivalent to \"-i8\" in Fortran)      "
-endif
-endif
-       @$(CC) --version > /dev/null 2>&1;\
-       if [ $$? -eq 0 ]; then \
-          cverinfo=`$(CC) --version | sed -n '1p'`; \
-          if [ -z "$${cverinfo}" ]; then \
-          cverinfo=`$(CC) --version | sed -n '2p'`; \
-          fi; \
-          echo "  C compiler       ... $(C_COMPILER)  (cmd & version : $${cverinfo})";\
-       else  \
-          echo "  C compiler       ... $(C_COMPILER)  (command line : $(CC))";\
-       fi
-ifeq ($(NOFORTRAN), $(filter 0,$(NOFORTRAN)))
-       @$(FC) --version > /dev/null 2>&1;\
-       if [ $$? -eq 0 ]; then \
-          fverinfo=`$(FC) --version | sed -n '1p'`; \
-          if [ -z "$${fverinfo}" ]; then \
-          fverinfo=`$(FC) --version | sed -n '2p'`; \
-          fi; \
-          echo "  Fortran compiler ... $(F_COMPILER)  (cmd & version : $${fverinfo})";\
-       else \
-          echo "  Fortran compiler ... $(F_COMPILER)  (command line : $(FC))";\
-       fi
-endif
-ifneq ($(OSNAME), AIX)
-       @echo -n "  Library Name     ... $(LIBNAME)"
-else
-       @echo "  Library Name     ... $(LIBNAME)"
+ifeq ($(BUILD_BFLOAT16),1)
+SBBLAS1OBJS    = sbdot.$(SUFFIX)
+SBBLAS2OBJS    = sbgemv.$(SUFFIX)
+SBBLAS3OBJS    = sbgemm.$(SUFFIX)
+SBEXTOBJS      = sbstobf16.$(SUFFIX) sbdtobf16.$(SUFFIX) sbf16tos.$(SUFFIX) dbf16tod.$(SUFFIX)
 endif
 
-ifndef SMP
-       @echo " (Single-threading)  "
-else
-       @echo " (Multi-threading; Max num-threads is $(NUM_THREADS))"
-endif
+DBLAS1OBJS    = \
+               daxpy.$(SUFFIX) dswap.$(SUFFIX) \
+               dcopy.$(SUFFIX) dscal.$(SUFFIX) \
+               ddot.$(SUFFIX) \
+               dasum.$(SUFFIX) dsum.$(SUFFIX) dnrm2.$(SUFFIX) \
+               dmax.$(SUFFIX) damax.$(SUFFIX) idmax.$(SUFFIX) idamax.$(SUFFIX) \
+               dmin.$(SUFFIX) damin.$(SUFFIX) idmin.$(SUFFIX) idamin.$(SUFFIX) \
+               drot.$(SUFFIX) drotg.$(SUFFIX) drotm.$(SUFFIX) drotmg.$(SUFFIX) \
+               daxpby.$(SUFFIX)
+
+DBLAS2OBJS    = \
+               dgemv.$(SUFFIX) dger.$(SUFFIX) \
+               dtrsv.$(SUFFIX) dtrmv.$(SUFFIX) dsymv.$(SUFFIX) \
+               dsyr.$(SUFFIX)  dsyr2.$(SUFFIX) dgbmv.$(SUFFIX) \
+               dsbmv.$(SUFFIX) dspmv.$(SUFFIX) \
+               dspr.$(SUFFIX)  dspr2.$(SUFFIX) \
+               dtbsv.$(SUFFIX) dtbmv.$(SUFFIX) \
+               dtpsv.$(SUFFIX) dtpmv.$(SUFFIX)
+
+DBLAS3OBJS    = \
+               dgemm.$(SUFFIX) dsymm.$(SUFFIX) dtrmm.$(SUFFIX) \
+               dtrsm.$(SUFFIX) dsyrk.$(SUFFIX) dsyr2k.$(SUFFIX) \
+               domatcopy.$(SUFFIX) dimatcopy.$(SUFFIX)\
+               dgeadd.$(SUFFIX) 
+
+CBLAS1OBJS    = \
+               caxpy.$(SUFFIX) caxpyc.$(SUFFIX) cswap.$(SUFFIX) \
+               ccopy.$(SUFFIX) cscal.$(SUFFIX) csscal.$(SUFFIX) \
+               cdotc.$(SUFFIX)  cdotu.$(SUFFIX) \
+               scasum.$(SUFFIX) scsum.$(SUFFIX) scnrm2.$(SUFFIX) \
+               scamax.$(SUFFIX) icamax.$(SUFFIX) \
+               scamin.$(SUFFIX) icamin.$(SUFFIX) \
+               csrot.$(SUFFIX) crotg.$(SUFFIX) \
+               caxpby.$(SUFFIX)
+
+CBLAS2OBJS    = \
+               cgemv.$(SUFFIX) cgeru.$(SUFFIX) cgerc.$(SUFFIX) \
+               ctrsv.$(SUFFIX) ctrmv.$(SUFFIX) \
+               csyr2.$(SUFFIX) cgbmv.$(SUFFIX) \
+               csbmv.$(SUFFIX) \
+               cspr2.$(SUFFIX) \
+               ctbsv.$(SUFFIX) ctbmv.$(SUFFIX) \
+               ctpsv.$(SUFFIX) ctpmv.$(SUFFIX) \
+               chemv.$(SUFFIX) chbmv.$(SUFFIX) \
+               cher.$(SUFFIX)  cher2.$(SUFFIX) \
+               chpmv.$(SUFFIX) chpr.$(SUFFIX)  chpr2.$(SUFFIX)
+
+CBLAS3OBJS    = \
+               cgemm.$(SUFFIX) csymm.$(SUFFIX) ctrmm.$(SUFFIX) \
+               ctrsm.$(SUFFIX) csyrk.$(SUFFIX) csyr2k.$(SUFFIX) \
+               chemm.$(SUFFIX) cherk.$(SUFFIX) cher2k.$(SUFFIX) \
+               comatcopy.$(SUFFIX) cimatcopy.$(SUFFIX)\
+               cgeadd.$(SUFFIX) 
+
+ZBLAS1OBJS    = \
+               zaxpy.$(SUFFIX) zaxpyc.$(SUFFIX) zswap.$(SUFFIX) \
+               zcopy.$(SUFFIX) zscal.$(SUFFIX) zdscal.$(SUFFIX) \
+               zdotc.$(SUFFIX)  zdotu.$(SUFFIX) \
+               dzasum.$(SUFFIX) dzsum.$(SUFFIX) dznrm2.$(SUFFIX) \
+               dzamax.$(SUFFIX) izamax.$(SUFFIX) \
+               dzamin.$(SUFFIX) izamin.$(SUFFIX) \
+               zdrot.$(SUFFIX) zrotg.$(SUFFIX) \
+               zaxpby.$(SUFFIX)
+
+ZBLAS2OBJS    = \
+               zgemv.$(SUFFIX) zgeru.$(SUFFIX) zgerc.$(SUFFIX) \
+               ztrsv.$(SUFFIX) ztrmv.$(SUFFIX) \
+               zsyr2.$(SUFFIX) zgbmv.$(SUFFIX) \
+               zsbmv.$(SUFFIX) \
+               zspr2.$(SUFFIX) \
+               ztbsv.$(SUFFIX) ztbmv.$(SUFFIX) \
+               ztpsv.$(SUFFIX) ztpmv.$(SUFFIX) \
+               zhemv.$(SUFFIX) zhbmv.$(SUFFIX) \
+               zher.$(SUFFIX)  zher2.$(SUFFIX) \
+               zhpmv.$(SUFFIX) zhpr.$(SUFFIX)  zhpr2.$(SUFFIX)
+
+ZBLAS3OBJS    = \
+               zgemm.$(SUFFIX) zsymm.$(SUFFIX) ztrmm.$(SUFFIX) \
+               ztrsm.$(SUFFIX) zsyrk.$(SUFFIX) zsyr2k.$(SUFFIX) \
+               zhemm.$(SUFFIX) zherk.$(SUFFIX) zher2k.$(SUFFIX) \
+               zomatcopy.$(SUFFIX) zimatcopy.$(SUFFIX)\
+               zgeadd.$(SUFFIX) 
+
+ifeq ($(SUPPORT_GEMM3M), 1)
+
+# CBLAS3OBJS   +=  cgemm3m.$(SUFFIX) csymm3m.$(SUFFIX) chemm3m.$(SUFFIX)
+CBLAS3OBJS   +=  cgemm3m.$(SUFFIX)
+
+# ZBLAS3OBJS   +=  zgemm3m.$(SUFFIX) zsymm3m.$(SUFFIX) zhemm3m.$(SUFFIX)
+ZBLAS3OBJS   +=  zgemm3m.$(SUFFIX)
 
-ifeq ($(DYNAMIC_ARCH), 1)
-       @echo "  Supporting multiple $(ARCH) cpu models with minimum requirement for the common code being $(CORE)"
 endif
 
-ifeq ($(USE_OPENMP), 1)
-       @echo
-       @echo " Use OpenMP in the multithreading. Because of ignoring OPENBLAS_NUM_THREADS and GOTO_NUM_THREADS flags, "
-       @echo " you should use OMP_NUM_THREADS environment variable to control the number of threads."
-       @echo
+ifeq ($(EXPRECISION), 1)
+
+QBLAS1OBJS    = \
+               qaxpy.$(SUFFIX) qswap.$(SUFFIX) \
+               qcopy.$(SUFFIX) qscal.$(SUFFIX) \
+               qdot.$(SUFFIX) \
+               qasum.$(SUFFIX) qsum.$(SUFFIX) qnrm2.$(SUFFIX) \
+               qmax.$(SUFFIX) qamax.$(SUFFIX) iqmax.$(SUFFIX) iqamax.$(SUFFIX) \
+               qmin.$(SUFFIX) qamin.$(SUFFIX) iqmin.$(SUFFIX) iqamin.$(SUFFIX) \
+               qrot.$(SUFFIX) qrotg.$(SUFFIX) qrotm.$(SUFFIX) qrotmg.$(SUFFIX) \
+
+QBLAS2OBJS    = \
+               qgemv.$(SUFFIX) qger.$(SUFFIX) \
+               qtrsv.$(SUFFIX) qtrmv.$(SUFFIX) qsymv.$(SUFFIX) \
+               qsyr.$(SUFFIX)  qsyr2.$(SUFFIX) qgbmv.$(SUFFIX) \
+               qsbmv.$(SUFFIX) qspmv.$(SUFFIX) \
+               qspr.$(SUFFIX)  qspr2.$(SUFFIX) \
+               qtbsv.$(SUFFIX) qtbmv.$(SUFFIX) \
+               qtpsv.$(SUFFIX) qtpmv.$(SUFFIX)
+
+QBLAS3OBJS    = \
+               qgemm.$(SUFFIX) qsymm.$(SUFFIX) qtrmm.$(SUFFIX) \
+               qtrsm.$(SUFFIX) qsyrk.$(SUFFIX) qsyr2k.$(SUFFIX)
+
+XBLAS1OBJS    = \
+               xaxpy.$(SUFFIX) xaxpyc.$(SUFFIX) xswap.$(SUFFIX) \
+               xcopy.$(SUFFIX) xscal.$(SUFFIX) xqscal.$(SUFFIX) \
+               xdotc.$(SUFFIX)  xdotu.$(SUFFIX) \
+               qxasum.$(SUFFIX) qxsum.$(SUFFIX) qxnrm2.$(SUFFIX) \
+               qxamax.$(SUFFIX) ixamax.$(SUFFIX) \
+               qxamin.$(SUFFIX) ixamin.$(SUFFIX) \
+               xqrot.$(SUFFIX) xrotg.$(SUFFIX) \
+
+XBLAS2OBJS    = \
+               xgemv.$(SUFFIX) xgeru.$(SUFFIX) xgerc.$(SUFFIX) \
+               xtrsv.$(SUFFIX) xtrmv.$(SUFFIX) xsymv.$(SUFFIX) \
+               xsyr.$(SUFFIX)  xsyr2.$(SUFFIX) xgbmv.$(SUFFIX) \
+               xsbmv.$(SUFFIX) xspmv.$(SUFFIX) \
+               xspr.$(SUFFIX)  xspr2.$(SUFFIX) \
+               xtbsv.$(SUFFIX) xtbmv.$(SUFFIX) \
+               xtpsv.$(SUFFIX) xtpmv.$(SUFFIX) \
+               xhemv.$(SUFFIX) xhbmv.$(SUFFIX) \
+               xher.$(SUFFIX)  xher2.$(SUFFIX) \
+               xhpmv.$(SUFFIX) xhpr.$(SUFFIX)  xhpr2.$(SUFFIX)
+
+XBLAS3OBJS    = \
+               xgemm.$(SUFFIX) xsymm.$(SUFFIX) xtrmm.$(SUFFIX) \
+               xtrsm.$(SUFFIX) xsyrk.$(SUFFIX) xsyr2k.$(SUFFIX) \
+               xhemm.$(SUFFIX) xherk.$(SUFFIX) xher2k.$(SUFFIX)
+
+ifeq ($(SUPPORT_GEMM3M), 1)
+
+XBLAS3OBJS   +=  xgemm3m.$(SUFFIX) xsymm3m.$(SUFFIX) xhemm3m.$(SUFFIX)
+
 endif
 
-ifeq ($(OSNAME), Darwin)
-       @echo "WARNING: If you plan to use the dynamic library $(LIBDYNNAME), you must run:"
-       @echo
-       @echo "\"make PREFIX=/your_installation_path/ install\"."
-       @echo
-       @echo "(or set PREFIX in Makefile.rule and run make install."
-       @echo "If you want to move the .dylib to a new location later, make sure you change"
-       @echo "the internal name of the dylib with:"
-       @echo
-       @echo "install_name_tool -id /new/absolute/path/to/$(LIBDYNNAME) $(LIBDYNNAME)"
 endif
-       @echo
-       @echo "To install the library, you can run \"make PREFIX=/path/to/your/installation install\"."
-       @echo
 
-shared :
-ifneq ($(NO_SHARED), 1)
-ifeq ($(OSNAME), $(filter $(OSNAME),Linux SunOS Android Haiku FreeBSD DragonFly))
-       @$(MAKE) -C exports so
-       @ln -fs $(LIBSONAME) $(LIBPREFIX).so
-       @ln -fs $(LIBSONAME) $(LIBPREFIX).so.$(MAJOR_VERSION)
+ifdef QUAD_PRECISION
+
+QBLAS1OBJS    = \
+               qaxpy.$(SUFFIX) qswap.$(SUFFIX) \
+               qcopy.$(SUFFIX) qscal.$(SUFFIX) \
+               qasum.$(SUFFIX) qsum.$(SUFFIX) qnrm2.$(SUFFIX) \
+               qmax.$(SUFFIX) qamax.$(SUFFIX) iqmax.$(SUFFIX) iqamax.$(SUFFIX) \
+               qmin.$(SUFFIX) qamin.$(SUFFIX) iqmin.$(SUFFIX) iqamin.$(SUFFIX) \
+               qrot.$(SUFFIX) qrotg.$(SUFFIX) qrotm.$(SUFFIX) qrotmg.$(SUFFIX) \
+
+QBLAS2OBJS    = \
+               qgemv.$(SUFFIX) qger.$(SUFFIX) \
+               qtrsv.$(SUFFIX) qtrmv.$(SUFFIX) qsymv.$(SUFFIX) \
+               qsyr.$(SUFFIX)  qsyr2.$(SUFFIX) qgbmv.$(SUFFIX) \
+               qsbmv.$(SUFFIX) qspmv.$(SUFFIX) \
+               qspr.$(SUFFIX)  qspr2.$(SUFFIX) \
+               qtbsv.$(SUFFIX) qtbmv.$(SUFFIX) \
+               qtpsv.$(SUFFIX) qtpmv.$(SUFFIX)
+
+QBLAS3OBJS    = \
+               qgemm.$(SUFFIX) qsymm.$(SUFFIX) qtrmm.$(SUFFIX) \
+               qtrsm.$(SUFFIX) qsyrk.$(SUFFIX) qsyr2k.$(SUFFIX)
+
+XBLAS1OBJS    = \
+               xaxpy.$(SUFFIX) xaxpyc.$(SUFFIX) xswap.$(SUFFIX) \
+               xcopy.$(SUFFIX) xscal.$(SUFFIX) xqscal.$(SUFFIX) \
+               qxasum.$(SUFFIX) qxsum.$(SUFFIX) qxnrm2.$(SUFFIX) \
+               qxamax.$(SUFFIX) ixamax.$(SUFFIX) \
+               qxamin.$(SUFFIX) ixamin.$(SUFFIX) \
+               xqrot.$(SUFFIX) xrotg.$(SUFFIX) \
+
+XBLAS2OBJS    = \
+               xgemv.$(SUFFIX) xgeru.$(SUFFIX) xgerc.$(SUFFIX) \
+               xtrsv.$(SUFFIX) xtrmv.$(SUFFIX) xsymv.$(SUFFIX) \
+               xsyr.$(SUFFIX)  xsyr2.$(SUFFIX) xgbmv.$(SUFFIX) \
+               xsbmv.$(SUFFIX) xspmv.$(SUFFIX) \
+               xspr.$(SUFFIX)  xspr2.$(SUFFIX) \
+               xtbsv.$(SUFFIX) xtbmv.$(SUFFIX) \
+               xtpsv.$(SUFFIX) xtpmv.$(SUFFIX) \
+               xhemv.$(SUFFIX) xhbmv.$(SUFFIX) \
+               xher.$(SUFFIX)  xher2.$(SUFFIX) \
+               xhpmv.$(SUFFIX) xhpr.$(SUFFIX)  xhpr2.$(SUFFIX)
+
+XBLAS3OBJS    = \
+               xgemm.$(SUFFIX) xsymm.$(SUFFIX) xtrmm.$(SUFFIX) \
+               xtrsm.$(SUFFIX) xsyrk.$(SUFFIX) xsyr2k.$(SUFFIX) \
+               xhemm.$(SUFFIX) xherk.$(SUFFIX) xher2k.$(SUFFIX)
+
+ifeq ($(SUPPORT_GEMM3M), 1)
+
+XBLAS3OBJS   +=  xgemm3m.$(SUFFIX) xsymm3m.$(SUFFIX) xhemm3m.$(SUFFIX)
+
 endif
-ifeq ($(OSNAME), $(filter $(OSNAME),OpenBSD NetBSD))
-       @$(MAKE) -C exports so
-       @ln -fs $(LIBSONAME) $(LIBPREFIX).so
 endif
-ifeq ($(OSNAME), Darwin)
-       @$(MAKE) -C exports dyn
-       @ln -fs $(LIBDYNNAME) $(LIBPREFIX).dylib
-       @ln -fs $(LIBDYNNAME) $(LIBPREFIX).$(MAJOR_VERSION).dylib
+
 endif
-ifeq ($(OSNAME), WINNT)
-       @$(MAKE) -C exports dll
+
+HPLOBJS = dgemm.$(SUFFIX) dtrsm.$(SUFFIX) \
+         dgemv.$(SUFFIX)  dtrsv.$(SUFFIX) dger.$(SUFFIX) \
+         idamax.$(SUFFIX) daxpy.$(SUFFIX) dcopy.$(SUFFIX) dscal.$(SUFFIX)
+
+CSBLAS1OBJS   = \
+       cblas_isamax.$(SUFFIX) cblas_isamin.$(SUFFIX) cblas_sasum.$(SUFFIX) cblas_saxpy.$(SUFFIX) \
+       cblas_scopy.$(SUFFIX) cblas_sdot.$(SUFFIX) cblas_sdsdot.$(SUFFIX) cblas_dsdot.$(SUFFIX) \
+       cblas_srot.$(SUFFIX) cblas_srotg.$(SUFFIX) cblas_srotm.$(SUFFIX) cblas_srotmg.$(SUFFIX) \
+       cblas_sscal.$(SUFFIX) cblas_sswap.$(SUFFIX) cblas_snrm2.$(SUFFIX) cblas_saxpby.$(SUFFIX) \
+       cblas_ismin.$(SUFFIX) cblas_ismax.$(SUFFIX) cblas_ssum.$(SUFFIX)
+
+CSBLAS2OBJS   = \
+       cblas_sgemv.$(SUFFIX) cblas_sger.$(SUFFIX) cblas_ssymv.$(SUFFIX) cblas_strmv.$(SUFFIX) \
+       cblas_strsv.$(SUFFIX) cblas_ssyr.$(SUFFIX) cblas_ssyr2.$(SUFFIX) cblas_sgbmv.$(SUFFIX) \
+       cblas_ssbmv.$(SUFFIX) cblas_sspmv.$(SUFFIX) cblas_sspr.$(SUFFIX) cblas_sspr2.$(SUFFIX) \
+       cblas_stbmv.$(SUFFIX) cblas_stbsv.$(SUFFIX) cblas_stpmv.$(SUFFIX) cblas_stpsv.$(SUFFIX)
+
+CSBLAS3OBJS   = \
+       cblas_sgemm.$(SUFFIX) cblas_ssymm.$(SUFFIX) cblas_strmm.$(SUFFIX) cblas_strsm.$(SUFFIX) \
+       cblas_ssyrk.$(SUFFIX) cblas_ssyr2k.$(SUFFIX) cblas_somatcopy.$(SUFFIX)  cblas_simatcopy.$(SUFFIX)\
+       cblas_sgeadd.$(SUFFIX)
+
+ifeq ($(BUILD_BFLOAT16),1)
+CSBBLAS1OBJS = cblas_sbdot.$(SUFFIX)
+CSBBLAS2OBJS = cblas_sbgemv.$(SUFFIX)
+CSBBLAS3OBJS = cblas_sbgemm.$(SUFFIX)
+CSBEXTOBJS   = cblas_sbstobf16.$(SUFFIX) cblas_sbdtobf16.$(SUFFIX) cblas_sbf16tos.$(SUFFIX) cblas_dbf16tod.$(SUFFIX)
 endif
-ifeq ($(OSNAME), CYGWIN_NT)
-       @$(MAKE) -C exports dll
+
+CDBLAS1OBJS   = \
+       cblas_idamax.$(SUFFIX) cblas_idamin.$(SUFFIX) cblas_dasum.$(SUFFIX) cblas_daxpy.$(SUFFIX) \
+       cblas_dcopy.$(SUFFIX) cblas_ddot.$(SUFFIX) \
+       cblas_drot.$(SUFFIX) cblas_drotg.$(SUFFIX) cblas_drotm.$(SUFFIX) cblas_drotmg.$(SUFFIX) \
+       cblas_dscal.$(SUFFIX) cblas_dswap.$(SUFFIX) cblas_dnrm2.$(SUFFIX) cblas_daxpby.$(SUFFIX) \
+       cblas_idmin.$(SUFFIX) cblas_idmax.$(SUFFIX) cblas_dsum.$(SUFFIX)
+
+CDBLAS2OBJS   = \
+       cblas_dgemv.$(SUFFIX) cblas_dger.$(SUFFIX) cblas_dsymv.$(SUFFIX) cblas_dtrmv.$(SUFFIX) \
+       cblas_dtrsv.$(SUFFIX) cblas_dsyr.$(SUFFIX) cblas_dsyr2.$(SUFFIX) cblas_dgbmv.$(SUFFIX) \
+       cblas_dsbmv.$(SUFFIX) cblas_dspmv.$(SUFFIX) cblas_dspr.$(SUFFIX) cblas_dspr2.$(SUFFIX) \
+       cblas_dtbmv.$(SUFFIX) cblas_dtbsv.$(SUFFIX) cblas_dtpmv.$(SUFFIX) cblas_dtpsv.$(SUFFIX)
+
+CDBLAS3OBJS   += \
+       cblas_dgemm.$(SUFFIX) cblas_dsymm.$(SUFFIX) cblas_dtrmm.$(SUFFIX) cblas_dtrsm.$(SUFFIX) \
+       cblas_dsyrk.$(SUFFIX) cblas_dsyr2k.$(SUFFIX) cblas_domatcopy.$(SUFFIX)  cblas_dimatcopy.$(SUFFIX) \
+        cblas_dgeadd.$(SUFFIX) 
+
+CCBLAS1OBJS   = \
+       cblas_icamax.$(SUFFIX) cblas_icamin.$(SUFFIX) cblas_scasum.$(SUFFIX)  cblas_caxpy.$(SUFFIX) \
+       cblas_ccopy.$(SUFFIX) \
+       cblas_cdotc.$(SUFFIX) cblas_cdotu.$(SUFFIX) \
+       cblas_cdotc_sub.$(SUFFIX) cblas_cdotu_sub.$(SUFFIX) \
+       cblas_cscal.$(SUFFIX) cblas_csscal.$(SUFFIX) \
+       cblas_cswap.$(SUFFIX) cblas_scnrm2.$(SUFFIX) \
+       cblas_caxpby.$(SUFFIX) \
+       cblas_icmin.$(SUFFIX) cblas_icmax.$(SUFFIX) cblas_scsum.$(SUFFIX) cblas_csrot.$(SUFFIX) cblas_crotg.$(SUFFIX)
+
+CCBLAS2OBJS   = \
+       cblas_cgemv.$(SUFFIX) cblas_cgerc.$(SUFFIX) cblas_cgeru.$(SUFFIX) \
+       cblas_cgbmv.$(SUFFIX) cblas_chbmv.$(SUFFIX) cblas_chemv.$(SUFFIX) \
+       cblas_cher.$(SUFFIX) cblas_cher2.$(SUFFIX) cblas_chpmv.$(SUFFIX) \
+       cblas_chpr.$(SUFFIX) cblas_chpr2.$(SUFFIX) cblas_ctbmv.$(SUFFIX) \
+       cblas_ctbsv.$(SUFFIX) cblas_ctpmv.$(SUFFIX) cblas_ctpsv.$(SUFFIX) \
+       cblas_ctrmv.$(SUFFIX) cblas_ctrsv.$(SUFFIX)
+
+CCBLAS3OBJS   = \
+       cblas_cgemm.$(SUFFIX) cblas_csymm.$(SUFFIX) cblas_ctrmm.$(SUFFIX) cblas_ctrsm.$(SUFFIX) \
+       cblas_csyrk.$(SUFFIX) cblas_csyr2k.$(SUFFIX) \
+       cblas_chemm.$(SUFFIX) cblas_cherk.$(SUFFIX) cblas_cher2k.$(SUFFIX) \
+       cblas_comatcopy.$(SUFFIX) cblas_cimatcopy.$(SUFFIX)\
+       cblas_cgeadd.$(SUFFIX)
+       
+CXERBLAOBJ = \
+       cblas_xerbla.$(SUFFIX)
+
+
+
+CZBLAS1OBJS   = \
+       cblas_izamax.$(SUFFIX) cblas_izamin.$(SUFFIX) cblas_dzasum.$(SUFFIX)  cblas_zaxpy.$(SUFFIX) \
+       cblas_zcopy.$(SUFFIX) \
+       cblas_zdotc.$(SUFFIX) cblas_zdotu.$(SUFFIX) \
+       cblas_zdotc_sub.$(SUFFIX) cblas_zdotu_sub.$(SUFFIX) \
+       cblas_zscal.$(SUFFIX) cblas_zdscal.$(SUFFIX) \
+       cblas_zswap.$(SUFFIX) cblas_dznrm2.$(SUFFIX) \
+       cblas_zaxpby.$(SUFFIX) \
+       cblas_izmin.$(SUFFIX) cblas_izmax.$(SUFFIX) cblas_dzsum.$(SUFFIX) cblas_zdrot.$(SUFFIX) cblas_zrotg.$(SUFFIX)
+
+
+CZBLAS2OBJS   = \
+       cblas_zgemv.$(SUFFIX) cblas_zgerc.$(SUFFIX) cblas_zgeru.$(SUFFIX) \
+       cblas_zgbmv.$(SUFFIX) cblas_zhbmv.$(SUFFIX) cblas_zhemv.$(SUFFIX) \
+       cblas_zher.$(SUFFIX) cblas_zher2.$(SUFFIX) cblas_zhpmv.$(SUFFIX) \
+       cblas_zhpr.$(SUFFIX) cblas_zhpr2.$(SUFFIX) cblas_ztbmv.$(SUFFIX) \
+       cblas_ztbsv.$(SUFFIX) cblas_ztpmv.$(SUFFIX) cblas_ztpsv.$(SUFFIX) \
+       cblas_ztrmv.$(SUFFIX) cblas_ztrsv.$(SUFFIX)
+
+CZBLAS3OBJS   = \
+       cblas_zgemm.$(SUFFIX) cblas_zsymm.$(SUFFIX) cblas_ztrmm.$(SUFFIX) cblas_ztrsm.$(SUFFIX) \
+       cblas_zsyrk.$(SUFFIX) cblas_zsyr2k.$(SUFFIX) \
+       cblas_zhemm.$(SUFFIX) cblas_zherk.$(SUFFIX) cblas_zher2k.$(SUFFIX)\
+       cblas_zomatcopy.$(SUFFIX) cblas_zimatcopy.$(SUFFIX) \
+       cblas_zgeadd.$(SUFFIX)
+
+
+ifeq ($(SUPPORT_GEMM3M), 1)
+
+# CBLAS3OBJS   +=  cgemm3m.$(SUFFIX) csymm3m.$(SUFFIX) chemm3m.$(SUFFIX)
+CCBLAS3OBJS   +=  cblas_cgemm3m.$(SUFFIX)
+
+# ZBLAS3OBJS   +=  zgemm3m.$(SUFFIX) zsymm3m.$(SUFFIX) zhemm3m.$(SUFFIX)
+CZBLAS3OBJS   +=  cblas_zgemm3m.$(SUFFIX)
+
 endif
+
+
+ifneq ($(NO_CBLAS), 1)
+
+override CFLAGS += -I.
+
+SBLAS1OBJS   += $(CSBLAS1OBJS)
+SBLAS2OBJS   += $(CSBLAS2OBJS)
+SBLAS3OBJS   += $(CSBLAS3OBJS)
+SBBLAS1OBJS  += $(CSBBLAS1OBJS)
+SBBLAS2OBJS  += $(CSBBLAS2OBJS)
+SBBLAS3OBJS  += $(CSBBLAS3OBJS)
+DBLAS1OBJS   += $(CDBLAS1OBJS)
+DBLAS2OBJS   += $(CDBLAS2OBJS)
+DBLAS3OBJS   += $(CDBLAS3OBJS)
+CBLAS1OBJS   += $(CCBLAS1OBJS)
+CBLAS2OBJS   += $(CCBLAS2OBJS)
+CBLAS3OBJS   += $(CCBLAS3OBJS)
+ZBLAS1OBJS   += $(CZBLAS1OBJS)
+ZBLAS2OBJS   += $(CZBLAS2OBJS)
+ZBLAS3OBJS   += $(CZBLAS3OBJS)
+
+SBEXTOBJS     += $(CSBEXTOBJS)
+
+CBAUXOBJS += $(CXERBLAOBJ)
 endif
 
-tests :
-ifeq ($(NOFORTRAN), $(filter 0,$(NOFORTRAN)))
-       touch $(LIBNAME)
-ifndef NO_FBLAS
-       $(MAKE) -C test all
+SBLASOBJS    = $(SBLAS1OBJS) $(SBLAS2OBJS) $(SBLAS3OBJS)
+SBBLASOBJS   = $(SBBLAS1OBJS) $(SBBLAS2OBJS) $(SBBLAS3OBJS)
+DBLASOBJS    = $(DBLAS1OBJS) $(DBLAS2OBJS) $(DBLAS3OBJS)
+QBLASOBJS    = $(QBLAS1OBJS) $(QBLAS2OBJS) $(QBLAS3OBJS)
+CBLASOBJS    = $(CBLAS1OBJS) $(CBLAS2OBJS) $(CBLAS3OBJS)
+ZBLASOBJS    = $(ZBLAS1OBJS) $(ZBLAS2OBJS) $(ZBLAS3OBJS)
+XBLASOBJS    = $(XBLAS1OBJS) $(XBLAS2OBJS) $(XBLAS3OBJS)
+
+#SLAPACKOBJS   = \
+#      sgetrf.$(SUFFIX) sgetrs.$(SUFFIX) spotrf.$(SUFFIX) sgetf2.$(SUFFIX) \
+#      spotf2.$(SUFFIX) slaswp.$(SUFFIX) sgesv.$(SUFFIX) slauu2.$(SUFFIX)  \
+#      slauum.$(SUFFIX) strti2.$(SUFFIX) strtri.$(SUFFIX) spotri.$(SUFFIX)
+
+SLAPACKOBJS    = \
+       sgetrf.$(SUFFIX) sgetrs.$(SUFFIX) spotrf.$(SUFFIX) sgetf2.$(SUFFIX) \
+       spotf2.$(SUFFIX) slaswp.$(SUFFIX) sgesv.$(SUFFIX) slauu2.$(SUFFIX)  \
+       slauum.$(SUFFIX) strti2.$(SUFFIX) strtri.$(SUFFIX) strtrs.$(SUFFIX)
+
+
+#DLAPACKOBJS   = \
+#      dgetrf.$(SUFFIX) dgetrs.$(SUFFIX) dpotrf.$(SUFFIX) dgetf2.$(SUFFIX) \
+#      dpotf2.$(SUFFIX) dlaswp.$(SUFFIX) dgesv.$(SUFFIX) dlauu2.$(SUFFIX)  \
+#      dlauum.$(SUFFIX) dtrti2.$(SUFFIX) dtrtri.$(SUFFIX) dpotri.$(SUFFIX)
+
+DLAPACKOBJS    = \
+       dgetrf.$(SUFFIX) dgetrs.$(SUFFIX) dpotrf.$(SUFFIX) dgetf2.$(SUFFIX) \
+       dpotf2.$(SUFFIX) dlaswp.$(SUFFIX) dgesv.$(SUFFIX) dlauu2.$(SUFFIX)  \
+       dlauum.$(SUFFIX) dtrti2.$(SUFFIX) dtrtri.$(SUFFIX) dtrtrs.$(SUFFIX)
+
+
+QLAPACKOBJS    = \
+       qgetf2.$(SUFFIX) qgetrf.$(SUFFIX) qlauu2.$(SUFFIX) qlauum.$(SUFFIX) \
+       qpotf2.$(SUFFIX) qpotrf.$(SUFFIX) qtrti2.$(SUFFIX) qtrtri.$(SUFFIX) \
+       qlaswp.$(SUFFIX) qtrtrs.$(SUFFIX) qgesv.$(SUFFIX)  qpotri.$(SUFFIX) \
+       qtrtrs.$(SUFFIX)
+
+#CLAPACKOBJS   = \
+#      cgetrf.$(SUFFIX) cgetrs.$(SUFFIX) cpotrf.$(SUFFIX) cgetf2.$(SUFFIX) \
+#      cpotf2.$(SUFFIX) claswp.$(SUFFIX) cgesv.$(SUFFIX) clauu2.$(SUFFIX) \
+#      clauum.$(SUFFIX) ctrti2.$(SUFFIX) ctrtri.$(SUFFIX) cpotri.$(SUFFIX)
+
+CLAPACKOBJS    = \
+       cgetrf.$(SUFFIX) cgetrs.$(SUFFIX) cpotrf.$(SUFFIX) cgetf2.$(SUFFIX) \
+       cpotf2.$(SUFFIX) claswp.$(SUFFIX) cgesv.$(SUFFIX) clauu2.$(SUFFIX) \
+       clauum.$(SUFFIX) ctrti2.$(SUFFIX) ctrtri.$(SUFFIX) ctrtrs.$(SUFFIX)
+
+#ZLAPACKOBJS   = \
+#      zgetrf.$(SUFFIX) zgetrs.$(SUFFIX) zpotrf.$(SUFFIX) zgetf2.$(SUFFIX) \
+#      zpotf2.$(SUFFIX) zlaswp.$(SUFFIX) zgesv.$(SUFFIX)  zlauu2.$(SUFFIX) \
+#      zlauum.$(SUFFIX) ztrti2.$(SUFFIX) ztrtri.$(SUFFIX) zpotri.$(SUFFIX)
+
+
+ZLAPACKOBJS    = \
+       zgetrf.$(SUFFIX) zgetrs.$(SUFFIX) zpotrf.$(SUFFIX) zgetf2.$(SUFFIX) \
+       zpotf2.$(SUFFIX) zlaswp.$(SUFFIX) zgesv.$(SUFFIX)  zlauu2.$(SUFFIX) \
+       zlauum.$(SUFFIX) ztrti2.$(SUFFIX) ztrtri.$(SUFFIX) ztrtrs.$(SUFFIX)
+
+
+XLAPACKOBJS    = \
+       xgetf2.$(SUFFIX) xgetrf.$(SUFFIX) xlauu2.$(SUFFIX) xlauum.$(SUFFIX) \
+       xpotf2.$(SUFFIX) xpotrf.$(SUFFIX) xtrti2.$(SUFFIX) xtrtri.$(SUFFIX) \
+       xlaswp.$(SUFFIX) xtrtrs.$(SUFFIX) xgesv.$(SUFFIX)  xpotri.$(SUFFIX) \
+       xtrtrs.$(SUFFIX)
+
+ifneq ($(NO_LAPACK), 1)
+SBLASOBJS += $(SLAPACKOBJS)
+DBLASOBJS += $(DLAPACKOBJS)
+#QBLASOBJS += $(QLAPACKOBJS)
+CBLASOBJS += $(CLAPACKOBJS)
+ZBLASOBJS += $(ZLAPACKOBJS)
+#XBLASOBJS += $(XLAPACKOBJS)
+
 endif
-       $(MAKE) -C utest all
-ifneq ($(NO_CBLAS), 1)
-       $(MAKE) -C ctest all
-ifeq ($(CPP_THREAD_SAFETY_TEST), 1)
-       $(MAKE) -C cpp_thread_test all
+
+ifneq ($(BUILD_SINGLE),1)
+       SBLASOBJS=
+ifeq ($(BUILD_DOUBLE),1)
+       SBLASOBJS = dsdot.$(SUFFIX) cblas_dsdot.$(SUFFIX) strsm.$(SUFFIX) \
+       sgetrs.$(SUFFIX) sgetrf.$(SUFFIX) spotf2.$(SUFFIX) spotrf.$(SUFFIX) \
+       ssyrk.$(SUFFIX) sgemv.$(SUFFIX)
 endif
+ifeq ($(BUILD_COMPLEX),1)
+       SBLASOBJS = \
+       sdot.$(SUFFIX) srot.$(SUFFIX) snrm2.$(SUFFIX) sswap.$(SUFFIX) \
+       isamax.$(SUFFIX) saxpy.$(SUFFIX) sscal.$(SUFFIX) scopy.$(SUFFIX) \
+       sgemv.$(SUFFIX) sgemm.$(SUFFIX)
 endif
 endif
-
-libs :
-ifeq ($(CORE), UNKNOWN)
-       $(error OpenBLAS: Detecting CPU failed. Please set TARGET explicitly, e.g. make TARGET=your_cpu_target. Please read README for the detail.)
+ifneq ($(BUILD_DOUBLE),1)
+       DBLASOBJS=
+ifeq ($(BUILD_COMPLEX16),1)
+       DBLASOBJS = \
+       ddot.$(SUFFIX) drot.$(SUFFIX) dnrm2.$(SUFFIX) dswap.$(SUFFIX) \
+       idamax.$(SUFFIX) daxpy.$(SUFFIX) dscal.$(SUFFIX) dcopy.$(SUFFIX) \
+       dgemv.$(SUFFIX) dgemm.$(SUFFIX)
 endif
-ifeq ($(NOFORTRAN), 1)
-       $(info OpenBLAS: Detecting fortran compiler failed. Cannot compile LAPACK. Only compile BLAS.)
 endif
-ifeq ($(NO_STATIC), 1)
-ifeq ($(NO_SHARED), 1)
-       $(error OpenBLAS: neither static nor shared are enabled.)
+ifneq ($(BUILD_COMPLEX),1)
+       CBLASOBJS=
+ifeq ($(BUILD_COMPLEX16),1)
+       CBLASOBJS = cgetrs.$(SUFFIX) cblas_cdotu_sub.$(SUFFIX) cgetrf.$(SUFFIX) \
+        cpotrf.$(SUFFIX) ctrsm.$(SUFFIX) cblas_cdotc_sub.$(SUFFIX) 
 endif
 endif
-       @-ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
-       @for d in $(SUBDIRS) ; \
-       do if test -d $$d; then \
-         $(MAKE) -C $$d $(@F) || exit 1 ; \
-       fi; \
-       done
-#Save the config files for installation
-       @cp Makefile.conf Makefile.conf_last
-       @cp config.h config_last.h
-ifdef QUAD_PRECISION
-       @echo "#define QUAD_PRECISION">> config_last.h
+ifneq ($(BUILD_COMPLEX16),1)
+       ZBLASOBJS=
 endif
+
+FUNCOBJS    = $(SBEXTOBJS) $(CXERBLAOBJS) $(SBBLASOBJS) $(SBLASOBJS) $(DBLASOBJS) $(CBLASOBJS) $(ZBLASOBJS)
+
 ifeq ($(EXPRECISION), 1)
-       @echo "#define EXPRECISION">> config_last.h
-endif
-##
-ifeq ($(DYNAMIC_ARCH), 1)
-       @$(MAKE) -C kernel commonlibs || exit 1
-       @for d in $(DYNAMIC_CORE) ; \
-       do  $(MAKE) GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$$d kernel || exit 1 ;\
-       done
-       @echo DYNAMIC_ARCH=1 >> Makefile.conf_last
-ifeq ($(DYNAMIC_OLDER), 1)
-       @echo DYNAMIC_OLDER=1 >> Makefile.conf_last
-endif  
-endif
-ifdef USE_THREAD
-       @echo USE_THREAD=$(USE_THREAD) >>  Makefile.conf_last
-endif
-       @touch lib.grd
-
-prof : prof_blas prof_lapack
-
-prof_blas :
-       ln -fs $(LIBNAME_P) $(LIBPREFIX)_p.$(LIBSUFFIX)
-       for d in $(SUBDIRS) ; \
-       do if test -d $$d; then \
-         $(MAKE) -C $$d prof || exit 1 ; \
-       fi; \
-       done
-ifeq ($(DYNAMIC_ARCH), 1)
-         $(MAKE) -C kernel commonprof || exit 1
-endif
-
-blas :
-       ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
-       for d in $(BLASDIRS) ; \
-       do if test -d $$d; then \
-         $(MAKE) -C $$d libs || exit 1 ; \
-       fi; \
-       done
-
-hpl :
-       ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
-       for d in $(BLASDIRS) ../laswp exports ; \
-       do if test -d $$d; then \
-         $(MAKE) -C $$d $(@F) || exit 1 ; \
-       fi; \
-       done
-ifeq ($(DYNAMIC_ARCH), 1)
-         $(MAKE) -C kernel commonlibs || exit 1
-       for d in $(DYNAMIC_CORE) ; \
-       do  $(MAKE) GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$$d kernel || exit 1 ;\
-       done
-endif
-
-hpl_p :
-       ln -fs $(LIBNAME_P) $(LIBPREFIX)_p.$(LIBSUFFIX)
-       for d in $(SUBDIRS) ../laswp exports ; \
-       do if test -d $$d; then \
-         $(MAKE) -C $$d $(@F) || exit 1 ; \
-       fi; \
-       done
-
-ifeq ($(NO_LAPACK), 1)
-netlib :
+FUNCOBJS   += $(QBLASOBJS) $(XBLASOBJS)
+endif
 
-else
-netlib : lapack_prebuild
-ifeq ($(NOFORTRAN), $(filter 0,$(NOFORTRAN)))
-       @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapacklib
-       @$(MAKE) -C $(NETLIB_LAPACK_DIR) tmglib
+ifeq ($(QUAD_PRECISION), 1)
+FUNCOBJS   += $(QBLASOBJS) $(XBLASOBJS)
 endif
-ifneq ($(NO_LAPACKE), 1)
-       @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapackelib
+
+FUNCALLFILES = $(FUNCOBJS:.$(SUFFIX)=)
+
+
+include $(TOPDIR)/Makefile.tail
+
+all :: libs
+
+ifdef FUNCTION_PROFILE
+$(BLASOBJS) $(BLASOBJS_P) : functable.h
+$(BLASOBJS) $(BLASOBJS_P) : override CFLAGS += -DPROFILE_FUNC_NAME=interface_$(*F)
+
+functable.h : Makefile
+       ./create $(FUNCALLFILES) > functable.h
+
 endif
+
+clean ::
+       @rm -f functable.h
+
+level1 : $(SBEXTOBJS) $(SBBLAS1OBJS) $(SBLAS1OBJS) $(DBLAS1OBJS) $(QBLAS1OBJS) $(CBLAS1OBJS) $(ZBLAS1OBJS) $(XBLAS1OBJS)
+       $(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME) $^
+
+level2 : $(SBBLAS2OBJS) $(SBLAS2OBJS) $(DBLAS2OBJS) $(QBLAS2OBJS) $(CBLAS2OBJS) $(ZBLAS2OBJS) $(XBLAS2OBJS)
+       $(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME) $^
+
+level3 : $(SBBLAS3OBJS) $(SBLAS3OBJS) $(DBLAS3OBJS) $(QBLAS3OBJS) $(CBLAS3OBJS) $(ZBLAS3OBJS) $(XBLAS3OBJS) 
+       $(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME) $^
+
+aux :  $(CBAUXOBJS)
+       $(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME) $^
+
+$(CSBBLASOBJS) $(CSBBLASOBJS_P) $(CSBLASOBJS) $(CSBLASOBJS_P) $(CDBLASOBJS) $(CDBLASOBJS_P) $(CQBLASOBJS) $(CQBLASOBJS_P) \
+$(CCBLASOBJS) $(CCBLASOBJS_P) $(CZBLASOBJS) $(CZBLASOBJS_P) $(CXBLASOBJS) $(CXBLASOBJS_P) $(CBAUXOBJS_P) : override CFLAGS += -DCBLAS
+
+srot.$(SUFFIX) srot.$(PSUFFIX) : rot.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+drot.$(SUFFIX) drot.$(PSUFFIX) : rot.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+qrot.$(SUFFIX) qrot.$(PSUFFIX) : rot.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+csrot.$(SUFFIX) csrot.$(PSUFFIX) : zrot.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+zdrot.$(SUFFIX) zdrot.$(PSUFFIX) : zrot.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+xqrot.$(SUFFIX) xqrot.$(PSUFFIX) : zrot.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+srotm.$(SUFFIX) srotm.$(PSUFFIX): rotm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+drotm.$(SUFFIX) drotm.$(PSUFFIX): rotm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qrotm.$(SUFFIX) qrotm.$(PSUFFIX): rotm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+srotmg.$(SUFFIX) srotmg.$(PSUFFIX): rotmg.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+drotmg.$(SUFFIX) drotmg.$(PSUFFIX): rotmg.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qrotmg.$(SUFFIX) qrotmg.$(PSUFFIX): rotmg.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+srotg.$(SUFFIX) srotg.$(PSUFFIX): rotg.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+drotg.$(SUFFIX) drotg.$(PSUFFIX): rotg.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qrotg.$(SUFFIX) qrotg.$(PSUFFIX): rotg.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+crotg.$(SUFFIX) crotg.$(PSUFFIX): zrotg.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zrotg.$(SUFFIX) zrotg.$(PSUFFIX): zrotg.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xrotg.$(SUFFIX) xrotg.$(PSUFFIX): zrotg.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+sasum.$(SUFFIX) sasum.$(PSUFFIX) : asum.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+dasum.$(SUFFIX) dasum.$(PSUFFIX) : asum.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+qasum.$(SUFFIX) qasum.$(PSUFFIX) : asum.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+scasum.$(SUFFIX) scasum.$(PSUFFIX) : asum.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+dzasum.$(SUFFIX) dzasum.$(PSUFFIX) : asum.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+qxasum.$(SUFFIX) qxasum.$(PSUFFIX) : asum.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+ssum.$(SUFFIX) ssum.$(PSUFFIX) : sum.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+dsum.$(SUFFIX) dsum.$(PSUFFIX) : sum.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+qsum.$(SUFFIX) qsum.$(PSUFFIX) : sum.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+scsum.$(SUFFIX) scsum.$(PSUFFIX) : sum.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+dzsum.$(SUFFIX) dzsum.$(PSUFFIX) : sum.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+qxsum.$(SUFFIX) qxsum.$(PSUFFIX) : sum.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+snrm2.$(SUFFIX) snrm2.$(PSUFFIX) : nrm2.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+dnrm2.$(SUFFIX) dnrm2.$(PSUFFIX) : nrm2.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+qnrm2.$(SUFFIX) qnrm2.$(PSUFFIX) : nrm2.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+scnrm2.$(SUFFIX) scnrm2.$(PSUFFIX) : nrm2.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+dznrm2.$(SUFFIX) dznrm2.$(PSUFFIX) : nrm2.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+qxnrm2.$(SUFFIX) qxnrm2.$(PSUFFIX) : nrm2.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+samax.$(SUFFIX) samax.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+damax.$(SUFFIX) damax.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+qamax.$(SUFFIX) qamax.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+scamax.$(SUFFIX) scamax.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+dzamax.$(SUFFIX) dzamax.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+qxamax.$(SUFFIX) qxamax.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+samin.$(SUFFIX) samin.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+damin.$(SUFFIX) damin.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+qamin.$(SUFFIX) qamin.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+scamin.$(SUFFIX) scamin.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+dzamin.$(SUFFIX) dzamin.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+qxamin.$(SUFFIX) qxamin.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+smax.$(SUFFIX) smax.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -UUSE_ABS -UUSE_MIN $< -o $(@F)
+
+dmax.$(SUFFIX) dmax.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -UUSE_ABS -UUSE_MIN $< -o $(@F)
+
+qmax.$(SUFFIX) qmax.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -UUSE_ABS -UUSE_MIN $< -o $(@F)
+
+smin.$(SUFFIX) smin.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -UUSE_ABS -DUSE_MIN $< -o $(@F)
+
+dmin.$(SUFFIX) dmin.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -UUSE_ABS -DUSE_MIN $< -o $(@F)
+
+qmin.$(SUFFIX) qmin.$(PSUFFIX) : max.c
+       $(CC) $(CFLAGS) -c -UUSE_ABS -DUSE_MIN $< -o $(@F)
+
+isamax.$(SUFFIX) isamax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+idamax.$(SUFFIX) idamax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+iqamax.$(SUFFIX) iqamax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+icamax.$(SUFFIX) icamax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+izamax.$(SUFFIX) izamax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+ixamax.$(SUFFIX) ixamax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+isamin.$(SUFFIX) isamin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+idamin.$(SUFFIX) idamin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+iqamin.$(SUFFIX) iqamin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+icamin.$(SUFFIX) icamin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+izamin.$(SUFFIX) izamin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+ixamin.$(SUFFIX) ixamin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+ismax.$(SUFFIX) ismax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -UUSE_ABS -UUSE_MIN $< -o $(@F)
+
+idmax.$(SUFFIX) idmax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -UUSE_ABS -UUSE_MIN $< -o $(@F)
+
+iqmax.$(SUFFIX) iqmax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -UUSE_ABS -UUSE_MIN $< -o $(@F)
+
+ismin.$(SUFFIX) ismin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -UUSE_ABS -DUSE_MIN $< -o $(@F)
+
+idmin.$(SUFFIX) idmin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -UUSE_ABS -DUSE_MIN $< -o $(@F)
+
+iqmin.$(SUFFIX) iqmin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -c -UUSE_ABS -DUSE_MIN $< -o $(@F)
+
+sdsdot.$(SUFFIX) sdsdot.$(PSUFFIX) : sdsdot.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+dsdot.$(SUFFIX) dsdot.$(PSUFFIX) : dsdot.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+ifeq ($(BUILD_BFLOAT16),1)
+sbdot.$(SUFFIX) sbdot.$(PSUFFIX) : bf16dot.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+sbstobf16.$(SUFFIX) sbstobf16.$(PSUFFIX) : tobf16.c
+       $(CC) $(CFLAGS) -DSINGLE_PREC -UDOUBLE_PREC -c $< -o $(@F)
+sbdtobf16.$(SUFFIX) sbdtobf16.$(PSUFFIX) : tobf16.c
+       $(CC) $(CFLAGS) -USINGLE_PREC -DDOUBLE_PREC -c $< -o $(@F)
+sbf16tos.$(SUFFIX)  sbf16tos.$(PSUFFIX) : bf16to.c
+       $(CC) $(CFLAGS) -DSINGLE_PREC -UDOUBLE_PREC -c $< -o $(@F)
+dbf16tod.$(SUFFIX)  dbf16tod.$(PSUFFIX) : bf16to.c
+       $(CC) $(CFLAGS) -USINGLE_PREC -DDOUBLE_PREC -c $< -o $(@F)
 endif
 
-ifeq ($(NO_LAPACK), 1)
-re_lapack :
+sdot.$(SUFFIX) sdot.$(PSUFFIX) : dot.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
 
-else
-re_lapack :
-       @$(MAKE) -C relapack
-endif
-
-prof_lapack : lapack_prebuild
-       @$(MAKE) -C $(NETLIB_LAPACK_DIR) lapack_prof
-
-lapack_prebuild :
-ifeq ($(NOFORTRAN), $(filter 0,$(NOFORTRAN)))
-       -@echo "FC          = $(FC)" > $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "FFLAGS      = $(LAPACK_FFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "FFLAGS_DRV  = $(LAPACK_FFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "POPTS       = $(LAPACK_FPFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "FFLAGS_NOOPT       = -O0 $(LAPACK_NOOPT)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "PNOOPT      = $(LAPACK_FPFLAGS) -O0" >> $(NETLIB_LAPACK_DIR)/make.inc
-ifeq ($(C_COMPILER)$(F_COMPILER)$(USE_OPENMP), CLANGGFORTRAN1)
-       -@echo "LDFLAGS     = $(FFLAGS) $(EXTRALIB) -lomp" >> $(NETLIB_LAPACK_DIR)/make.inc
-else
-       -@echo "LDFLAGS     = $(FFLAGS) $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
-endif
-       -@echo "CC          = $(CC)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "override CFLAGS      = $(LAPACK_CFLAGS)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "AR          = $(AR)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "ARFLAGS     = $(ARFLAGS) -ru" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "RANLIB      = $(RANLIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "LAPACKLIB   = ../../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "TMGLIB      = ../../../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "BLASLIB     = ../../../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "LAPACKELIB  = ../../../$(LIBNAME)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "LAPACKLIB_P = ../$(LIBNAME_P)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "SUFFIX      = $(SUFFIX)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "PSUFFIX     = $(PSUFFIX)" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "CEXTRALIB   = $(EXTRALIB)" >> $(NETLIB_LAPACK_DIR)/make.inc
-ifeq ($(F_COMPILER), GFORTRAN)
-       -@echo "TIMER       = INT_ETIME" >> $(NETLIB_LAPACK_DIR)/make.inc
-ifdef SMP
-ifeq ($(OSNAME), WINNT)
-       -@echo "LOADER      = $(FC)" >> $(NETLIB_LAPACK_DIR)/make.inc
-else ifeq ($(OSNAME), Haiku)
-       -@echo "LOADER      = $(FC)" >> $(NETLIB_LAPACK_DIR)/make.inc
-else
-       -@echo "LOADER      = $(FC) -pthread" >> $(NETLIB_LAPACK_DIR)/make.inc
+ddot.$(SUFFIX) ddot.$(PSUFFIX) : dot.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+qdot.$(SUFFIX) qdot.$(PSUFFIX) : dot.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+cdotu.$(SUFFIX) cdotu.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -c -UCONJ $< -o $(@F)
+
+cdotc.$(SUFFIX) cdotc.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -c -DCONJ $< -o $(@F)
+
+zdotu.$(SUFFIX) zdotu.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -c -UCONJ $< -o $(@F)
+
+zdotc.$(SUFFIX) zdotc.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -c -DCONJ $< -o $(@F)
+
+xdotu.$(SUFFIX) xdotu.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -c -UCONJ $< -o $(@F)
+
+xdotc.$(SUFFIX) xdotc.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -c -DCONJ $< -o $(@F)
+
+saxpy.$(SUFFIX) saxpy.$(PSUFFIX) : axpy.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+daxpy.$(SUFFIX) daxpy.$(PSUFFIX) : axpy.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+qaxpy.$(SUFFIX) qaxpy.$(PSUFFIX) : axpy.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+caxpy.$(SUFFIX) caxpy.$(PSUFFIX) : zaxpy.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+zaxpy.$(SUFFIX) zaxpy.$(PSUFFIX) : zaxpy.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+xaxpy.$(SUFFIX) xaxpy.$(PSUFFIX) : zaxpy.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+caxpyc.$(SUFFIX) caxpyc.$(PSUFFIX) : zaxpy.c
+       $(CC) $(CFLAGS) -c -DCONJ $< -o $(@F)
+
+zaxpyc.$(SUFFIX) zaxpyc.$(PSUFFIX) : zaxpy.c
+       $(CC) $(CFLAGS) -c -DCONJ $< -o $(@F)
+
+xaxpyc.$(SUFFIX) xaxpyc.$(PSUFFIX) : zaxpy.c
+       $(CC) $(CFLAGS) -c -DCONJ $< -o $(@F)
+
+sscal.$(SUFFIX) sscal.$(PSUFFIX) : scal.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+dscal.$(SUFFIX) dscal.$(PSUFFIX) : scal.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+qscal.$(SUFFIX) qscal.$(PSUFFIX) : scal.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+cscal.$(SUFFIX) cscal.$(PSUFFIX) : zscal.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+zscal.$(SUFFIX) zscal.$(PSUFFIX) : zscal.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+xscal.$(SUFFIX) xscal.$(PSUFFIX) : zscal.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+csscal.$(SUFFIX) csscal.$(PSUFFIX) : zscal.c
+       $(CC) $(CFLAGS) -c -DSSCAL $< -o $(@F)
+
+zdscal.$(SUFFIX) zdscal.$(PSUFFIX) : zscal.c
+       $(CC) $(CFLAGS) -c -DSSCAL $< -o $(@F)
+
+xqscal.$(SUFFIX) xqscal.$(PSUFFIX) : zscal.c
+       $(CC) $(CFLAGS) -c -DSSCAL $< -o $(@F)
+
+scopy.$(SUFFIX) scopy.$(PSUFFIX) : copy.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+dcopy.$(SUFFIX) dcopy.$(PSUFFIX) : copy.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+qcopy.$(SUFFIX) qcopy.$(PSUFFIX) : copy.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+ccopy.$(SUFFIX) ccopy.$(PSUFFIX) : copy.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+zcopy.$(SUFFIX) zcopy.$(PSUFFIX) : copy.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+xcopy.$(SUFFIX) xcopy.$(PSUFFIX) : copy.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+sswap.$(SUFFIX) sswap.$(PSUFFIX) : swap.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+dswap.$(SUFFIX) dswap.$(PSUFFIX) : swap.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+qswap.$(SUFFIX) qswap.$(PSUFFIX) : swap.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+cswap.$(SUFFIX) cswap.$(PSUFFIX) : zswap.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+zswap.$(SUFFIX) zswap.$(PSUFFIX) : zswap.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+xswap.$(SUFFIX) xswap.$(PSUFFIX) : zswap.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+sger.$(SUFFIX) sger.$(PSUFFIX) : ger.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dger.$(SUFFIX) dger.$(PSUFFIX) : ger.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qger.$(SUFFIX) qger.$(PSUFFIX) : ger.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cgeru.$(SUFFIX) cgeru.$(PSUFFIX) : zger.c
+       $(CC) -c $(CFLAGS) -UCONJ $< -o $(@F)
+
+cgerc.$(SUFFIX) cgerc.$(PSUFFIX) : zger.c
+       $(CC) -c $(CFLAGS) -DCONJ $< -o $(@F)
+
+zgeru.$(SUFFIX) zgeru.$(PSUFFIX) : zger.c
+       $(CC) -c $(CFLAGS) -UCONJ $< -o $(@F)
+
+zgerc.$(SUFFIX) zgerc.$(PSUFFIX) : zger.c
+       $(CC) -c $(CFLAGS) -DCONJ $< -o $(@F)
+
+xgeru.$(SUFFIX) xgeru.$(PSUFFIX) : zger.c
+       $(CC) -c $(CFLAGS) -UCONJ $< -o $(@F)
+
+xgerc.$(SUFFIX) xgerc.$(PSUFFIX) : zger.c
+       $(CC) -c $(CFLAGS) -DCONJ $< -o $(@F)
+
+ifeq ($(BUILD_BFLOAT16),1)
+sbgemv.$(SUFFIX) sbgemv.$(PSUFFIX) : sbgemv.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
 endif
+
+ifndef USE_NETLIB_GEMV
+sgemv.$(SUFFIX) sgemv.$(PSUFFIX): gemv.c
+       $(CC) -c $(CFLAGS) -o $(@F) $<
+
+dgemv.$(SUFFIX) dgemv.$(PSUFFIX): gemv.c
+       $(CC) -c $(CFLAGS) -o $(@F) $<
 else
-       -@echo "LOADER      = $(FC)" >> $(NETLIB_LAPACK_DIR)/make.inc
+sgemv.$(SUFFIX) sgemv.$(PSUFFIX): netlib/sgemv.f
+       $(FC) -c $(FFLAGS) -o $(@F) $<
+
+dgemv.$(SUFFIX) dgemv.$(PSUFFIX): netlib/dgemv.f
+       $(FC) -c $(FFLAGS) -o $(@F) $<
 endif
+
+qgemv.$(SUFFIX) qgemv.$(PSUFFIX): gemv.c
+       $(CC) -c $(CFLAGS) -o $(@F) $<
+
+ifndef USE_NETLIB_GEMV
+cgemv.$(SUFFIX) cgemv.$(PSUFFIX): zgemv.c
+       $(CC) -c $(CFLAGS) -o $(@F) $<
+
+zgemv.$(SUFFIX) zgemv.$(PSUFFIX): zgemv.c
+       $(CC) -c $(CFLAGS) -o $(@F) $<
 else
-       -@echo "TIMER       = NONE" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@echo "LOADER      = $(FC)" >> $(NETLIB_LAPACK_DIR)/make.inc
-endif
-ifeq ($(BUILD_LAPACK_DEPRECATED), 1)
-       -@echo "BUILD_DEPRECATED      = 1" >> $(NETLIB_LAPACK_DIR)/make.inc
-endif
-ifeq ($(BUILD_SINGLE), 1)
-       -@echo "BUILD_SINGLE      = 1" >> $(NETLIB_LAPACK_DIR)/make.inc
-endif
-ifeq ($(BUILD_DOUBLE), 1)
-       -@echo "BUILD_DOUBLE      = 1" >> $(NETLIB_LAPACK_DIR)/make.inc
-endif
-ifeq ($(BUILD_COMPLEX), 1)
-       -@echo "BUILD_COMPLEX      = 1" >> $(NETLIB_LAPACK_DIR)/make.inc
-endif
-ifeq ($(BUILD_COMPLEX16), 1)
-       -@echo "BUILD_COMPLEX16      = 1" >> $(NETLIB_LAPACK_DIR)/make.inc
-endif
-       -@echo "LAPACKE_WITH_TMG      = 1" >> $(NETLIB_LAPACK_DIR)/make.inc
-       -@cat  make.inc >> $(NETLIB_LAPACK_DIR)/make.inc
-endif
+cgemv.$(SUFFIX) cgemv.$(PSUFFIX): netlib/cgemv.f
+       $(FC) -c $(FFLAGS) -o $(@F) $<
 
-large.tgz :
-ifeq ($(NOFORTRAN), $(filter 0,$(NOFORTRAN)))
-       if [ ! -a $< ]; then
-       -wget http://www.netlib.org/lapack/timing/large.tgz;
-       fi
+zgemv.$(SUFFIX) zgemv.$(PSUFFIX): netlib/zgemv.f
+       $(FC) -c $(FFLAGS) -o $(@F) $<
 endif
 
-timing.tgz :
-ifeq ($(NOFORTRAN), $(filter 0,$(NOFORTRAN)))
-       if [ ! -a $< ]; then
-       -wget http://www.netlib.org/lapack/timing/timing.tgz;
-       fi
-endif
+xgemv.$(SUFFIX) xgemv.$(PSUFFIX): zgemv.c
+       $(CC) -c $(CFLAGS) -o $(@F) $<
 
-lapack-timing : large.tgz timing.tgz
-ifeq ($(NOFORTRAN), $(filter 0,$(NOFORTRAN)))
-       (cd $(NETLIB_LAPACK_DIR); $(TAR) zxf ../timing.tgz TIMING)
-       (cd $(NETLIB_LAPACK_DIR)/TIMING; $(TAR) zxf ../../large.tgz )
-       $(MAKE) -C $(NETLIB_LAPACK_DIR)/TIMING
-endif
+strsv.$(SUFFIX) strsv.$(PSUFFIX) : trsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
 
+dtrsv.$(SUFFIX) dtrsv.$(PSUFFIX) : trsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
 
-lapack-test :
-       (cd $(NETLIB_LAPACK_DIR)/TESTING && rm -f x* *.out)
-       $(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR)/TESTING/EIG xeigtstc  xeigtstd  xeigtsts  xeigtstz 
-       $(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR)/TESTING/LIN xlintstc  xlintstd  xlintstds  xlintstrfd  xlintstrfz  xlintsts  xlintstz  xlintstzc xlintstrfs xlintstrfc
-ifneq ($(CROSS), 1)
-       ( cd $(NETLIB_LAPACK_DIR)/INSTALL; $(MAKE) all; ./testlsame; ./testslamch; ./testdlamch; \
-        ./testsecond; ./testdsecnd; ./testieee; ./testversion )
-       (cd $(NETLIB_LAPACK_DIR); ./lapack_testing.py -r -b TESTING)
-endif
+qtrsv.$(SUFFIX) qtrsv.$(PSUFFIX) : trsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
 
-lapack-runtest:
-       ( cd $(NETLIB_LAPACK_DIR)/INSTALL; ./testlsame; ./testslamch; ./testdlamch; \
-        ./testsecond; ./testdsecnd; ./testieee; ./testversion )
-       (cd $(NETLIB_LAPACK_DIR); ./lapack_testing.py -r )
+ctrsv.$(SUFFIX) ctrsv.$(PSUFFIX) : ztrsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
 
+ztrsv.$(SUFFIX) ztrsv.$(PSUFFIX) : ztrsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
 
-blas-test:
-       (cd $(NETLIB_LAPACK_DIR)/BLAS/TESTING && rm -f x* *.out)
-       $(MAKE) -j 1 -C $(NETLIB_LAPACK_DIR) blas_testing
-       (cd $(NETLIB_LAPACK_DIR)/BLAS/TESTING && cat *.out)
+xtrsv.$(SUFFIX) xtrsv.$(PSUFFIX) : ztrsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
 
+strmv.$(SUFFIX) strmv.$(PSUFFIX) : trmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
 
-dummy :
+dtrmv.$(SUFFIX) dtrmv.$(PSUFFIX) : trmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
 
-install :
-       $(MAKE) -f Makefile.install install
+qtrmv.$(SUFFIX) qtrmv.$(PSUFFIX) : trmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ctrmv.$(SUFFIX) ctrmv.$(PSUFFIX) : ztrmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ztrmv.$(SUFFIX) ztrmv.$(PSUFFIX) : ztrmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xtrmv.$(SUFFIX) xtrmv.$(PSUFFIX) : ztrmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ssymv.$(SUFFIX) ssymv.$(PSUFFIX) : symv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dsymv.$(SUFFIX) dsymv.$(PSUFFIX) : symv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qsymv.$(SUFFIX) qsymv.$(PSUFFIX) : symv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+csymv.$(SUFFIX) csymv.$(PSUFFIX) : zsymv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zsymv.$(SUFFIX) zsymv.$(PSUFFIX) : zsymv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xsymv.$(SUFFIX) xsymv.$(PSUFFIX) : zsymv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ssyr.$(SUFFIX) ssyr.$(PSUFFIX) : syr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dsyr.$(SUFFIX) dsyr.$(PSUFFIX) : syr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qsyr.$(SUFFIX) qsyr.$(PSUFFIX) : syr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+csyr.$(SUFFIX) csyr.$(PSUFFIX) : zsyr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zsyr.$(SUFFIX) zsyr.$(PSUFFIX) : zsyr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xsyr.$(SUFFIX) xsyr.$(PSUFFIX) : zsyr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ssyr2.$(SUFFIX) ssyr2.$(PSUFFIX) : syr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dsyr2.$(SUFFIX) dsyr2.$(PSUFFIX) : syr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qsyr2.$(SUFFIX) qsyr2.$(PSUFFIX) : syr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+csyr2.$(SUFFIX) csyr2.$(PSUFFIX) : zsyr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zsyr2.$(SUFFIX) zsyr2.$(PSUFFIX) : zsyr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xsyr2.$(SUFFIX) xsyr2.$(PSUFFIX) : zsyr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+sgbmv.$(SUFFIX) sgbmv.$(PSUFFIX): gbmv.c
+       $(CC) -c $(CFLAGS) -o $(@F) $<
+
+dgbmv.$(SUFFIX) dgbmv.$(PSUFFIX): gbmv.c
+       $(CC) -c $(CFLAGS) -o $(@F) $<
+
+qgbmv.$(SUFFIX) qgbmv.$(PSUFFIX): gbmv.c
+       $(CC) -c $(CFLAGS) -o $(@F) $<
+
+cgbmv.$(SUFFIX) cgbmv.$(PSUFFIX): zgbmv.c
+       $(CC) -c $(CFLAGS) -o $(@F) $<
+
+zgbmv.$(SUFFIX) zgbmv.$(PSUFFIX): zgbmv.c
+       $(CC) -c $(CFLAGS) -o $(@F) $<
+
+xgbmv.$(SUFFIX) xgbmv.$(PSUFFIX): zgbmv.c
+       $(CC) -c $(CFLAGS) -o $(@F) $<
+
+ssbmv.$(SUFFIX) ssbmv.$(PSUFFIX) : sbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dsbmv.$(SUFFIX) dsbmv.$(PSUFFIX) : sbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qsbmv.$(SUFFIX) qsbmv.$(PSUFFIX) : sbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+csbmv.$(SUFFIX) csbmv.$(PSUFFIX) : zsbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zsbmv.$(SUFFIX) zsbmv.$(PSUFFIX) : zsbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xsbmv.$(SUFFIX) xsbmv.$(PSUFFIX) : zsbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+sspmv.$(SUFFIX) sspmv.$(PSUFFIX) : spmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dspmv.$(SUFFIX) dspmv.$(PSUFFIX) : spmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qspmv.$(SUFFIX) qspmv.$(PSUFFIX) : spmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cspmv.$(SUFFIX) cspmv.$(PSUFFIX) : zspmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zspmv.$(SUFFIX) zspmv.$(PSUFFIX) : zspmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xspmv.$(SUFFIX) xspmv.$(PSUFFIX) : zspmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+sspr.$(SUFFIX) sspr.$(PSUFFIX) : spr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dspr.$(SUFFIX) dspr.$(PSUFFIX) : spr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qspr.$(SUFFIX) qspr.$(PSUFFIX) : spr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cspr.$(SUFFIX) cspr.$(PSUFFIX) : zspr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zspr.$(SUFFIX) zspr.$(PSUFFIX) : zspr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xspr.$(SUFFIX) xspr.$(PSUFFIX) : zspr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+sspr2.$(SUFFIX) sspr2.$(PSUFFIX) : spr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dspr2.$(SUFFIX) dspr2.$(PSUFFIX) : spr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qspr2.$(SUFFIX) qspr2.$(PSUFFIX) : spr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cspr2.$(SUFFIX) cspr2.$(PSUFFIX) : zspr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zspr2.$(SUFFIX) zspr2.$(PSUFFIX) : zspr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xspr2.$(SUFFIX) xspr2.$(PSUFFIX) : zspr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+stbmv.$(SUFFIX) stbmv.$(PSUFFIX) : tbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dtbmv.$(SUFFIX) dtbmv.$(PSUFFIX) : tbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qtbmv.$(SUFFIX) qtbmv.$(PSUFFIX) : tbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ctbmv.$(SUFFIX) ctbmv.$(PSUFFIX) : ztbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ztbmv.$(SUFFIX) ztbmv.$(PSUFFIX) : ztbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xtbmv.$(SUFFIX) xtbmv.$(PSUFFIX) : ztbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+stbsv.$(SUFFIX) stbsv.$(PSUFFIX) : tbsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dtbsv.$(SUFFIX) dtbsv.$(PSUFFIX) : tbsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qtbsv.$(SUFFIX) qtbsv.$(PSUFFIX) : tbsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ctbsv.$(SUFFIX) ctbsv.$(PSUFFIX) : ztbsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ztbsv.$(SUFFIX) ztbsv.$(PSUFFIX) : ztbsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xtbsv.$(SUFFIX) xtbsv.$(PSUFFIX) : ztbsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+stpsv.$(SUFFIX) stpsv.$(PSUFFIX) : tpsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dtpsv.$(SUFFIX) dtpsv.$(PSUFFIX) : tpsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qtpsv.$(SUFFIX) qtpsv.$(PSUFFIX) : tpsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ctpsv.$(SUFFIX) ctpsv.$(PSUFFIX) : ztpsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ztpsv.$(SUFFIX) ztpsv.$(PSUFFIX) : ztpsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xtpsv.$(SUFFIX) xtpsv.$(PSUFFIX) : ztpsv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+stpmv.$(SUFFIX) stpmv.$(PSUFFIX) : tpmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dtpmv.$(SUFFIX) dtpmv.$(PSUFFIX) : tpmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qtpmv.$(SUFFIX) qtpmv.$(PSUFFIX) : tpmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ctpmv.$(SUFFIX) ctpmv.$(PSUFFIX) : ztpmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ztpmv.$(SUFFIX) ztpmv.$(PSUFFIX) : ztpmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xtpmv.$(SUFFIX) xtpmv.$(PSUFFIX) : ztpmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+chemv.$(SUFFIX) chemv.$(PSUFFIX) : zhemv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zhemv.$(SUFFIX) zhemv.$(PSUFFIX) : zhemv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xhemv.$(SUFFIX) xhemv.$(PSUFFIX) : zhemv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+chbmv.$(SUFFIX) chbmv.$(PSUFFIX) : zhbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zhbmv.$(SUFFIX) zhbmv.$(PSUFFIX) : zhbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xhbmv.$(SUFFIX) xhbmv.$(PSUFFIX) : zhbmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cher.$(SUFFIX) cher.$(PSUFFIX) : zher.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zher.$(SUFFIX) zher.$(PSUFFIX) : zher.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xher.$(SUFFIX) xher.$(PSUFFIX) : zher.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cher2.$(SUFFIX) cher2.$(PSUFFIX) : zher2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zher2.$(SUFFIX) zher2.$(PSUFFIX) : zher2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xher2.$(SUFFIX) xher2.$(PSUFFIX) : zher2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+chpmv.$(SUFFIX) chpmv.$(PSUFFIX) : zhpmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zhpmv.$(SUFFIX) zhpmv.$(PSUFFIX) : zhpmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xhpmv.$(SUFFIX) xhpmv.$(PSUFFIX) : zhpmv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+chpr.$(SUFFIX) chpr.$(PSUFFIX) : zhpr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zhpr.$(SUFFIX) zhpr.$(PSUFFIX) : zhpr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xhpr.$(SUFFIX) xhpr.$(PSUFFIX) : zhpr.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+chpr2.$(SUFFIX) chpr2.$(PSUFFIX) : zhpr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zhpr2.$(SUFFIX) zhpr2.$(PSUFFIX) : zhpr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xhpr2.$(SUFFIX) xhpr2.$(PSUFFIX) : zhpr2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ifeq ($(BUILD_BFLOAT16),1)
+sbgemm.$(SUFFIX) sbgemm.$(PSUFFIX) : gemm.c ../param.h
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+endif
+
+sgemm.$(SUFFIX) sgemm.$(PSUFFIX) : gemm.c ../param.h
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dgemm.$(SUFFIX) dgemm.$(PSUFFIX) : gemm.c ../param.h
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qgemm.$(SUFFIX) qgemm.$(PSUFFIX) : gemm.c ../param.h
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cgemm.$(SUFFIX) cgemm.$(PSUFFIX) : gemm.c ../param.h
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zgemm.$(SUFFIX) zgemm.$(PSUFFIX) : gemm.c ../param.h
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xgemm.$(SUFFIX) xgemm.$(PSUFFIX) : gemm.c ../param.h
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ssymm.$(SUFFIX) ssymm.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dsymm.$(SUFFIX) dsymm.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qsymm.$(SUFFIX) qsymm.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+csymm.$(SUFFIX) csymm.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zsymm.$(SUFFIX) zsymm.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xsymm.$(SUFFIX) xsymm.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+strmm.$(SUFFIX) strmm.$(PSUFFIX) : trsm.c
+       $(CC) -c $(CFLAGS) -DTRMM $< -o $(@F)
+
+dtrmm.$(SUFFIX) dtrmm.$(PSUFFIX) : trsm.c
+       $(CC) -c $(CFLAGS) -DTRMM $< -o $(@F)
+
+qtrmm.$(SUFFIX) qtrmm.$(PSUFFIX) : trsm.c
+       $(CC) -c $(CFLAGS) -DTRMM $< -o $(@F)
+
+ctrmm.$(SUFFIX) ctrmm.$(PSUFFIX) : trsm.c
+       $(CC) -c $(CFLAGS) -DTRMM $< -o $(@F)
+
+ztrmm.$(SUFFIX) ztrmm.$(PSUFFIX) : trsm.c
+       $(CC) -c $(CFLAGS) -DTRMM $< -o $(@F)
+
+xtrmm.$(SUFFIX) xtrmm.$(PSUFFIX) : trsm.c
+       $(CC) -c $(CFLAGS) -DTRMM $< -o $(@F)
+
+strsm.$(SUFFIX) strsm.$(PSUFFIX) : trsm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dtrsm.$(SUFFIX) dtrsm.$(PSUFFIX) : trsm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qtrsm.$(SUFFIX) qtrsm.$(PSUFFIX) : trsm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ctrsm.$(SUFFIX) ctrsm.$(PSUFFIX) : trsm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ztrsm.$(SUFFIX) ztrsm.$(PSUFFIX) : trsm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xtrsm.$(SUFFIX) xtrsm.$(PSUFFIX) : trsm.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ssyrk.$(SUFFIX) ssyrk.$(PSUFFIX) : syrk.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dsyrk.$(SUFFIX) dsyrk.$(PSUFFIX) : syrk.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qsyrk.$(SUFFIX) qsyrk.$(PSUFFIX) : syrk.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+csyrk.$(SUFFIX) csyrk.$(PSUFFIX) : syrk.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zsyrk.$(SUFFIX) zsyrk.$(PSUFFIX) : syrk.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xsyrk.$(SUFFIX) xsyrk.$(PSUFFIX) : syrk.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ssyr2k.$(SUFFIX) ssyr2k.$(PSUFFIX) : syr2k.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dsyr2k.$(SUFFIX) dsyr2k.$(PSUFFIX) : syr2k.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qsyr2k.$(SUFFIX) qsyr2k.$(PSUFFIX) : syr2k.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+csyr2k.$(SUFFIX) csyr2k.$(PSUFFIX) : syr2k.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zsyr2k.$(SUFFIX) zsyr2k.$(PSUFFIX) : syr2k.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xsyr2k.$(SUFFIX) xsyr2k.$(PSUFFIX) : syr2k.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+chemm.$(SUFFIX) chemm.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+zhemm.$(SUFFIX) zhemm.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+xhemm.$(SUFFIX) xhemm.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+cherk.$(SUFFIX) cherk.$(PSUFFIX) : syrk.c
+       $(CC) -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+zherk.$(SUFFIX) zherk.$(PSUFFIX) : syrk.c
+       $(CC) -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+xherk.$(SUFFIX) xherk.$(PSUFFIX) : syrk.c
+       $(CC) -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+cher2k.$(SUFFIX) cher2k.$(PSUFFIX) : syr2k.c
+       $(CC) -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+zher2k.$(SUFFIX) zher2k.$(PSUFFIX) : syr2k.c
+       $(CC) -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+xher2k.$(SUFFIX) xher2k.$(PSUFFIX) : syr2k.c
+       $(CC) -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+cgemm3m.$(SUFFIX) cgemm3m.$(PSUFFIX) : gemm.c
+       $(CC) -c $(CFLAGS) -DGEMM3M $< -o $(@F)
+
+zgemm3m.$(SUFFIX) zgemm3m.$(PSUFFIX) : gemm.c
+       $(CC) -c $(CFLAGS) -DGEMM3M $< -o $(@F)
+
+xgemm3m.$(SUFFIX) xgemm3m.$(PSUFFIX) : gemm.c
+       $(CC) -c $(CFLAGS) -DGEMM3M $< -o $(@F)
+
+csymm3m.$(SUFFIX) csymm3m.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) -DGEMM3M $< -o $(@F)
+
+zsymm3m.$(SUFFIX) zsymm3m.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) -DGEMM3M $< -o $(@F)
+
+xsymm3m.$(SUFFIX) xsymm3m.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) -DGEMM3M $< -o $(@F)
+
+chemm3m.$(SUFFIX) chemm3m.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) -DGEMM3M -DHEMM $< -o $(@F)
+
+zhemm3m.$(SUFFIX) zhemm3m.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) -DGEMM3M -DHEMM $< -o $(@F)
+
+xhemm3m.$(SUFFIX) xhemm3m.$(PSUFFIX) : symm.c
+       $(CC) -c $(CFLAGS) -DGEMM3M -DHEMM $< -o $(@F)
+
+cblas_isamax.$(SUFFIX) cblas_isamax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+cblas_idamax.$(SUFFIX) cblas_idamax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+cblas_icamax.$(SUFFIX) cblas_icamax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+cblas_izamax.$(SUFFIX) cblas_izamax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -DUSE_ABS -UUSE_MIN $< -o $(@F)
+
+cblas_isamin.$(SUFFIX) cblas_isamin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+cblas_idamin.$(SUFFIX) cblas_idamin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+cblas_icamin.$(SUFFIX) cblas_icamin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+cblas_izamin.$(SUFFIX) cblas_izamin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -DUSE_ABS -DUSE_MIN $< -o $(@F)
+
+cblas_ismax.$(SUFFIX) cblas_ismax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -UUSE_ABS -UUSE_MIN $< -o $(@F)
+
+cblas_idmax.$(SUFFIX) cblas_idmax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -UUSE_ABS -UUSE_MIN $< -o $(@F)
+
+cblas_ismin.$(SUFFIX) cblas_ismin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -UUSE_ABS -DUSE_MIN $< -o $(@F)
+
+cblas_idmin.$(SUFFIX) cblas_idmin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -UUSE_ABS -DUSE_MIN $< -o $(@F)
+
+cblas_icmax.$(SUFFIX) cblas_icmax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -UUSE_ABS -UUSE_MIN $< -o $(@F)
+
+cblas_izmax.$(SUFFIX) cblas_izmax.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -UUSE_ABS -UUSE_MIN $< -o $(@F)
+
+cblas_icmin.$(SUFFIX) cblas_icmin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -UUSE_ABS -DUSE_MIN $< -o $(@F)
+
+cblas_izmin.$(SUFFIX) cblas_izmin.$(PSUFFIX) : imax.c
+       $(CC) $(CFLAGS) -DCBLAS -c -UUSE_ABS -DUSE_MIN $< -o $(@F)
+
+cblas_sasum.$(SUFFIX) cblas_sasum.$(PSUFFIX) : asum.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_dasum.$(SUFFIX) cblas_dasum.$(PSUFFIX) : asum.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_scasum.$(SUFFIX) cblas_scasum.$(PSUFFIX) : asum.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_dzasum.$(SUFFIX) cblas_dzasum.$(PSUFFIX) : asum.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_ssum.$(SUFFIX) cblas_ssum.$(PSUFFIX) : sum.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_dsum.$(SUFFIX) cblas_dsum.$(PSUFFIX) : sum.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_scsum.$(SUFFIX) cblas_scsum.$(PSUFFIX) : sum.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_dzsum.$(SUFFIX) cblas_dzsum.$(PSUFFIX) : sum.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_sdsdot.$(SUFFIX) cblas_sdsdot.$(PSUFFIX) : sdsdot.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_dsdot.$(SUFFIX) cblas_dsdot.$(PSUFFIX) : dsdot.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+ifeq ($(BUILD_BFLOAT16),1)
+cblas_sbdot.$(SUFFIX) cblas_sbdot.$(PSUFFIX) : bf16dot.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+cblas_sbstobf16.$(SUFFIX) cblas_sbstobf16.$(PSUFFIX) : tobf16.c
+       $(CC) $(CFLAGS) -DCBLAS -DSINGLE_PREC -UDOUBLE_PREC -c $< -o $(@F)
+cblas_sbdtobf16.$(SUFFIX) cblas_sbdtobf16.$(PSUFFIX) : tobf16.c
+       $(CC) $(CFLAGS) -DCBLAS -USINGLE_PREC -DDOUBLE_PREC -c $< -o $(@F)
+cblas_sbf16tos.$(SUFFIX)  cblas_sbf16tos.$(PSUFFIX) : bf16to.c
+       $(CC) $(CFLAGS) -DCBLAS -DSINGLE_PREC -UDOUBLE_PREC -c $< -o $(@F)
+cblas_dbf16tod.$(SUFFIX)  cblas_dbf16tod.$(PSUFFIX) : bf16to.c
+       $(CC) $(CFLAGS) -DCBLAS -USINGLE_PREC -DDOUBLE_PREC -c $< -o $(@F)
+endif
+
+cblas_sdot.$(SUFFIX) cblas_sdot.$(PSUFFIX) : dot.c
+               $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_ddot.$(SUFFIX) cblas_ddot.$(PSUFFIX) : dot.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_cdotu.$(SUFFIX) cblas_cdotu.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -DCBLAS -c -UCONJ $< -o $(@F)
+
+cblas_cdotc.$(SUFFIX) cblas_cdotc.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -DCBLAS -c -DCONJ $< -o $(@F)
+
+cblas_zdotu.$(SUFFIX) cblas_zdotu.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -DCBLAS -c -UCONJ $< -o $(@F)
+
+cblas_zdotc.$(SUFFIX) cblas_zdotc.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -DCBLAS -c -DCONJ $< -o $(@F)
+
+cblas_cdotu_sub.$(SUFFIX) cblas_cdotu_sub.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -DCBLAS -DFORCE_USE_STACK -c -UCONJ $< -o $(@F)
+
+cblas_cdotc_sub.$(SUFFIX) cblas_cdotc_sub.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -DCBLAS -DFORCE_USE_STACK -c -DCONJ $< -o $(@F)
+
+cblas_zdotu_sub.$(SUFFIX) cblas_zdotu_sub.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -DCBLAS -DFORCE_USE_STACK -c -UCONJ $< -o $(@F)
+
+cblas_zdotc_sub.$(SUFFIX) cblas_zdotc_sub.$(PSUFFIX) : zdot.c
+       $(CC) $(CFLAGS) -DCBLAS -DFORCE_USE_STACK -c -DCONJ $< -o $(@F)
+
+cblas_snrm2.$(SUFFIX) cblas_snrm2.$(PSUFFIX) : nrm2.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_dnrm2.$(SUFFIX) cblas_dnrm2.$(PSUFFIX) : nrm2.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_scnrm2.$(SUFFIX) cblas_scnrm2.$(PSUFFIX) : nrm2.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_dznrm2.$(SUFFIX) cblas_dznrm2.$(PSUFFIX) : nrm2.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_saxpy.$(SUFFIX) cblas_saxpy.$(PSUFFIX) : axpy.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_daxpy.$(SUFFIX) cblas_daxpy.$(PSUFFIX) : axpy.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_caxpy.$(SUFFIX) cblas_caxpy.$(PSUFFIX) : zaxpy.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_zaxpy.$(SUFFIX) cblas_zaxpy.$(PSUFFIX) : zaxpy.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_scopy.$(SUFFIX) cblas_scopy.$(PSUFFIX) : copy.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_dcopy.$(SUFFIX) cblas_dcopy.$(PSUFFIX) : copy.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_ccopy.$(SUFFIX) cblas_ccopy.$(PSUFFIX) : copy.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_zcopy.$(SUFFIX) cblas_zcopy.$(PSUFFIX) : copy.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_sswap.$(SUFFIX) cblas_sswap.$(PSUFFIX) : swap.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_dswap.$(SUFFIX) cblas_dswap.$(PSUFFIX) : swap.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_cswap.$(SUFFIX) cblas_cswap.$(PSUFFIX) : zswap.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_zswap.$(SUFFIX) cblas_zswap.$(PSUFFIX) : zswap.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_srot.$(SUFFIX) cblas_srot.$(PSUFFIX) : rot.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_drot.$(SUFFIX) cblas_drot.$(PSUFFIX) : rot.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_srotg.$(SUFFIX) cblas_srotg.$(PSUFFIX): rotg.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_drotg.$(SUFFIX) cblas_drotg.$(PSUFFIX): rotg.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_crotg.$(SUFFIX) crotg.$(PSUFFIX): zrotg.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
+
+cblas_zrotg.$(SUFFIX) zrotg.$(PSUFFIX): zrotg.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
+
+cblas_srotm.$(SUFFIX) cblas_srotm.$(PSUFFIX): rotm.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_drotm.$(SUFFIX) cblas_drotm.$(PSUFFIX): rotm.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_srotmg.$(SUFFIX) cblas_srotmg.$(PSUFFIX): rotmg.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_drotmg.$(SUFFIX) cblas_drotmg.$(PSUFFIX): rotmg.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_sscal.$(SUFFIX) cblas_sscal.$(PSUFFIX) : scal.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_dscal.$(SUFFIX) cblas_dscal.$(PSUFFIX) : scal.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_cscal.$(SUFFIX) cblas_cscal.$(PSUFFIX) : zscal.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_zscal.$(SUFFIX) cblas_zscal.$(PSUFFIX) : zscal.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_csscal.$(SUFFIX) cblas_csscal.$(PSUFFIX) : zscal.c
+       $(CC) $(CFLAGS) -DCBLAS -c -DSSCAL $< -o $(@F)
+
+cblas_zdscal.$(SUFFIX) cblas_zdscal.$(PSUFFIX) : zscal.c
+       $(CC) $(CFLAGS) -DCBLAS -c -DSSCAL $< -o $(@F)
+
+cblas_csrot.$(SUFFIX) cblas_csrot.$(PSUFFIX) : zrot.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+cblas_zdrot.$(SUFFIX) cblas_zdrot.$(PSUFFIX) : zrot.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+ifeq ($(BUILD_BFLOAT16),1)
+cblas_sbgemv.$(SUFFIX) cblas_sbgemv.$(PSUFFIX) : sbgemv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+endif
+
+cblas_sgemv.$(SUFFIX) cblas_sgemv.$(PSUFFIX): gemv.c
+       $(CC) -DCBLAS -c $(CFLAGS) -o $(@F) $<
+
+cblas_dgemv.$(SUFFIX) cblas_dgemv.$(PSUFFIX): gemv.c
+       $(CC) -DCBLAS -c $(CFLAGS) -o $(@F) $<
+
+cblas_cgemv.$(SUFFIX) cblas_cgemv.$(PSUFFIX): zgemv.c
+       $(CC) -DCBLAS -c $(CFLAGS) -o $(@F) $<
+
+cblas_zgemv.$(SUFFIX) cblas_zgemv.$(PSUFFIX): zgemv.c
+       $(CC) -DCBLAS -c $(CFLAGS) -o $(@F) $<
+
+cblas_sger.$(SUFFIX) cblas_sger.$(PSUFFIX) : ger.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dger.$(SUFFIX) cblas_dger.$(PSUFFIX) : ger.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_cgeru.$(SUFFIX) cblas_cgeru.$(PSUFFIX) : zger.c
+       $(CC) -DCBLAS -c $(CFLAGS) -UCONJ $< -o $(@F)
+
+cblas_cgerc.$(SUFFIX) cblas_cgerc.$(PSUFFIX) : zger.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DCONJ $< -o $(@F)
+
+cblas_zgeru.$(SUFFIX) cblas_zgeru.$(PSUFFIX) : zger.c
+       $(CC) -DCBLAS -c $(CFLAGS) -UCONJ $< -o $(@F)
+
+cblas_zgerc.$(SUFFIX) cblas_zgerc.$(PSUFFIX) : zger.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DCONJ $< -o $(@F)
+
+cblas_strsv.$(SUFFIX) cblas_strsv.$(PSUFFIX) : trsv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dtrsv.$(SUFFIX) cblas_dtrsv.$(PSUFFIX) : trsv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ctrsv.$(SUFFIX) cblas_ctrsv.$(PSUFFIX) : ztrsv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ztrsv.$(SUFFIX) cblas_ztrsv.$(PSUFFIX) : ztrsv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_strmv.$(SUFFIX) cblas_strmv.$(PSUFFIX) : trmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dtrmv.$(SUFFIX) cblas_dtrmv.$(PSUFFIX) : trmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ctrmv.$(SUFFIX) cblas_ctrmv.$(PSUFFIX) : ztrmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ztrmv.$(SUFFIX) cblas_ztrmv.$(PSUFFIX) : ztrmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ssyr.$(SUFFIX) cblas_ssyr.$(PSUFFIX) : syr.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dsyr.$(SUFFIX) cblas_dsyr.$(PSUFFIX) : syr.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_cher.$(SUFFIX) cblas_cher.$(PSUFFIX) : zher.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_zher.$(SUFFIX) cblas_zher.$(PSUFFIX) : zher.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ssyr2.$(SUFFIX) cblas_ssyr2.$(PSUFFIX) : syr2.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dsyr2.$(SUFFIX) cblas_dsyr2.$(PSUFFIX) : syr2.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_cher2.$(SUFFIX) cblas_cher2.$(PSUFFIX) : zher2.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_zher2.$(SUFFIX) cblas_zher2.$(PSUFFIX) : zher2.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_sgbmv.$(SUFFIX) cblas_sgbmv.$(PSUFFIX): gbmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) -o $(@F) $<
+
+cblas_dgbmv.$(SUFFIX) cblas_dgbmv.$(PSUFFIX): gbmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) -o $(@F) $<
+
+cblas_cgbmv.$(SUFFIX) cblas_cgbmv.$(PSUFFIX): zgbmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) -o $(@F) $<
+
+cblas_zgbmv.$(SUFFIX) cblas_zgbmv.$(PSUFFIX): zgbmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) -o $(@F) $<
+
+cblas_ssbmv.$(SUFFIX) cblas_ssbmv.$(PSUFFIX) : sbmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dsbmv.$(SUFFIX) cblas_dsbmv.$(PSUFFIX) : sbmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_chbmv.$(SUFFIX) cblas_chbmv.$(PSUFFIX) : zhbmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_zhbmv.$(SUFFIX) cblas_zhbmv.$(PSUFFIX) : zhbmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_sspmv.$(SUFFIX) cblas_sspmv.$(PSUFFIX) : spmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dspmv.$(SUFFIX) cblas_dspmv.$(PSUFFIX) : spmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_sspr.$(SUFFIX) cblas_sspr.$(PSUFFIX) : spr.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dspr.$(SUFFIX) cblas_dspr.$(PSUFFIX) : spr.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_chpr.$(SUFFIX) cblas_chpr.$(PSUFFIX) : zhpr.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_zhpr.$(SUFFIX) cblas_zhpr.$(PSUFFIX) : zhpr.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_sspr2.$(SUFFIX) cblas_sspr2.$(PSUFFIX) : spr2.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dspr2.$(SUFFIX) cblas_dspr2.$(PSUFFIX) : spr2.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_chpr2.$(SUFFIX) cblas_chpr2.$(PSUFFIX) : zhpr2.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_zhpr2.$(SUFFIX) cblas_zhpr2.$(PSUFFIX) : zhpr2.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_stbmv.$(SUFFIX) cblas_stbmv.$(PSUFFIX) : tbmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dtbmv.$(SUFFIX) cblas_dtbmv.$(PSUFFIX) : tbmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ctbmv.$(SUFFIX) cblas_ctbmv.$(PSUFFIX) : ztbmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ztbmv.$(SUFFIX) cblas_ztbmv.$(PSUFFIX) : ztbmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_stbsv.$(SUFFIX) cblas_stbsv.$(PSUFFIX) : tbsv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dtbsv.$(SUFFIX) cblas_dtbsv.$(PSUFFIX) : tbsv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ctbsv.$(SUFFIX) cblas_ctbsv.$(PSUFFIX) : ztbsv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ztbsv.$(SUFFIX) cblas_ztbsv.$(PSUFFIX) : ztbsv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_stpmv.$(SUFFIX) cblas_stpmv.$(PSUFFIX) : tpmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dtpmv.$(SUFFIX) cblas_dtpmv.$(PSUFFIX) : tpmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ctpmv.$(SUFFIX) cblas_ctpmv.$(PSUFFIX) : ztpmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ztpmv.$(SUFFIX) cblas_ztpmv.$(PSUFFIX) : ztpmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_chpmv.$(SUFFIX) cblas_chpmv.$(PSUFFIX) : zhpmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_zhpmv.$(SUFFIX) cblas_zhpmv.$(PSUFFIX) : zhpmv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_stpsv.$(SUFFIX) cblas_stpsv.$(PSUFFIX) : tpsv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dtpsv.$(SUFFIX) cblas_dtpsv.$(PSUFFIX) : tpsv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ctpsv.$(SUFFIX) cblas_ctpsv.$(PSUFFIX) : ztpsv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ztpsv.$(SUFFIX) cblas_ztpsv.$(PSUFFIX) : ztpsv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ssymv.$(SUFFIX) cblas_ssymv.$(PSUFFIX) : symv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dsymv.$(SUFFIX) cblas_dsymv.$(PSUFFIX) : symv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_chemv.$(SUFFIX) cblas_chemv.$(PSUFFIX) : zhemv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_zhemv.$(SUFFIX) cblas_zhemv.$(PSUFFIX) : zhemv.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_sgemm.$(SUFFIX) cblas_sgemm.$(PSUFFIX) : gemm.c ../param.h
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+ifeq ($(BUILD_BFLOAT16),1)
+cblas_sbgemm.$(SUFFIX) cblas_sbgemm.$(PSUFFIX) : gemm.c ../param.h
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+endif
+
+cblas_dgemm.$(SUFFIX) cblas_dgemm.$(PSUFFIX) : gemm.c ../param.h
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_cgemm.$(SUFFIX) cblas_cgemm.$(PSUFFIX) : gemm.c ../param.h
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_zgemm.$(SUFFIX) cblas_zgemm.$(PSUFFIX) : gemm.c ../param.h
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ssymm.$(SUFFIX) cblas_ssymm.$(PSUFFIX) : symm.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dsymm.$(SUFFIX) cblas_dsymm.$(PSUFFIX) : symm.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_csymm.$(SUFFIX) cblas_csymm.$(PSUFFIX) : symm.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_zsymm.$(SUFFIX) cblas_zsymm.$(PSUFFIX) : symm.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ssyrk.$(SUFFIX) cblas_ssyrk.$(PSUFFIX) : syrk.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dsyrk.$(SUFFIX) cblas_dsyrk.$(PSUFFIX) : syrk.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_csyrk.$(SUFFIX) cblas_csyrk.$(PSUFFIX) : syrk.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_zsyrk.$(SUFFIX) cblas_zsyrk.$(PSUFFIX) : syrk.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ssyr2k.$(SUFFIX) cblas_ssyr2k.$(PSUFFIX) : syr2k.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dsyr2k.$(SUFFIX) cblas_dsyr2k.$(PSUFFIX) : syr2k.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_csyr2k.$(SUFFIX) cblas_csyr2k.$(PSUFFIX) : syr2k.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_zsyr2k.$(SUFFIX) cblas_zsyr2k.$(PSUFFIX) : syr2k.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_strmm.$(SUFFIX) cblas_strmm.$(PSUFFIX) : trsm.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DTRMM $< -o $(@F)
+
+cblas_dtrmm.$(SUFFIX) cblas_dtrmm.$(PSUFFIX) : trsm.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DTRMM $< -o $(@F)
+
+cblas_ctrmm.$(SUFFIX) cblas_ctrmm.$(PSUFFIX) : trsm.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DTRMM $< -o $(@F)
+
+cblas_ztrmm.$(SUFFIX) cblas_ztrmm.$(PSUFFIX) : trsm.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DTRMM $< -o $(@F)
+
+cblas_strsm.$(SUFFIX) cblas_strsm.$(PSUFFIX) : trsm.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_dtrsm.$(SUFFIX) cblas_dtrsm.$(PSUFFIX) : trsm.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ctrsm.$(SUFFIX) cblas_ctrsm.$(PSUFFIX) : trsm.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_ztrsm.$(SUFFIX) cblas_ztrsm.$(PSUFFIX) : trsm.c
+       $(CC) -DCBLAS -c $(CFLAGS) $< -o $(@F)
+
+cblas_chemm.$(SUFFIX) cblas_chemm.$(PSUFFIX) : symm.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+cblas_zhemm.$(SUFFIX) cblas_zhemm.$(PSUFFIX) : symm.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+cblas_cherk.$(SUFFIX) cblas_cherk.$(PSUFFIX) : syrk.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+cblas_zherk.$(SUFFIX) cblas_zherk.$(PSUFFIX) : syrk.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+cblas_cher2k.$(SUFFIX) cblas_cher2k.$(PSUFFIX) : syr2k.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+cblas_zher2k.$(SUFFIX) cblas_zher2k.$(PSUFFIX) : syr2k.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DHEMM $< -o $(@F)
+
+cblas_cgemm3m.$(SUFFIX) cblas_cgemm3m.$(PSUFFIX) : gemm.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DGEMM3M $< -o $(@F)
+
+cblas_zgemm3m.$(SUFFIX) cblas_zgemm3m.$(PSUFFIX) : gemm.c
+       $(CC) -DCBLAS -c $(CFLAGS) -DGEMM3M $< -o $(@F)
+
+
+sgetf2.$(SUFFIX) sgetf2.$(PSUFFIX) : lapack/getf2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dgetf2.$(SUFFIX) dgetf2.$(PSUFFIX) : lapack/getf2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qgetf2.$(SUFFIX) qgetf2.$(PSUFFIX) : getf2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cgetf2.$(SUFFIX) cgetf2.$(PSUFFIX) : lapack/zgetf2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zgetf2.$(SUFFIX) zgetf2.$(PSUFFIX) : lapack/zgetf2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xgetf2.$(SUFFIX) xgetf2.$(PSUFFIX) : zgetf2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+sgetrf.$(SUFFIX) sgetrf.$(PSUFFIX) : lapack/getrf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dgetrf.$(SUFFIX) dgetrf.$(PSUFFIX) : lapack/getrf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qgetrf.$(SUFFIX) qgetrf.$(PSUFFIX) : getrf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cgetrf.$(SUFFIX) cgetrf.$(PSUFFIX) : lapack/zgetrf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zgetrf.$(SUFFIX) zgetrf.$(PSUFFIX) : lapack/zgetrf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xgetrf.$(SUFFIX) xgetrf.$(PSUFFIX) : zgetrf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+slauu2.$(SUFFIX) slauu2.$(PSUFFIX) : lapack/lauu2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dlauu2.$(SUFFIX) dlauu2.$(PSUFFIX) : lapack/lauu2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qlauu2.$(SUFFIX) qlauu2.$(PSUFFIX) : lauu2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+clauu2.$(SUFFIX) clauu2.$(PSUFFIX) : lapack/zlauu2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zlauu2.$(SUFFIX) zlauu2.$(PSUFFIX) : lapack/zlauu2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xlauu2.$(SUFFIX) xlauu2.$(PSUFFIX) : zlauu2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+slauum.$(SUFFIX) slauum.$(PSUFFIX) : lapack/lauum.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dlauum.$(SUFFIX) dlauum.$(PSUFFIX) : lapack/lauum.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qlauum.$(SUFFIX) qlauum.$(PSUFFIX) : lauum.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+clauum.$(SUFFIX) clauum.$(PSUFFIX) : lapack/zlauum.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zlauum.$(SUFFIX) zlauum.$(PSUFFIX) : lapack/zlauum.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xlauum.$(SUFFIX) xlauum.$(PSUFFIX) : zlauum.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+spotf2.$(SUFFIX) spotf2.$(PSUFFIX) : lapack/potf2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dpotf2.$(SUFFIX) dpotf2.$(PSUFFIX) : lapack/potf2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qpotf2.$(SUFFIX) qpotf2.$(PSUFFIX) : potf2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cpotf2.$(SUFFIX) cpotf2.$(PSUFFIX) : lapack/zpotf2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zpotf2.$(SUFFIX) zpotf2.$(PSUFFIX) : lapack/zpotf2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xpotf2.$(SUFFIX) xpotf2.$(PSUFFIX) : zpotf2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+spotrf.$(SUFFIX) spotrf.$(PSUFFIX) : lapack/potrf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dpotrf.$(SUFFIX) dpotrf.$(PSUFFIX) : lapack/potrf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qpotrf.$(SUFFIX) qpotrf.$(PSUFFIX) : potrf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cpotrf.$(SUFFIX) cpotrf.$(PSUFFIX) : lapack/zpotrf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zpotrf.$(SUFFIX) zpotrf.$(PSUFFIX) : lapack/zpotrf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xpotrf.$(SUFFIX) xpotrf.$(PSUFFIX) : zpotrf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+strti2.$(SUFFIX) strti2.$(PSUFFIX) : lapack/trti2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dtrti2.$(SUFFIX) dtrti2.$(PSUFFIX) : lapack/trti2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qtrti2.$(SUFFIX) qtrti2.$(PSUFFIX) : trti2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ctrti2.$(SUFFIX) ctrti2.$(PSUFFIX) : lapack/ztrti2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ztrti2.$(SUFFIX) ztrti2.$(PSUFFIX) : lapack/ztrti2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xtrti2.$(SUFFIX) xtrti2.$(PSUFFIX) : ztrti2.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+strtri.$(SUFFIX) strtri.$(PSUFFIX) : lapack/trtri.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dtrtri.$(SUFFIX) dtrtri.$(PSUFFIX) : lapack/trtri.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qtrtri.$(SUFFIX) qtrtri.$(PSUFFIX) : trtri.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ctrtri.$(SUFFIX) ctrtri.$(PSUFFIX) : lapack/ztrtri.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ztrtri.$(SUFFIX) ztrtri.$(PSUFFIX) : lapack/ztrtri.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xtrtri.$(SUFFIX) xtrtri.$(PSUFFIX) : ztrtri.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+slaswp.$(SUFFIX) slaswp.$(PSUFFIX) : lapack/laswp.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dlaswp.$(SUFFIX) dlaswp.$(PSUFFIX) : lapack/laswp.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qlaswp.$(SUFFIX) qlaswp.$(PSUFFIX) : laswp.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+claswp.$(SUFFIX) claswp.$(PSUFFIX) : lapack/zlaswp.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zlaswp.$(SUFFIX) zlaswp.$(PSUFFIX) : lapack/zlaswp.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xlaswp.$(SUFFIX) xlaswp.$(PSUFFIX) : zlaswp.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+sgetrs.$(SUFFIX) sgetrs.$(PSUFFIX) : lapack/getrs.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dgetrs.$(SUFFIX) dgetrs.$(PSUFFIX) : lapack/getrs.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qgetrs.$(SUFFIX) qgetrs.$(PSUFFIX) : lapack/getrs.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cgetrs.$(SUFFIX) cgetrs.$(PSUFFIX) : lapack/zgetrs.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zgetrs.$(SUFFIX) zgetrs.$(PSUFFIX) : lapack/zgetrs.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xgetrs.$(SUFFIX) xgetrs.$(PSUFFIX) : lapack/zgetrs.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+strtrs.$(SUFFIX) strtrs.$(PSUFFIX) : lapack/trtrs.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dtrtrs.$(SUFFIX) dtrtrs.$(PSUFFIX) : lapack/trtrs.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qtrtrs.$(SUFFIX) qtrtrs.$(PSUFFIX) : lapack/trtrs.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ctrtrs.$(SUFFIX) ctrtrs.$(PSUFFIX) : lapack/ztrtrs.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+ztrtrs.$(SUFFIX) ztrtrs.$(PSUFFIX) : lapack/ztrtrs.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xtrtrs.$(SUFFIX) xtrtrs.$(PSUFFIX) : lapack/ztrtrs.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+sgesv.$(SUFFIX) sgesv.$(PSUFFIX) : lapack/gesv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dgesv.$(SUFFIX) dgesv.$(PSUFFIX) : lapack/gesv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qgesv.$(SUFFIX) qgesv.$(PSUFFIX) : gesv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cgesv.$(SUFFIX) cgesv.$(PSUFFIX) : lapack/gesv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zgesv.$(SUFFIX) zgesv.$(PSUFFIX) : lapack/gesv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xgesv.$(SUFFIX) xgesv.$(PSUFFIX) : gesv.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+spotri.$(SUFFIX) spotri.$(PSUFFIX) : lapack/potri.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dpotri.$(SUFFIX) dpotri.$(PSUFFIX) : lapack/potri.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qpotri.$(SUFFIX) qpotri.$(PSUFFIX) : potri.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cpotri.$(SUFFIX) cpotri.$(PSUFFIX) : lapack/zpotri.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zpotri.$(SUFFIX) zpotri.$(PSUFFIX) : lapack/zpotri.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xpotri.$(SUFFIX) xpotri.$(PSUFFIX) : zpotri.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+slarf.$(SUFFIX) slarf.$(PSUFFIX) : larf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dlarf.$(SUFFIX) dlarf.$(PSUFFIX) : larf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+qlarf.$(SUFFIX) qlarf.$(PSUFFIX) : larf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+clarf.$(SUFFIX) clarf.$(PSUFFIX) : larf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zlarf.$(SUFFIX) zlarf.$(PSUFFIX) : larf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+xlarf.$(SUFFIX) xlarf.$(PSUFFIX) : larf.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+
+############# BLAS EXTENSIONS #####################################
+
+daxpby.$(SUFFIX) daxpby.$(PSUFFIX) : axpby.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+cblas_daxpby.$(SUFFIX) cblas_daxpby.$(PSUFFIX) : axpby.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+saxpby.$(SUFFIX) saxpby.$(PSUFFIX) : axpby.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+cblas_saxpby.$(SUFFIX) cblas_saxpby.$(PSUFFIX) : axpby.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+zaxpby.$(SUFFIX) zaxpby.$(PSUFFIX) : zaxpby.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+cblas_zaxpby.$(SUFFIX) cblas_zaxpby.$(PSUFFIX) : zaxpby.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+caxpby.$(SUFFIX) caxpby.$(PSUFFIX) : zaxpby.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
+cblas_caxpby.$(SUFFIX) cblas_caxpby.$(PSUFFIX) : zaxpby.c
+       $(CC) $(CFLAGS) -DCBLAS -c $< -o $(@F)
+
+domatcopy.$(SUFFIX) domatcopy.$(PSUFFIX) : omatcopy.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cblas_domatcopy.$(SUFFIX) cblas_domatcopy.$(PSUFFIX) : omatcopy.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F) 
+
+somatcopy.$(SUFFIX) somatcopy.$(PSUFFIX) : omatcopy.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cblas_somatcopy.$(SUFFIX) cblas_somatcopy.$(PSUFFIX) : omatcopy.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
+
+comatcopy.$(SUFFIX) comatcopy.$(PSUFFIX) : zomatcopy.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cblas_comatcopy.$(SUFFIX) cblas_comatcopy.$(PSUFFIX) : zomatcopy.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
+
+zomatcopy.$(SUFFIX) zomatcopy.$(PSUFFIX) : zomatcopy.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cblas_zomatcopy.$(SUFFIX) cblas_zomatcopy.$(PSUFFIX) : zomatcopy.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
+
+dimatcopy.$(SUFFIX) dimatcopy.$(PSUFFIX) : imatcopy.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cblas_dimatcopy.$(SUFFIX) cblas_dimatcopy.$(PSUFFIX) : imatcopy.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
+
+simatcopy.$(SUFFIX) simatcopy.$(PSUFFIX) : imatcopy.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cblas_simatcopy.$(SUFFIX) cblas_simatcopy.$(PSUFFIX) : imatcopy.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
+
+cimatcopy.$(SUFFIX) cimatcopy.$(PSUFFIX) : zimatcopy.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cblas_cimatcopy.$(SUFFIX) cblas_cimatcopy.$(PSUFFIX) : zimatcopy.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
+
+zimatcopy.$(SUFFIX) zimatcopy.$(PSUFFIX) : zimatcopy.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cblas_zimatcopy.$(SUFFIX) cblas_zimatcopy.$(PSUFFIX) : zimatcopy.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
+
+sgeadd.$(SUFFIX) sgeadd.$(PSUFFIX) : geadd.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+dgeadd.$(SUFFIX) dgeadd.$(PSUFFIX) : geadd.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cgeadd.$(SUFFIX) cgeadd.$(PSUFFIX) : zgeadd.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+zgeadd.$(SUFFIX) zgeadd.$(PSUFFIX) : zgeadd.c
+       $(CC) -c $(CFLAGS) $< -o $(@F)
+
+cblas_sgeadd.$(SUFFIX) cblas_sgeadd.$(PSUFFIX) : geadd.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
+
+cblas_dgeadd.$(SUFFIX) cblas_dgeadd.$(PSUFFIX) : geadd.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
+
+cblas_cgeadd.$(SUFFIX) cblas_cgeadd.$(PSUFFIX) : zgeadd.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
+
+cblas_zgeadd.$(SUFFIX) cblas_zgeadd.$(PSUFFIX) : zgeadd.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
+
+cblas_xerbla.$(SUFFIX) cblas_xerbla.$(PSUFFIX) : xerbla.c
+       $(CC) -c $(CFLAGS) -DCBLAS $< -o $(@F)
 
-clean ::
-       @for d in $(SUBDIRS_ALL) ; \
-       do if test -d $$d; then \
-         $(MAKE) -C $$d $(@F) || exit 1 ; \
-       fi; \
-       done
-#ifdef DYNAMIC_ARCH
-       @$(MAKE) -C kernel clean
-#endif
-       @$(MAKE) -C reference clean
-       @rm -f *.$(LIBSUFFIX) *.so *~ *.exe getarch getarch_2nd *.dll *.lib *.$(SUFFIX) *.dwf $(LIBPREFIX).$(LIBSUFFIX) $(LIBPREFIX)_p.$(LIBSUFFIX) $(LIBPREFIX).so.$(MAJOR_VERSION) *.lnk myconfig.h *.so.renamed *.a.renamed *.so.0
-ifeq ($(OSNAME), Darwin)
-       @rm -rf getarch.dSYM getarch_2nd.dSYM
-endif
-       @rm -f Makefile.conf config.h Makefile_kernel.conf config_kernel.h st* *.dylib
-       @rm -f cblas.tmp cblas.tmp2
-       @touch $(NETLIB_LAPACK_DIR)/make.inc
-       @$(MAKE) -C $(NETLIB_LAPACK_DIR) clean
-       @rm -f $(NETLIB_LAPACK_DIR)/make.inc $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_mangling.h
-       @$(MAKE) -C relapack clean
-       @rm -f *.grd Makefile.conf_last config_last.h
-       @(cd $(NETLIB_LAPACK_DIR)/TESTING && rm -f x* *.out testing_results.txt)
-       @echo Done.