CC=g++
C_FLAGS=-g -Wall -Wextra -O0 -Wno-unused-function -MMD -MP
VAL_FLAGS=--leak-check=full --show-leak-kinds=all --track-origins=yes -s

DIR_SRC=src
DIR_INC=include
DIR_BUILD=build
DEPS=SDL3

OUTBIN=$(DIR_BUILD)/bin/main

SRCS=$(shell find $(DIR_SRC)/ -type f -name '*.cpp')
OBJS=$(patsubst $(DIR_SRC)/%.cpp,$(DIR_BUILD)/obj/%.o,$(SRCS))
DEPMF=$(patsubst $(DIR_SRC)/%.cpp,$(DIR_BUILD)/obj/%.d,$(SRCS))

DEPS_EXT=$(patsubst %,-l%,$(DEPS))
INCS_EXT=$(patsubst %,-I%,$(DIR_INC))


.PHONY: all build run dbg val clean test clean-tests


all: build
build: $(OUTBIN)
rebuild: clean .WAIT build


run: $(OUTBIN)
	./i3bgwin $(OUTBIN) {windowid}

runn: $(OUTBIN)
	$(OUTBIN)

$(OUTBIN): $(OBJS)
	@mkdir -p $(@D)
	$(CC) $(OBJS) $(DEPS_EXT) -o $@

$(DIR_BUILD)/obj/%.o: $(DIR_SRC)/%.cpp
	@mkdir -p $(@D)
	$(CC) $(C_FLAGS) $(INCS_EXT) -c $< -o $@

-include $(DEPMF)

dbg: $(DBG_BIN)
	gdb $(GDB_FLAGS) ./$(OUTBIN)

val: $(DBG_BIN)
	valgrind $(VAL_FLAGS) ./$(OUTBIN)

clean:
	$(RM) -r $(DIR_BUILD)
