CC = gcc
CFLAGS = -std=c11 -Wall -Wextra -Werror -Wconversion -Wshadow -Wpedantic
CFLAGS += -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes
CFLAGS += -Wmissing-declarations -Wfloat-equal -Wundef -Wpointer-arith
CFLAGS += -Wcast-align -Wwrite-strings -Wredundant-decls -Wnested-externs
CFLAGS += -Winline -O2 -g -fsanitize=address

SRCS = $(wildcard src/**/*.c) $(wildcard src/*.c)
OBJS = $(patsubst src/%.c, build/%.o, $(SRCS))

all: a.out

run: a.out
	./a.out

a.out: $(OBJS)
	$(CC) $(CFLAGS) -o a.out $^

build/%.o: src/%.c
	@mkdir -p $(dir $@)
	$(CC) $(CFLAGS) -c -o $@ $<

clean:
	rm -rf build/ a.out

.PHONY: all clean

