############################################################################### .ONESHELL: ############################################################################### ATT = $(EXE:=.att) CAC = $(EXE:=.cac) CAL = $(EXE:=.cal) DAT = $(EXE:=.dat) DEP = $(addprefix .,$(EXE:=.d)) EXE = $(basename $(SRC)) FOL = $(EXE:=.fol) GBM = $(basename $(shell grep -l benchmark.h $(SRC))) LOG = $(EXE:=.cac) $(EXE:=.cal) $(wildcard *.log) OLD = $(DAT:=.old) $(wildcard *.cal-*) SRC = $(wildcard *.c *.cc) SVG = $(EXE:=.svg) ############################################################################### CFLAGS = -g -MF .$*.d -MMD -march=native -O3 -Wall #CFLAGS = -fno-omit-frame-pointer -g -MF .$*.d -MMD -Og -Wall CXXFLAGS = $(CFLAGS) -std=c++20 ############################################################################### all: exe att: $(ATT) clean: -rm -fv $(ATT) $(CAC) $(CAL) $(DAT) $(DEP) $(EXE) $(FOL) $(LOG) $(OLD) $(SVG) {cache,call}grind.out.* {vg,}core.* gmon.out perf.data* *~ exe: $(EXE) sm: selfmod gdb ./$< svg: $(SVG) ############################################################################### %.att: % objdump -Cd $< > $@ %.cga: %.cac cg_annotate --auto=yes $< %.dat: % # sudo sysctl -w kernel.perf_cpu_time_max_percent=0 # echo 0 |sudo tee /proc/sys/kernel/nmi_watchdog -perf record --call-graph=dwarf -F max -o $@ -- ./$< %.cac: % -valgrind --cachegrind-out-file=$@ --cache-sim=yes --demangle=yes --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 ./$< %.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 ./$< %.perf: %.dat perf report -g -i $< %.svg: %.fol flamegraph.pl $< > $@ -include $(DEP) ############################################################################### %2: CFLAGS += -fno-inline $(GBM): LDLIBS += -lbenchmark ############################################################################### .PHONY: all att clean exe sm svg .PRECIOUS: $(DAT) $(FOL) $(LOG) $(SVG) .NOEXPORT: ###############################################################################