openblas_ffi 0.1.1

FFI bindings to sequential and parallel OpenBLAS.
Documentation
SBLASOBJS_P = $(SBLASOBJS:.$(SUFFIX)=.$(PSUFFIX))
DBLASOBJS_P = $(DBLASOBJS:.$(SUFFIX)=.$(PSUFFIX))
QBLASOBJS_P = $(QBLASOBJS:.$(SUFFIX)=.$(PSUFFIX))
CBLASOBJS_P = $(CBLASOBJS:.$(SUFFIX)=.$(PSUFFIX))
ZBLASOBJS_P = $(ZBLASOBJS:.$(SUFFIX)=.$(PSUFFIX))
XBLASOBJS_P = $(XBLASOBJS:.$(SUFFIX)=.$(PSUFFIX))

COMMONOBJS_P = $(COMMONOBJS:.$(SUFFIX)=.$(PSUFFIX))

HPLOBJS_P   = $(HPLOBJS:.$(SUFFIX)=.$(PSUFFIX))

BLASOBJS    = $(SBLASOBJS)   $(DBLASOBJS)   $(CBLASOBJS)   $(ZBLASOBJS)
BLASOBJS_P  = $(SBLASOBJS_P) $(DBLASOBJS_P) $(CBLASOBJS_P) $(ZBLASOBJS_P)

ifdef EXPRECISION
BLASOBJS   += $(QBLASOBJS)   $(XBLASOBJS)
BLASOBJS_P += $(QBLASOBJS_P) $(XBLASOBJS_P)
endif

ifdef QUAD_PRECISION
BLASOBJS   += $(QBLASOBJS)   $(XBLASOBJS)
BLASOBJS_P += $(QBLASOBJS_P) $(XBLASOBJS_P)
endif

$(SBLASOBJS) $(SBLASOBJS_P) : override CFLAGS += -UDOUBLE  -UCOMPLEX
$(DBLASOBJS) $(DBLASOBJS_P) : override CFLAGS += -DDOUBLE  -UCOMPLEX
$(QBLASOBJS) $(QBLASOBJS_P) : override CFLAGS += -DXDOUBLE -UCOMPLEX
$(CBLASOBJS) $(CBLASOBJS_P) : override CFLAGS += -UDOUBLE  -DCOMPLEX
$(ZBLASOBJS) $(ZBLASOBJS_P) : override CFLAGS += -DDOUBLE  -DCOMPLEX
$(XBLASOBJS) $(XBLASOBJS_P) : override CFLAGS += -DXDOUBLE -DCOMPLEX

$(SBLASOBJS_P) : override CFLAGS += -DPROFILE $(COMMON_PROF)
$(DBLASOBJS_P) : override CFLAGS += -DPROFILE $(COMMON_PROF)
$(QBLASOBJS_P) : override CFLAGS += -DPROFILE $(COMMON_PROF)
$(CBLASOBJS_P) : override CFLAGS += -DPROFILE $(COMMON_PROF)
$(ZBLASOBJS_P) : override CFLAGS += -DPROFILE $(COMMON_PROF)
$(XBLASOBJS_P) : override CFLAGS += -DPROFILE $(COMMON_PROF)

libs    :: $(BLASOBJS) $(COMMONOBJS)
	$(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME) $^

prof    :: $(BLASOBJS_P) $(COMMONOBJS_P)
	$(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME_P) $^

hpl	:: $(HPLOBJS) $(COMMONOBJS)
	$(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME) $^

hpl_p	:: $(HPLOBJS_P) $(COMMONOBJS_P)
	$(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME_P) $^

kernel :: $(BLASOBJS)
	$(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME) $^

commonlibs :: $(COMMONOBJS)
	$(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME) $^

commonprof :: $(COMMONOBJS_P)
	$(AR) $(ARFLAGS) -ru $(TOPDIR)/$(LIBNAME_P) $^

quick :
	  $(MAKE) -C $(TOPDIR) libs

bms.$(SUFFIX):bm.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -UDOUBLE -UCOMPLEX -c $< -o $(@F)

bmd.$(SUFFIX):bm.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DDOUBLE -UCOMPLEX -c $< -o $(@F)

bmd-k.$(SUFFIX):bm-k.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DDOUBLE -UCOMPLEX -c $< -o $(@F)

ifdef QUAD_PRECISION
bmq.$(SUFFIX):bmq.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DXDOUBLE -UCOMPLEX -c $< -o $(@F)

bmx.$(SUFFIX):bmx.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DXDOUBLE -DCOMPLEX -c $< -o $(@F)
else
bmq.$(SUFFIX):bm.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DXDOUBLE -UCOMPLEX -c $< -o $(@F)

bmx.$(SUFFIX):bmz.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DXDOUBLE -DCOMPLEX -c $< -o $(@F)
endif

bmc.$(SUFFIX):bmz.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -UDOUBLE -DCOMPLEX -c $< -o $(@F)

bmz.$(SUFFIX):bmz.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DDOUBLE -DCOMPLEX -c $< -o $(@F)

bmd_nn.$(SUFFIX):bm_special.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DDOUBLE -UCOMPLEX -DNN -c $< -o $(@F)

bmd_nt.$(SUFFIX):bm_special.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DDOUBLE -UCOMPLEX -DNT -c $< -o $(@F)

bmd_tn.$(SUFFIX):bm_special.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DDOUBLE -UCOMPLEX -DTN -c $< -o $(@F)

bmd_tt.$(SUFFIX):bm_special.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DDOUBLE -UCOMPLEX -DTT -c $< -o $(@F)

bm-phy.$(SUFFIX):bm-phy.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DDOUBLE -UCOMPLEX -c $< -o $(@F)

bms.$(PSUFFIX):bm.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(PFLAGS) -UDOUBLE -UCOMPLEX -c $< -o $(@F)

bmd.$(PSUFFIX):bm.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(PFLAGS) -DDOUBLE -UCOMPLEX -c $< -o $(@F)

ifdef QUAD_PRECISION
bmq.$(PSUFFIX):bmq.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(PFLAGS) -DXDOUBLE -UCOMPLEX -c $< -o $(@F)

bmx.$(PSUFFIX):bmx.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(PFLAGS) -DXDOUBLE -DCOMPLEX -c $< -o $(@F)
else
bmq.$(PSUFFIX):bm.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(PFLAGS) -DXDOUBLE -UCOMPLEX -c $< -o $(@F)

bmx.$(PSUFFIX):bmz.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(PFLAGS) -DXDOUBLE -DCOMPLEX -c $< -o $(@F)
endif

bmc.$(PSUFFIX):bmz.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(PFLAGS) -UDOUBLE -DCOMPLEX -c $< -o $(@F)

bmz.$(PSUFFIX):bmz.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(PFLAGS) -DDOUBLE -DCOMPLEX -c $< -o $(@F)

bms : bms.$(SUFFIX) $(SBLASOBJS) $(COMMONOBJS) $(SOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmd : bmd.$(SUFFIX) $(DBLASOBJS) $(COMMONOBJS) $(DOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB) -lm

bmd-k : bmd-k.$(SUFFIX) $(DBLASOBJS) $(COMMONOBJS) $(DOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB) -lm

bmq : bmq.$(SUFFIX) $(QBLASOBJS) $(COMMONOBJS) $(QOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmc : bmc.$(SUFFIX) $(CBLASOBJS) $(COMMONOBJS) $(COBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB) $(FEXTRALIB)

bmz : bmz.$(SUFFIX) $(ZBLASOBJS) $(COMMONOBJS) $(ZOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmx : bmx.$(SUFFIX) $(XBLASOBJS) $(COMMONOBJS) $(XOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmd_nn : bmd_nn.$(SUFFIX) $(DBLASOBJS) $(COMMONOBJS) $(DOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmd_nt : bmd_nt.$(SUFFIX) $(DBLASOBJS) $(COMMONOBJS) $(DOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmd_tn : bmd_tn.$(SUFFIX) $(DBLASOBJS) $(COMMONOBJS) $(DOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmd_tt : bmd_tt.$(SUFFIX) $(DBLASOBJS) $(COMMONOBJS) $(DOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bm-phy:bm-phy.$(SUFFIX) $(DBLASOBJS) $(COMMONOBJS) $(DOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmcc	: bmcc.$(SUFFIX) $(CBLASOBJS) $(COMMONOBJS) $(COBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmzc	: bmzc.$(SUFFIX) $(ZBLASOBJS) $(COMMONOBJS) $(ZOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bms.prof : bms.$(PSUFFIX) $(SBLASOBJS_P) $(COMMONOBJS_P) $(SOBJS) $(OBJS) $(LIBS_P)
	$(CC) -o $(@F) $(PFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmd.prof : bmd.$(PSUFFIX) $(DBLASOBJS_P) $(COMMONOBJS_P) $(DOBJS) $(OBJS) $(LIBS_P)
	$(CC) -o $(@F) $(PFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmq.prof : bmq.$(PSUFFIX) $(QBLASOBJS_P) $(COMMONOBJS_P) $(QOBJS) $(OBJS) $(LIBS_P)
	$(CC) -o $(@F) $(PFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmc.prof : bmc.$(PSUFFIX) $(CBLASOBJS_P) $(COMMONOBJS) $(COBJS) $(OBJS) $(LIBS_P)
	$(CC) -o $(@F) $(PFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmz.prof : bmz.$(PSUFFIX) $(ZBLASOBJS_P) $(COMMONOBJS) $(ZOBJS) $(OBJS) $(LIBS_P)
	$(CC) -o $(@F) $(PFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bmx.prof : bmz.$(PSUFFIX) $(XBLASOBJS_P) $(COMMONOBJS) $(XOBJS) $(OBJS) $(LIBS_P)
	$(CC) -o $(@F) $(PFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

bms.cxml : bms.$(SUFFIX) $(SOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBCXML)

bmd.cxml : bmd.$(SUFFIX) $(DOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBCXML)

bmc.cxml : bmc.$(SUFFIX) $(COBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBCXML)

bmz.cxml : bmz.$(SUFFIX) $(ZOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBCXML)

bms.scsl : bms.$(SUFFIX) $(SOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBSCSL)

bmd.scsl : bmd.$(SUFFIX) $(DOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBSCSL)

bmc.scsl : bmc.$(SUFFIX) $(COBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBSCSL)

bmz.scsl : bmz.$(SUFFIX) $(ZOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBSCSL)

bms.acml : bms.$(SUFFIX) $(SOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBACML)

bmd.acml : bmd.$(SUFFIX) $(DOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBACML)

bmc.acml : bmc.$(SUFFIX) $(COBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBACML)

bmz.acml : bmz.$(SUFFIX) $(ZOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBACML)

bms.sun : bms.$(SUFFIX) $(SOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBSUNPERF) $(EXTRALIB) $(CEXTRALIB)

bmd.sun : bmd.$(SUFFIX) $(DOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBSUNPERF) $(EXTRALIB) $(CEXTRALIB)

bmc.sun : bmc.$(SUFFIX) $(COBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBSUNPERF) $(EXTRALIB) $(CEXTRALIB)

bmz.sun : bmz.$(SUFFIX) $(ZOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBSUNPERF) $(EXTRALIB) $(CEXTRALIB)

bms.atlas : bms.$(SUFFIX) $(SOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBATLAS)

bmd.atlas : bmd.$(SUFFIX) $(DOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBATLAS)

bmc.atlas : bmc.$(SUFFIX) $(COBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBATLAS)

bmz.atlas : bmz.$(SUFFIX) $(ZOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBATLAS)

bms.essl : bms.$(SUFFIX) $(SOBJS) $(OBJS)
	$(CC) $(FCOMMON_OPT) -o $(@F) $^  $(LIBESSL)

bmd.essl : bmd.$(SUFFIX) $(DOBJS) $(OBJS)
	$(CC) $(CCOMMON_OPT) -o $(@F) $^  $(LIBESSL)

bmc.essl : bmc.$(SUFFIX) $(COBJS) $(OBJS)
	$(F77) $(CCOMMON_OPT) -o $(@F) $^  $(LIBESSL)

bmz.essl : bmz.$(SUFFIX) $(ZOBJS) $(OBJS)
	$(CC) $(CCOMMON_OPT) -o $(@F) $^  $(LIBESSL)

bms.flame : bms.$(SUFFIX) $(SOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBFLAME)

bmd.flame : bmd.$(SUFFIX) $(DOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBFLAME)

bmc.flame : bmc.$(SUFFIX) $(COBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBFLAME)

bmz.flame : bmz.$(SUFFIX) $(ZOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBFLAME)

bms.flame.prof : bms.$(SUFFIX) $(SOBJS) $(OBJS_P)
	$(F77) -o $(@F) $(PFLAGS) $^  $(LIBFLAME)

bmd.flame.prof : bmd.$(SUFFIX) $(DOBJS) $(OBJS_P)
	$(F77) -o $(@F) $(PFLAGS) $^  $(LIBFLAME)

bmc.flame.prof : bmc.$(SUFFIX) $(COBJS) $(OBJS_P)
	$(F77) -o $(@F) $(PFLAGS) $^  $(LIBFLAME)

bmz.flame.prof : bmz.$(SUFFIX) $(ZOBJS) $(OBJS_P)
	$(F77) -o $(@F) $(PFLAGS) $^  $(LIBFLAME)

bms.mkl : bms.$(SUFFIX) $(SOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBMKL) $(EXTRALIB) $(CEXTRALIB)

bmd.mkl : bmd.$(SUFFIX) $(DOBJS) $(OBJS)
	$(CC) -static -o $(@F) $(CFLAGS) $^  $(LIBMKL) $(EXTRALIB) $(CEXTRALIB)

bmc.mkl : bmc.$(SUFFIX) $(COBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBMKL) $(EXTRALIB) $(CEXTRALIB)

bmz.mkl : bmz.$(SUFFIX) $(ZOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBMKL) $(EXTRALIB) $(CEXTRALIB)

bmq.mkl : bmq.$(SUFFIX) $(QOBJS) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBMKL)  $(EXTRALIB) $(CEXTRALIB)

bms.mkl.prof : bms.$(PSUFFIX) $(SOBJS) $(OBJS)
	$(CC) -o $(@F) $(PFLAGS) $^  $(LIBMKL)

bmd.mkl.prof : bmd.$(PSUFFIX) $(DOBJS) $(OBJS)
	$(CC) -o $(@F) $(PFLAGS) $^  $(LIBMKL)

bmc.mkl.prof : bmc.$(PSUFFIX) $(COBJS) $(OBJS)
	$(CC) -o $(@F) $(PFLAGS) $^  $(LIBMKL)

bmz.mkl.prof : bmz.$(PSUFFIX) $(ZOBJS) $(OBJS)
	$(CC) -o $(@F) $(PFLAGS) $^  $(LIBMKL)

bms.mlib : bms.$(SUFFIX) $(SOBJS) $(OBJS)
	$(F77) -o $(@F) $(CFLAGS) $^  $(LIBMLIB)

bmd.mlib : bmd.$(SUFFIX) $(DOBJS) $(OBJS)
	$(F77) -o $(@F) $(CFLAGS) $^  $(LIBMLIB)

bmc.mlib : bmc.$(SUFFIX) $(COBJS) $(OBJS)
	$(F77) -o $(@F) $(CFLAGS) $^  $(LIBMLIB)

bmz.mlib : bmz.$(SUFFIX) $(ZOBJS) $(OBJS)
	$(F77) -o $(@F) $(CFLAGS) $^  $(LIBMLIB)

bms.veclib : bms.$(SUFFIX) $(SOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBVECLIB)

bmd.veclib : bmd.$(SUFFIX) $(DOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBVECLIB)

bmc.veclib : bmc.$(SUFFIX) $(COBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBVECLIB)

bmz.veclib : bmz.$(SUFFIX) $(ZOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBVECLIB)

bms.fuji : bms.$(SUFFIX) $(SOBJS)
ifndef SMP
	fcc -KV9FMADD -SSL2 -o $(@F) $^
else
	fcc -KV9FMADD -SSL2BLAMP -o $(@F) $^
endif

bmd.fuji : bmd.$(SUFFIX) $(DOBJS)
ifndef SMP
	fcc -KV9FMADD -SSL2 -o $(@F) $^
else
	fcc -KV9FMADD -SSL2BLAMP -o $(@F) $^
endif

bmc.fuji : bmc.$(SUFFIX) $(COBJS)
ifndef SMP
	fcc -KV9FMADD -SSL2 -o $(@F) $^
else
	fcc -KV9FMADD -SSL2BLAMP -o $(@F) $^
endif

bmz.fuji : bmz.$(SUFFIX) $(ZOBJS)
ifndef SMP
	fcc -KV9FMADD -SSL2 -o $(@F) $^
else
	fcc -KV9FMADD -SSL2BLAMP -o $(@F) $^
endif

bench: bench.$(SUFFIX)  $(BLASOBJS) $(COMMONOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(EXTRALIB) $(CEXTRALIB)

bench.$(SUFFIX): bench.c
	$(CC) -c -o $(@F) $(CFLAGS) $^

bench_old: bench_old.$(SUFFIX) $(DBLASOBJS) $(COMMONOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(EXTRALIB) $(CEXTRALIB)

kbench: kbench.$(SUFFIX) $(DBLASOBJS) $(COMMONOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(EXTRALIB) $(CEXTRALIB)

prebench: prebench.$(SUFFIX) $(DBLASOBJS) $(COMMONOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(EXTRALIB) $(CEXTRALIB)

kbench_rank_k: kbench_rank_k.$(SUFFIX) $(DBLASOBJS) $(COMMONOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(EXTRALIB) $(CEXTRALIB)

smallbench: smallbench.$(SUFFIX)  $(BLASOBJS) $(COMMONOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(EXTRALIB) $(CEXTRALIB)

smallbench.mkl: smallbench.$(SUFFIX)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBMKL) $(EXTRALIB) $(CEXTRALIB)

bench.sun: bench.$(SUFFIX) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBSUNPERF) $(EXTRALIB) $(CEXTRALIB)

bench.cxml: bench.$(SUFFIX) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBCXML)

bench.atlas: bench.$(SUFFIX) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBATLAS)

bench.essl: bench.$(SUFFIX) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBESSL) ../../level1/others/libmisc.$(LIBSUFFIX)

bench.scsl: bench.$(SUFFIX) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBSCSL)  $(EXTRALIB) $(CEXTRALIB)

bench.acml: bench.$(SUFFIX) $(OBJS)
	$(CC) -static -o $(@F) $(CFLAGS) $^  $(LIBACML)  $(EXTRALIB) $(CEXTRALIB)

bench.flame: bench.$(SUFFIX) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBFLAME)  $(EXTRALIB) $(CEXTRALIB)

kbench.mkl: kbench.$(SUFFIX) $(OBJS)
	$(CC) -static -o $(@F) $(CFLAGS) $^  $(LIBMKL) $(EXTRALIB) $(CEXTRALIB)

bench.mkl: bench.$(SUFFIX) $(OBJS)
	$(CC) -static -o $(@F) $(CFLAGS) $^  $(LIBMKL) $(EXTRALIB) $(CEXTRALIB)

bench_old.mkl: bench_old.$(SUFFIX) $(OBJS)
	$(CC) -static -o $(@F) $(CFLAGS) $^  $(LIBMKL) $(EXTRALIB) $(CEXTRALIB)

bench.mlib: bench.$(SUFFIX) $(OBJS)
	$(F77) -o $(@F) $(CFLAGS) $^  $(LIBMLIB)

bench.veclib: bench.$(SUFFIX) $(OBJS)
	$(CC) -o $(@F) $(CFLAGS) $^  $(LIBVECLIB)

params : params.$(SUFFIX) $(SBLASOBJS) $(COMMONOBJS) $(SOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

paramd : paramd.$(SUFFIX) $(DBLASOBJS) $(COMMONOBJS) $(DOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

paramq : paramq.$(SUFFIX) $(QBLASOBJS) $(COMMONOBJS) $(QOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

paramc : paramc.$(SUFFIX) $(CBLASOBJS) $(COMMONOBJS) $(COBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

paramz : paramz.$(SUFFIX) $(ZBLASOBJS) $(COMMONOBJS) $(ZOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

paramx : paramx.$(SUFFIX) $(XBLASOBJS) $(COMMONOBJS) $(XOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

params-ex : params-ex.$(SUFFIX) $(SBLASOBJS) $(COMMONOBJS) $(SOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

paramd-ex : paramd-ex.$(SUFFIX) $(DBLASOBJS) $(COMMONOBJS) $(DOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

paramq-ex : paramq-ex.$(SUFFIX) $(QBLASOBJS) $(COMMONOBJS) $(QOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

paramc-ex : paramc-ex.$(SUFFIX) $(CBLASOBJS) $(COMMONOBJS) $(COBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

paramz-ex : paramz-ex.$(SUFFIX) $(ZBLASOBJS) $(COMMONOBJS) $(ZOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

paramx-ex : paramx-ex.$(SUFFIX) $(XBLASOBJS) $(COMMONOBJS) $(XOBJS) $(OBJS) $(LIBS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(EXTRALIB) $(CEXTRALIB)

params.atlas : params.$(SUFFIX) $(OBJS) $(SOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBATLAS)

paramd.atlas : paramd.$(SUFFIX) $(OBJS) $(DOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBATLAS)

paramc.atlas : paramc.$(SUFFIX) $(OBJS) $(COBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBATLAS)

paramz.atlas : paramz.$(SUFFIX) $(OBJS) $(ZOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBATLAS)

params.sun : params.$(SUFFIX) $(OBJS) $(SOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBSUNPERF)

paramd.sun : paramd.$(SUFFIX) $(OBJS) $(DOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBSUNPERF)

paramc.sun : paramc.$(SUFFIX) $(OBJS) $(COBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBSUNPERF)

paramz.sun : paramz.$(SUFFIX) $(OBJS) $(ZOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBSUNPERF)

params.essl : params.$(SUFFIX) $(OBJS) $(SOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBESSL)

paramd.essl : paramd.$(SUFFIX) $(OBJS) $(DOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBESSL)

paramc.essl : paramc.$(SUFFIX) $(OBJS) $(COBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBESSL)

paramz.essl : paramz.$(SUFFIX) $(OBJS) $(ZOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBESSL)

params.mkl : params.$(SUFFIX) $(OBJS) $(SOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBMKL)

paramd.mkl : paramd.$(SUFFIX) $(OBJS) $(DOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBMKL)

paramc.mkl : paramc.$(SUFFIX) $(OBJS) $(COBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBMKL)

paramz.mkl : paramz.$(SUFFIX) $(OBJS) $(ZOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBMKL)

params.acml : params.$(SUFFIX) $(OBJS) $(SOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBACML)

paramd.acml : paramd.$(SUFFIX) $(OBJS) $(DOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBACML)

paramc.acml : paramc.$(SUFFIX) $(OBJS) $(COBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBACML)

paramz.acml : paramz.$(SUFFIX) $(OBJS) $(ZOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBACML)

params.flame : params.$(SUFFIX) $(OBJS) $(SOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBFLAME) $(EXTRALIB) $(CEXTRALIB)

paramd.flame : paramd.$(SUFFIX) $(OBJS) $(DOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBFLAME) $(EXTRALIB) $(CEXTRALIB)

paramc.flame : paramc.$(SUFFIX) $(OBJS) $(COBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBFLAME) $(EXTRALIB) $(CEXTRALIB)

paramz.flame : paramz.$(SUFFIX) $(OBJS) $(ZOBJS)
	$(CC) -o $(@F) $(CFLAGS) $^ $(LIBFLAME) $(EXTRALIB) $(CEXTRALIB)

params.$(SUFFIX):param.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -UDOUBLE -UCOMPLEX -c $< -o $(@F)

paramd.$(SUFFIX):param.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DDOUBLE -UCOMPLEX -c $< -o $(@F)

paramq.$(SUFFIX):param.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DXDOUBLE -UCOMPLEX -c $< -o $(@F)

paramc.$(SUFFIX):paramz.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -UDOUBLE -DCOMPLEX -c $< -o $(@F)

paramz.$(SUFFIX):paramz.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DDOUBLE -DCOMPLEX -c $< -o $(@F)

paramx.$(SUFFIX):paramz.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DXDOUBLE -DCOMPLEX -c $< -o $(@F)

params-ex.$(SUFFIX):param-ex.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -UDOUBLE -UCOMPLEX -c $< -o $(@F)

paramd-ex.$(SUFFIX):param-ex.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DDOUBLE -UCOMPLEX -c $< -o $(@F)

paramq-ex.$(SUFFIX):param-ex.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DXDOUBLE -UCOMPLEX -c $< -o $(@F)

paramc-ex.$(SUFFIX):paramz-ex.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -UDOUBLE -DCOMPLEX -c $< -o $(@F)

paramz-ex.$(SUFFIX):paramz-ex.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DDOUBLE -DCOMPLEX -c $< -o $(@F)

paramx-ex.$(SUFFIX):paramz-ex.c $(TOPDIR)/../bench/bmcommon.h
	$(CC) $(CFLAGS) -DXDOUBLE -DCOMPLEX -c $< -o $(@F)

gen_insn_flash.c :
	echo '#include <stdio.h>'			>  gen_insn_flash.c
	echo '#include <stdlib.h>'			>> gen_insn_flash.c
	echo '#define ICACHE_SIZE ( 256 << 10)'		>> gen_insn_flash.c
	echo 'int main(void){'				>> gen_insn_flash.c
	echo 'int i;'					>> gen_insn_flash.c
	echo '#ifdef __alpha'				>> gen_insn_flash.c
	echo 'printf(".set noat;.set noreorder;\n");'	>> gen_insn_flash.c
	echo 'printf(".arch ev6;.text;.align 5\n");'	>> gen_insn_flash.c
	echo 'printf(".globl insn_flash\n");'		>> gen_insn_flash.c
	echo 'printf(".ent insn_flash\n");'		>> gen_insn_flash.c
	echo 'printf("insn_flash:\n");'			>> gen_insn_flash.c
	echo 'for (i = 0; i < ICACHE_SIZE / 4; i++)'	>> gen_insn_flash.c
	echo 'printf("br 1f\n 1:\n");'			>> gen_insn_flash.c
	echo 'printf(".align 5;ret;.end insn_flash\n");'>> gen_insn_flash.c
	echo '#else'					>> gen_insn_flash.c
	echo 'printf(".text;.align 32\n");'		>> gen_insn_flash.c
	echo 'printf(".globl insn_flash\n");'		>> gen_insn_flash.c
	echo 'printf("insn_flash:\n");'			>> gen_insn_flash.c
	echo 'for (i = 0; i < ICACHE_SIZE / 2; i++)'	>> gen_insn_flash.c
	echo 'printf("jmp 1f\n 1:\n");'			>> gen_insn_flash.c
	echo 'printf(".align 32;ret\n");'		>> gen_insn_flash.c
	echo '#endif'					>> gen_insn_flash.c
	echo 'return 0;'				>> gen_insn_flash.c
	echo '}'					>> gen_insn_flash.c

insn_flash.$(SUFFIX) : gen_insn_flash
	./gen_insn_flash > temp.s
	$(AS) -o $(@F) temp.s
	rm -f temp.s

dummy :

clean ::
	@if test -d $(ARCH); then \
	(cd $(ARCH) && $(MAKE) clean) \
	fi
	@find . -name '*.o' | xargs rm -rf
	@rm -rf *.a *.s *.po *.obj *.i *.so core core.* gmon.out *.cso \
	*.csx *.is *~ *.exe *.flame *.pdb *.dwf \
	gen_insn_flash.c gen_insn_flash *.stackdump *.dll *.exp *.lib \
	*.pc *.pcl *.def *.i *.prof linktest.c \
	bms bmd bmc bmz bmq bmx \
	params paramd paramc paramz paramq paramx \
	params-ex paramd-ex paramc-ex paramz-ex paramq-ex paramx-ex \
	bench tpp kbench kbench2 \
	*.mkl *.sun *.acml *.cxml *.essl *.atlas *.scsl *.mlib *.veclib *.fuji