MATRIX_DIR = ../matrix
CXXFLAGS = -std=c++23 -I$(MATRIX_DIR) -O3 -ffast-math
LDLIBS = -lstdc++ -lm

all: Out.txt Times.svg

Out.txt: main #Makefile
	./$< -n 7 | tee $@

main.o: main.cc $(MATRIX_DIR)/matrix.h jacobi.h
matrix.o: $(MATRIX_DIR)/matrix.cc $(MATRIX_DIR)/matrix.h
	$(CXX) $(CXXFLAGS) -c -o $@ $<
jacobi.o: jacobi.h
main: main.o matrix.o jacobi.o
#	$(CXX) -o $@ $(LDLIBS) $^

Times.svg: out.times.txt Makefile
	echo '\
	set term svg size 640,480 background "white" font "times,14";\
	set out "$@";\
	set key left;\
	set title "matrix diagonalization times (`$(CXX) --version` `uname -m`)";\
	set xlabel "matrix size n";\
	set ylabel "diagonalization time t, sec";\
	b=1; a=90; c=3;\
	f(x)=b+(x/a)**c;\
	fit f(x) "$<" via a,b;\
	plot \
	 "$<" title "Jacobi with V" \
	, f(x) title sprintf("fit: (n/%.f)^{%.2f}+%.3f",a,c,b) \
	'| gnuplot

out.times.txt: main
	cat /dev/null > $@
	for N in `seq 100 10 200`; do \
	echo "N=$$N";\time -ao $@ -f "$$N %U" ./$< -n $$N ; \
	done

clean:
	$(RM) *.o main [Oo]ut* [Ll]og* *.svg *.log

test:
	echo $(LDLIBS)
	echo $$($(RUN) --version)
