CFLAGS ?= -Wall -Wextra -Iinclude

HFILES := $(shell find include -type f -name '*.h')
CFILES := $(shell find src -type f -name '*.c')
OFILES := $(CFILES:%.c=%.o)

TESTFILES := $(shell find test -type f -name '*.c' -not -name runner.c)
TESTS := $(TESTFILES:%.c=%)

.PHONY: clean test

psxc: $(OFILES)
	$(CC) $(OFILES) -o $@

test/%: test/%.c $(HFILES) $(OFILES)
	$(CC) -Wno-unused-parameter $(CFLAGS) $(filter-out src/main.o, $(OFILES)) test/runner.c $< -o $@

%.o: %.c $(HFILES)
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -f $(OFILES) $(TESTS) psxc

test: $(TESTS)
	@for TEST in $(TESTS); do \
		./$$TEST; \
	done