# Build the fuzzing/sanitizer driver for the C library in src/ (needs no Perl).
#
#   make -C fuzz               ASan+UBSan build of bt_fuzz (runs over files)
#   make -C fuzz libfuzzer     libFuzzer build (needs a clang with libFuzzer)
#
# The Unicode tables are generated by Build.PL; run that first (or
# "perl scripts/gen_unidata.pl src/unidata.h").

CC      ?= cc
SAN     = -fsanitize=address,undefined -fno-omit-frame-pointer -fno-sanitize-recover=undefined
CFLAGS  = -std=c99 -g -O1 -Wall -Wextra -Wno-unused-parameter -I../src
SRCS    = $(wildcard ../src/*.c)

all: bt_fuzz

bt_fuzz: bt_fuzz.c $(SRCS) ../src/*.h
	$(CC) $(CFLAGS) $(SAN) -o $@ bt_fuzz.c $(SRCS)

libfuzzer: bt_libfuzzer

bt_libfuzzer: bt_fuzz.c $(SRCS) ../src/*.h
	$(CC) $(CFLAGS) -DBT_LIBFUZZER -fsanitize=fuzzer,address,undefined -o $@ bt_fuzz.c $(SRCS)

clean:
	rm -rf bt_fuzz bt_libfuzzer *.dSYM

.PHONY: all libfuzzer clean
