CC ?= cc
AR ?= ar
CFLAGS ?= -std=c11 -O2 -Wall -Wextra -Werror -Wconversion -Wshadow -Wpedantic
CPPFLAGS += -Iinclude -Iadapters/posix
BUILD ?= build
CHECKFLAGS = -fsanitize=address,undefined -fno-omit-frame-pointer

.PHONY: all logic-checks storage-checks
all: $(BUILD)/libfeeder_control_store.a

$(BUILD):
	mkdir -p $(BUILD)

$(BUILD)/feeder_control.o: src/feeder_control.c include/feeder_control.h | $(BUILD)
	$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@

$(BUILD)/feeder_store.o: src/feeder_store.c include/feeder_store.h | $(BUILD)
	$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@

$(BUILD)/feeder_store_hal.o: src/feeder_store_hal.c include/feeder_store_hal.h | $(BUILD)
	$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@

$(BUILD)/libfeeder_control_store.a: $(BUILD)/feeder_control.o $(BUILD)/feeder_store.o $(BUILD)/feeder_store_hal.o
	$(AR) rcs $@ $^

$(BUILD)/host_logic_checks: src/feeder_control.c verification/host_logic_checks.c | $(BUILD)
	$(CC) $(CPPFLAGS) $(CFLAGS) $(CHECKFLAGS) $^ -o $@

$(BUILD)/host_store_checks: src/feeder_store.c src/feeder_control.c src/feeder_store_hal.c adapters/posix/feeder_file.c verification/host_store_checks.c | $(BUILD)
	$(CC) $(CPPFLAGS) $(CFLAGS) $(CHECKFLAGS) $^ -o $@

logic-checks: $(BUILD)/host_logic_checks
	./$(BUILD)/host_logic_checks

storage-checks: $(BUILD)/host_store_checks
	./$(BUILD)/host_store_checks
	python3 verification/process_reopen_check.py $(BUILD)/host_store_checks
