PROGRAM = program
CC  = gcc
CXX = g++
CPPFLAGS = -Wall
CXXFLAGS = -std=c++20 -O2
LDFLAGS =
LDLIBS  = -lglfw -lvulkan -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi
DEPFLAGS = -MMD -MP
# remark : I'm not really sure what DEPFLAGS stuff does... 

SRCS := $(shell find src -name '*.cc')
OBJS := $(patsubst src/%.cc, build/%.o, $(SRCS))
DEPS := $(OBJS:%.o=%.d)

all: $(OBJS)
	@echo === LINKING $(PROGRAM)
	$(CXX) $(CXXFLAGS) -o $(PROGRAM) $(OBJS) $(LDFLAGS) $(LDLIBS)

build/%.o: src/%.cc
	@echo === COMPILING $@
	mkdir -p $(dir $@)
	$(CXX) $(DEPFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $<

run: all
	./$(PROGRAM)

clean:
	rm -f $(OBJS) $(DEPS) $(PROGRAM)

.PHONY: run clean

-include $(DEPS)
