CFLAGS = -Wall -Ofast -march=native -std=gnu11
CFLAGS += $$(gsl-config --cflags)
LDLIBS += $$(gsl-config --libs)
CFLAGS += -DNDEBUG -DHAVE_INLINE

all: Out.txt Out.times.png

Out.txt:main
	./$< 4 >$@

main:main.o jacobi.o jacobi2.o

UNAME := $(shell uname -m)
Out.times.png: out.times.txt Makefile
	echo '\
	set term png ;\
set title "Jacobi diagonalization times as function of matrix size ($(UNAME))" ;\
	set xlabel "matrix size n" ;\
	set ylabel "diagonalization time, sec" ;\
	set key left ;\
	set out "$@" ;\
	a1=70 ; f1(x)=(x/a1)**3 ;\
	a2=70 ; f2(x)=(x/a2)**3 ;\
	fit f1(x) "$<" index 0 via a1 ;\
	fit f2(x) "$<" index 1 via a2 ;\
	plot \
	 "$<" index 0 with points title "jacobi-1" \
	,"$<" index 1 with points title "jacobi-2" \
	, f1(x) with lines title sprintf("(n /%3.0f)^3",a1)\
	, f2(x) with lines title sprintf("(n /%3.0f)^3",a2)\
	'| gnuplot 2>gnuplot.err.log 

Ns = $$(seq 35 10 85)
out.times.txt: main Makefile
	>$@
	for n in $(Ns);\
	do \time --format "$$n %U" --append --output $@ ./$< $$n 1 ;\
	done
	echo "\n" >> $@
	for n in $(Ns);\
	do \time --format "$$n %U" --append --output $@ ./$< $$n 2 ;\
	done

clean:
	find -type f -executable -delete
	$(RM) *.o [Oo]ut* *log

test:
	echo $(UNAME)
