SHELL = bash .ONESHELL: VPATH=.. ATT = $(EXE:=.att) CAC = $(EXE:=.cac) CAL = $(EXE:=.cal) DAT = $(EXE:=.dat) DEP = $(addprefix .,$(EXE:=.d)) EXE = $(basename $(SRC)) FOL = $(EXE:=.fol) LTR = $(EXE:=.ltrace) LNE = 8 SRC = $(notdir $(wildcard ../server*.cc)) STR = $(EXE:=.strace) TRC = $(EXE:=.trace) CXXFLAGS = -fanalyzer -g -I. -MF .$*.d -MMD -march=native -O3 -std=c++20 -Wall all: test att: $(ATT) clean: -rm -f $(ATT) $(CAC) $(CAL) $(DAT) $(DEP) $(EXE) $(FOL) $(LTR) $(STR) *.svg /tmp/{0..99}.txt core.* *~ exe: src $(EXE) src: $(SRC) ltrace: $(LTR) strace: $(STR) trace: $(TRC) test: $(EXE) @for i in $^; do echo -e "$$i:\t$$(./$$i)" done for i in $^; do -rm -f /tmp/{0..99}.txt sync echo -n "$$i: " -perf stat -r 5 -- ./$$i |& grep 'elapsed' | tr -s ' ' done -include $(DEP) server5 server6: LDLIBS+=-lboost_fiber -lboost_context %.att: % objdump -Cd $< > $@ %.cac: % valgrind --cachegrind-out-file=$@ --tool=cachegrind ./$< %.cal: % -valgrind --branch-sim=yes --cacheuse=yes --callgrind-out-file=$@ --cache-sim=yes --collect-jumps=yes --demangle=yes --dump-instr=yes --instr-atstart=yes -q --separate-threads=yes --tool=callgrind --trace-jump=yes ./$< %.cga: %.cac cg_annotate --auto=yes $< %.dat: % -perf record --call-graph dwarf --freq=max -o $@ -- ./'$<' %.fg: %.svg eog $< & %.fol: %.dat -perf script -i $< | stackcollapse-perf.pl | grep -v cpu_idle > $@ %.kcg: %.cal kcachegrind $< %.leak: % # valgrind --leak-check=full --show-error-list=yes --show-leak-kinds=all --track-origins=yes --verbose ./$< valgrind --leak-check=summary --show-leak-kinds=all --track-origins=yes ./$< %.ltrace: % @printf "%79s\n \t$*\n%79s\n" | tr ' ' '#' ltrace -cf ./$< |& c++filt | head -n $(LNE) | cut -c 1-80 %.perf: %.dat perf report -g 'graph,0.5,caller' -i $< %.strace: % @printf "%79s\n \t$*\n%79s\n" | tr ' ' '#' strace -cf -qq ./$< |& c++filt | head -n $(LNE) | cut -c 1-$$(tput cols) %.svg: %.fol flamegraph.pl $< > $@ %.trace: % @printf "%79s\n \t$*\n%79s\n" | tr ' ' '#' ltrace -cfS ./$< |& c++filt | head -n $(LNE) | cut -c 1-$$(tput cols) .PHONY: all att clean exe ltrace strace test trace .PRECIOUS: $(CAC) $(CAL) $(DAT) $(FOL)