ATT = $(EXE:=.att) DAT = $(EXE:=.data) $(EXE:=.data.old) EXE = $(basename $(SRC)) GBM != grep -l benchmark.h *.cc | sed 's/.cc$$//' LOG = $(EXE:=.log) SRC = $(wildcard *.c *.cc) CFLAGS = -fanalyzer -O3 -Wall CXXFLAGS += $(CFLAGS) -std=c++20 all: $(EXE) att: $(ATT) clean: -rm -fv $(ATT) $(DAT) $(EXE) $(LOG) core.* *~ exe: $(EXE) test: $(filter com.%,$(EXE)) @for i in $^; do printf "%64s\n _$${i}_\n%64s\n" | tr ' _' '# '; ./$$i; done $(GBM): LDLIBS += -lbenchmark %.att: % objdump -Cd $< > $@ %.log: % valgrind --tool=callgrind --branch-sim=yes --cache-sim=yes --callgrind-out-file=$*.log --collect-bus=yes --collect-jumps=yes --dump-instr=yes --dump-line=yes -- ./$< %.cg: %.log kcachegrind $< %.data: % perf record -g -o $@ -- ./$< # perf record -e cycles:ku -F max -g -o $@ -- ./$< %.perf: %.data perf report -g 'graph,0.5,caller' -i $< .PHONY: all att clean exe test .PRECIOUS: $(DAT) $(LOG)