###
#
# @file Makefile
#
#  PLASMA is a software package provided by Univ. of Tennessee,
#  Univ. of California Berkeley and Univ. of Colorado Denver
#
# @version 2.3.0
# @author Mathieu Faverge
# @date 2010-11-15
#
###

PLASMA_DIR = ..
include ../Makefile.internal

CFLAGS  += -I../control/ $(INC)
LDFLAGS += $(LIB)

ZHDR =  zauxiliary.h zauxiliary.c
CHDR = cauxiliary.h cauxiliary.c
DHDR = dauxiliary.h dauxiliary.c
SHDR = sauxiliary.h sauxiliary.c

#timing.c is in headers because it's a template for every timing routine
ALLHDR= auxiliary.h auxiliary.c timing.h timing.c \
	$(ZHDR) $(CHDR) $(DHDR) $(SHDR)

ZSRC  = time_zgemm.c 		\
	time_zposv.c 		\
	time_zpotrf.c 		\
	time_zgesv.c 		\
	time_zgetrf.c 		\
	time_zgels.c 		\
	time_zgeqrf.c 		\
	time_zgemm_tile.c 	\
	time_zposv_tile.c 	\
	time_zpotrf_tile.c 	\
	time_zpotri_tile.c	\
	time_zgesv_tile.c 	\
	time_zgetrf_tile.c 	\
	time_zgels_tile.c 	\
	time_zgeqrf_tile.c      \
        time_zgecfi.c           \
        time_zlapack2tile.c

CSRC = time_cgemm.c time_cposv.c time_cpotrf.c time_cgesv.c time_cgetrf.c time_cgels.c time_cgeqrf.c time_cgemm_tile.c time_cposv_tile.c time_cpotrf_tile.c time_cpotri_tile.c time_cgesv_tile.c time_cgetrf_tile.c time_cgels_tile.c time_cgeqrf_tile.c time_cgecfi.c time_clapack2tile.c
DSRC = time_dgemm.c time_dposv.c time_dpotrf.c time_dgesv.c time_dgetrf.c time_dgels.c time_dgeqrf.c time_dgemm_tile.c time_dposv_tile.c time_dpotrf_tile.c time_dpotri_tile.c time_dgesv_tile.c time_dgetrf_tile.c time_dgels_tile.c time_dgeqrf_tile.c time_dgecfi.c time_dlapack2tile.c
SSRC = time_sgemm.c time_sposv.c time_spotrf.c time_sgesv.c time_sgetrf.c time_sgels.c time_sgeqrf.c time_sgemm_tile.c time_sposv_tile.c time_spotrf_tile.c time_spotri_tile.c time_sgesv_tile.c time_sgetrf_tile.c time_sgels_tile.c time_sgeqrf_tile.c time_sgecfi.c time_slapack2tile.c

ALLSRC = $(ZSRC) $(CSRC) $(DSRC) $(SSRC)
ALLOBJ = $(ALLSRC:.c=.o)
EXE = $(ALLOBJ:.o=)

all: $(EXE)

$(EXE) : $(LIBCOREBLAS) $(LIBPLASMA) $(QUARKDIR)/libquark.a 

clean:
	rm -f *.o *~

cleanall: clean
	rm -f $(EXE)

time_%.o : time_%.c $(ALLHDR)
	$(CC) $(CFLAGS) -c $< -o $@

%auxiliary.o : %auxiliary.c $(ALLHDR)
	$(CC) $(CFLAGS) -c $< -o $@

time_s% : time_s%.o sauxiliary.o
	  $(LOADER) $^ -o $@ $(LDFLAGS)
time_d% : time_d%.o dauxiliary.o
	$(LOADER) $^ -o $@ $(LDFLAGS)
time_c% : time_c%.o cauxiliary.o
	  $(LOADER) $^ -o $@ $(LDFLAGS)
time_z% : time_z%.o zauxiliary.o
	  $(LOADER) $^ -o $@ $(LDFLAGS)


time_zlapack2tile time_clapack2tile time_dlapack2tile time_slapack2tile : auxiliary.o
time_zgecfi time_cgecfi time_dgecfi time_sgecfi : auxiliary.o

png: time_dgesv time_zgesv
	./time_dgesv --gnuplot-png | tee timeplot.gpt ; gnuplot timeplot.gpt

.PHONY: all clean
