# shellcheck disable=SC2046,SC2035,SC2215,SC2285,SC2276,SC2068
CC ?= cc
CFLAGS ?= -std=c17 -Wall -Wextra -Wpedantic -Werror -g
CPPFLAGS += -Iinclude -MMD -MP
SANFLAGS := -fsanitize=address,undefined -fno-omit-frame-pointer

SRC := $(wildcard src/*.c)
OBJ := $(SRC:src/%.c=build/%.o)
DEP := $(OBJ:.o=.d)
BIN := build/recman
ASAN := build/recman_asan

all: $(BIN)

$(BIN): $(OBJ)
	$(CC) $(CFLAGS) $^ -o $@

$(ASAN): $(SRC)
	$(CC) $(CFLAGS) $(SANFLAGS) $(CPPFLAGS) $^ -o $@

build/%.o: src/%.c | build
	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@

build:
	mkdir -p build

asan: $(ASAN)

test: $(BIN) $(ASAN)
	ASAN_OPTIONS=detect_leaks=0 sh tests/smoke.sh $(BIN)
	ASAN_OPTIONS=detect_leaks=0 sh tests/smoke.sh $(ASAN)
	$(CC) $(CFLAGS) $(SANFLAGS) $(CPPFLAGS) -Itests tests/unit.c $(filter-out src/main.c,$(SRC)) -o build/unit_asan
	ASAN_OPTIONS=detect_leaks=0 ./build/unit_asan

clean:
	rm -rf build

-include $(DEP)

.PHONY: all asan test clean
