############################################################################### # makefile ############################################################################### SHELL = /bin/bash .ONESHELL: ATT = $(EXE:=.att) BST != grep -l fiber *.cc | sed 's/.cc$$//' DAT = $(EXE:=.dat) DEP = $(addprefix .,$(EXE:=.d)) EXE = $(basename $(SRC)) GBM != grep -l benchmark.h *.cc | sed 's/.cc$$//' LOG = sort.log PNG = $(SVG:.svg=.png) SRC = $(wildcard *.c *.cc) SVG = sort.svg sort.l.svg TBB != grep -l tbb.h *.cc | sed 's/.cc$$//' CFLAGS = -MF .$*.d -MMD -MP -O3 -Wall -Wextra CXXFLAGS = $(CFLAGS) -std=c++20 $(BST): LDLIBS += -lboost_fiber -lboost_context -lboost_system $(GBM): LDLIBS += -lbenchmark $(TBB): LDLIBS += $(shell pkg-config --libs tbb) sort: CFLAGS += -fopenmp ############################################################################### all: exe png | pkg att: $(ATT) clean: -rm -rf $(ATT) $(DAT) $(DEP) $(EXE) $(LOG) $(PNG) $(SVG) {vg,}core.* perf.* *.old *~ exe: $(EXE) pkg: @for i in boost_fiber tbb; do if ! ldconfig -v |& grep lib$$i &> /dev/null; then echo "Necesitas instalar $$i!!!" fi done png: $(PNG) svg: $(SVG) ############################################################################### %: %.cc $(CXX) $(CXXFLAGS) -MF .$@.d $< -o $@ %.att: % objdump -CdS $< > $@ %.dat: % perf record -g -o $@ -- ./$< # use "-F max" to improve precision %.log: % @./$< | tee $@ %.perf: %.dat perf report -d $* -g -i $< %.png: %.svg magick -density 600 $< $@ %.svg: %.log makefile @gnuplot <<< "set terminal svg enhanced; \ set output '$@'; \ set key autotitle columnheader left top noenhanced; \ set grid; \ set xlabel 'size'; \ set logscale x 2; \ set ylabel 'time'; \ set xtics rotate; \ set xtics (1, 2, 4, 8, 16, 32, 64, 128, 256, 512, '1k' 1024, '2k' 2048, '4k' 4096, '8k' 8192, '16k' 16384, '32k' 32768, '64k' 65526, '128k' 131072, '256k' 262144, '512k' 524288, '1M' 1048576, '2M' 2097152, '4M' 4194304, '8M' 8388608, '16M' 16777216, '32M' 33554432, '64M' 67108864, '128M' 134217728, '256M' 268435456, '512M' 536870912, '1G' 1073741824); \ set ytics ('5ms' 5e6, '10ms' 10e6, '15ms' 15e6, '20ms' 20e6, '25ms' 25e6, '30ms' 30e6, '35ms' 35e6, '40ms' 40e6, '45ms' 45e6, '50ms' 50e6, '55ms' 55e6, '60ms' 60e6, '65ms' 65e6, '70ms' 70e6, '75ms' 75e6, '80ms' 80e6, '85ms' 85e6, '90ms' 90e6, '95ms' 95e6, '100ms' 100e6, '105ms' 105e6, '110ms' 110e6, '115ms' 115e6); \ plot '$<' u 1:2 w lp lc -1 ps 0.66 pt 5, \ '$<' u 1:3 w lp lc 1 ps 0.66 pt 7, \ '$<' u 1:4 w lp lc 2 ps 0.66 pt 9, \ '$<' u 1:5 w lp lc 3 ps 0.66 pt 13" %.l.svg: %.log makefile @gnuplot <<< "set terminal svg enhanced; \ set output '$@'; \ set key autotitle columnheader bottom noenhanced; \ set grid; \ set xlabel 'size'; \ set ylabel 'time'; \ set logscale x 2; \ set logscale y 10; \ set xtics rotate; \ set xtics (1, 2, 4, 8, 16, 32, 64, 128, 256, 512, '1k' 1024, '2k' 2048, '4k' 4096, '8k' 8192, '16k' 16384, '32k' 32768, '64k' 65526, '128k' 131072, '256k' 262144, '512k' 524288, '1M' 1048576, '2M' 2097152, '4M' 4194304, '8M' 8388608, '16M' 16777216, '32M' 33554432, '64M' 67108864, '128M' 134217728, '256M' 268435456, '512M' 536870912, '1G' 1073741824); \ set ytics ('5ms' 5e6, '10ms' 10e6, '15ms' 15e6, '20ms' 20e6, '25ms' 25e6, '30ms' 30e6, '35ms' 35e6, '40ms' 40e6, '45ms' 45e6, '50ms' 50e6, '55ms' 55e6, '60ms' 60e6, '65ms' 65e6, '70ms' 70e6, '75ms' 75e6, '80ms' 80e6, '85ms' 85e6, '90ms' 90e6, '95ms' 95e6, '100ms' 100e6, '105ms' 105e6, '110ms' 110e6, '115ms' 115e6); \ plot '$<' u 1:2 w lp lc -1 ps 0.66 pt 5, \ '$<' u 1:3 w lp lc 1 ps 0.66 pt 7, \ '$<' u 1:4 w lp lc 2 ps 0.66 pt 9, \ '$<' u 1:5 w lp lc 3 ps 0.66 pt 13" -include $(DEP) ############################################################################### .PHONY: all att clean exe png svg .PRECIOUS: $(DAT) $(LOG) $(SVG) .NOEXPORT: ###############################################################################