SDLFLAGS_CC:=$(shell PKG_CONFIG_PATH=~/local/lib/pkgconfig pkg-config sdl3 --cflags) -I/home/andrew/local/include
SDLFLAGS_LD:=$(shell PKG_CONFIG_PATH=~/local/lib/pkgconfig pkg-config sdl3 --libs) -lSDL3_image -lSDL3_mixer
CC:=$(shell which gcc)
LD:=$(shell which ld)

TEST_SRCFILES:=$(shell find tests -type f -name '*.c')
TEST_OBJFILES:=$(patsubst %.c,%.o,$(TEST_SRCFILES))
TEST_EXEFILES:=$(patsubst %.c,%,$(TEST_SRCFILES))

LIB_HEADERS:=$(shell find include -type f -name '*.h')
LIB_SRCFILES:=$(shell find lib_src -type f -name '*.c')
LIB_OBJFILES:=$(patsubst %.c,%.o,$(LIB_SRCFILES))

SRCFILES:=$(shell find src -type f -name '*.c')
OBJFILES:=$(patsubst %.c,%.o,$(SRCFILES))

LDFLAGS:=-L./lib -lsdl3game
CFLAGS:=-g3 -gdwarf-2 -I./include/ -fprofile-arcs -ftest-coverage

LIBTARGET:=lib/libsdl3game.a
DISTFILE:=dist/sdl3-gametest

.PHONY: lib
.PHONY: clean
.PHONY: preprocessor
.PHONY: assembler
.PHONY: tests
.PHONY: coverage

all: $(LIBFILE) $(DISTFILE) $(TEST_EXEFILES)

preprocessor: $(PREPFILES)

assembler: $(ASMFILES)

coverage: 
	gcov lib_src/*c tests/*c
	lcov --capture --directory . --output-file coverage.info
	genhtml coverage.info --output-directory coverage_html

clean:
	rm -f $(OBJFILES) ${DISTFILE} $(LIBTARGET) $(LIB_OBJFILES) $(TEST_EXEFILES) $(TEST_OBJFILES) lib_src/*gcda tests/*gcda lib_src/*gcno tests/*gcno coverage.info coverage_html

lib_src/%.o: lib_src/%.c $(LIB_HEADERS)
	$(CC) -c -o $@ $(CFLAGS) $(SDLFLAGS_CC) $<

lib: $(LIBTARGET)

$(LIBTARGET): $(LIB_OBJFILES)
	mkdir -p lib
	ar rcs $(LIBTARGET) $(LIB_OBJFILES)

tests: $(TEST_EXEFILES)

tests/%.o: tests/%.c $(LIB_HEADERS)
	$(CC) -c -o $@ $(CFLAGS) $(SDLFLAGS_CC) $<

tests/%: tests/%.o $(LIBTARGET)
	$(CC) -o $@ $(CFLAGS) $(SDLFLAGS_CC) $< $(LDFLAGS) -lbox2d -ljansson -lhashmap -lm $(SDLFLAGS_LD)

src/%.o: src/%.c $(LIB_HEADERS)
	$(CC) -c -o $@ $(CFLAGS) $(SDLFLAGS_CC) $<

$(DISTFILE): $(OBJFILES)
	$(CC) -o $@ $^ -lbox2d -ljansson -lhashmap -lm $(LDFLAGS) $(SDLFLAGS_LD)
