CC ?= cc
CFLAGS ?= -std=c99 -Wall -Wextra -Werror -Wpedantic -Wconversion -Wshadow -Wformat=2 -O1 -g
CPPFLAGS += -Iinclude
BUILD := build
CORE := src/material_tag.c

.PHONY: all test sanitize demo clean
all: $(BUILD)/test_material_tag $(BUILD)/test_store $(BUILD)/host_demo

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

$(BUILD)/test_material_tag: $(CORE) tests/test_material_tag.c include/material_tag.h | $(BUILD)
	$(CC) $(CPPFLAGS) $(CFLAGS) $(CORE) tests/test_material_tag.c -lm -o $@

$(BUILD)/host_demo: $(CORE) examples/host_demo.c include/material_tag.h | $(BUILD)
	$(CC) $(CPPFLAGS) $(CFLAGS) $(CORE) examples/host_demo.c -lm -o $@

$(BUILD)/test_sanitize: $(CORE) tests/test_material_tag.c include/material_tag.h | $(BUILD)
	$(CC) $(CPPFLAGS) $(CFLAGS) -fsanitize=address,undefined -fno-omit-frame-pointer $(CORE) tests/test_material_tag.c -lm -o $@

$(BUILD)/test_store: $(CORE) src/material_tag_store.c tests/test_material_tag_store.c include/material_tag_store.h | $(BUILD)
	$(CC) $(CPPFLAGS) $(CFLAGS) $(CORE) src/material_tag_store.c tests/test_material_tag_store.c -lm -o $@

test: $(BUILD)/test_material_tag $(BUILD)/test_store
	$(BUILD)/test_material_tag
	$(BUILD)/test_store

sanitize: $(BUILD)/test_sanitize
	$(BUILD)/test_sanitize

demo: $(BUILD)/host_demo
	$(BUILD)/host_demo

clean:
	rm -rf $(BUILD)
