############################################################################### SHELL := bash .ONESHELL: ############################################################################### ATT = $(EXE:=.att) DIR = ../antipatron EXE = $(sort $(notdir $(basename $(wildcard $(DIR)/*.c $(DIR)/*.cc)))) ############################################################################### vpath %.c $(DIR) vpath %.cc $(DIR) ############################################################################### SAN = -fsanitize={address,pointer-compare,pointer-subtract,undefined} CFLAGS = -pthread -std=c11 -Wall $(SAN) CXXFLAGS = $(CFLAGS:c11=c++17) ############################################################################### all: check att: $(ATT) check: $(EXE) @max=0 for i in $^; do (( $${#i} > $$max )) && max=$${#i} done lpad() { printf "%$$(( $$max - $${#1} ))s$$1"; } printf '%60s\n'| tr ' ' '-' lpad 'sample program' echo ': problem detected by sanitizer' printf '%60s\n'| tr ' ' '-' for i in $^; do lpad "$$i" case "$$i" in division-by-zero ) ./$$i < <(echo 1 2 3);; memory-sanitizer ) ./$$i 0 1 2 3 4 5 6 7 8 9;; pointer-* ) env ASAN_OPTIONS="detect_invalid_pointer_pairs=1" ./$$i;; saludo ) ./$$i < <(tr -cd '[[:alpha:]]' < /dev/urandom | head -c1000);; stack-use-after-* ) env ASAN_OPTIONS="detect_stack_use_after_return=1" ./$$i ;; uncatch-exception ) ./$$i 100;; uninitialized-value) ./$$i 0 1 2 3 4 5 6 7 8;; * ) ./$$i;; esac |& grep -i 'error\|race\|warning' > /dev/null && echo ': ✓' || echo ': ✗' done clean: -rm -fv $(EXE) core.* *~ ############################################################################### data-race% %thread% %-race: SAN=-fsanitize=thread %.att: % objdump -C -d $< > $@ ############################################################################### .PHONY: all att check clean ###############################################################################