Text Blame Raw

objpfx = $(prefix)/$(ver)/usr/libexec/glibc-benchtests/

bench-math := acos acosh asin asinh atan atanh cos cosh exp exp2 ffs ffsll \ log log2 modf pow rint sin sincos sinh sqrt tan tanh

bench-pthread := pthread_once

bench := $(bench-math) $(bench-pthread)

run-bench := $(prefix)/$(ver)/lib64/ld-linux-x86-64.so.2 --library-path $(prefix)/$(ver)/lib64 $${run}

String function benchmarks.

string-bench := bcopy bzero memccpy memchr memcmp memcpy memmem memmove \ mempcpy memset rawmemchr stpcpy stpncpy strcasecmp strcasestr \ strcat strchr strchrnul strcmp strcpy strcspn strlen \ strncasecmp strncat strncmp strncpy strnlen strpbrk strrchr \ strspn strstr strcpy_chk stpcpy_chk memrchr strsep strtok string-bench-all := $(string-bench)

stdlib-bench := strtod

benchset := $(string-bench-all) $(stdlib-bench)

bench-malloc := malloc-thread

binaries-bench := $(addprefix $(objpfx)bench-,$(bench)) binaries-benchset := $(addprefix $(objpfx)bench-,$(benchset)) binaries-bench-malloc := $(addprefix $(objpfx)bench-,$(bench-malloc))

DETAILED_OPT :=

ifdef DETAILED DETAILED_OPT := -d endif

bench: bench-set bench-func bench-malloc

bench-set: $(binaries-benchset) for run in $^; do \ outfile=$(prefix)/$$(basename $${run}.$(ver).out); \ echo "Running $${run}"; \ $(run-bench) > $${outfile}.tmp; \ mv $${outfile}{.tmp,}; \ done

bench-malloc: $(binaries-bench-malloc) run=$(objpfx)bench-malloc-thread; \ outfile=$(prefix)/$$(basename $${run}.$(ver).out); \ for thr in 1 8 16 32; do \ echo "Running $${run} $${thr}"; \ $(run-bench) $${thr} > $${outfile}.tmp; \ mv $${outfile}{.tmp,}; \ done

Build and execute the benchmark functions. This target generates JSON

formatted bench.out. Each of the programs produce independent JSON output,

so one could even execute them individually and process it using any JSON

capable language or tool.

bench-func: $(binaries-bench) { echo "{\"timing_type\": \"hp-timing\","; \ echo " \"functions\": {"; \ for run in $^; do \ if ! [ "x$${run}" = "x$<" ]; then \ echo ","; \ fi; \ echo "Running $${run}" >&2; \ $(run-bench) $(DETAILED_OPT); \ done; \ echo; \ echo " }"; \ echo "}"; } > $(prefix)/bench.$(ver).out-tmp; \ if [ -f $(prefix)/bench.$(ver).out ]; then \ mv -f $(prefix)/bench.$(ver).out{,.old}; \ fi; \ mv -f $(prefix)/bench.$(ver).out{-tmp,}

scripts/validate_benchout.py bench.out \

scripts/benchout.schema.json