SHELL := $(shell which bash) .ONESHELL: ATT = $(EXE:=.att) DAT = $(EXE:=.data) $(EXE:=.data.old) EXE = $(basename $(SRC)) GBM = $(basename $(shell grep -l benchmark.h $(SRC))) LOG = $(EXE:=.log) SRC = $(wildcard *.c *.cc) CFLAGS = -fanalyzer -O3 -Wall CXXFLAGS += $(CFLAGS) -std=c++20 $(GBM): LDLIBS += $(shell pkg-config --libs benchmark) all: exe att: $(ATT) clean: -rm -fv $(ATT) $(DAT) $(EXE) $(LOG) core.* *~ com: $(filter com_%,$(EXE)) @for i in $^; do printf "\e[1;34m%64s\n ¬$${i}¬\n%64s\n\e[0m" | tr ' ¬' '# '; ./$$i done exe: $(EXE) run: $(EXE) @for i in $^; do printf "\e[1;32m%64s\n ¬$${i}¬\n%64s\n\e[0m" | tr ' ¬' '# '; ./$${i} done %.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 com exe run .PRECIOUS: $(DAT) $(LOG)