EXEC_NAME := l2s

SRC_DIR := srcs
INC_DIR := includes
OBJ_DIR := obj
BIN_DIR := bin
DEP_DIR := dep

# Inclure le fichier de configuration des options
-include makefile.option

SRCS := $(shell find $(SRC_DIR) -name '*.cpp')
OBJS := $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRCS))
DEPS := $(patsubst $(OBJ_DIR)/%.o,$(DEP_DIR)/%.d,$(OBJS))
TARGET := $(BIN_DIR)/$(EXEC_NAME)

CXX := c++ $(CXX_FLAGS) \
	-D SNAKE_COLOR=$(SNAKE_COLOR) \
	-D DEBUG_MODE=$(DEBUG_MODE)


CXXFLAGS := -Wall -Wextra -std=c++17 \
            -I $(INC_DIR) \
            -I $(INC_DIR)/SDL3 \
            -I $(INC_DIR)/SDL3/include \
			-I $(INC_DIR)/SDL3_Image \
            -I $(INC_DIR)/SDL3_Image/include \
			-I $(INC_DIR)/SDL3_Fonts \
            -I $(INC_DIR)/SDL3_Fonts/include \
            -MMD -MP
			

UNAME_S := $(shell uname -s)

ifeq ($(UNAME_S),Darwin)
	# Configuration macOS (Darwin)
	CXXFLAGS += $(shell pkg-config --cflags sdl3 sdl3-image sdl3-ttf)
	LDFLAGS  += $(shell pkg-config --libs sdl3 sdl3-image sdl3-ttf)
else
	# Configuration Linux ou autre
	LDFLAGS += -L$(INC_DIR)/SDL3 -L$(INC_DIR)/SDL3_Image -L$(INC_DIR)/SDL3_Fonts \
	           -Wl,-rpath,$(INC_DIR)/SDL3_Image -Wl,-rpath,$(INC_DIR)/SDL3 -Wl,-rpath,$(INC_DIR)/SDL3_Fonts \
	           -lSDL3 -lSDL3_image -lSDL3_ttf
endif


all: $(TARGET)

$(TARGET): $(OBJS)
	@mkdir -p $(BIN_DIR)
	$(CXX) $(OBJS) -o $@ $(LDFLAGS)

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
	@mkdir -p $(dir $@) $(DEP_DIR)/$(dir $*)
	$(CXX) $(CXXFLAGS) -MMD -MP -MF $(DEP_DIR)/$*.d -c $< -o $@

-include $(DEPS)

clean:
	@echo Cleaning obj and dep...
	@rm -rf $(OBJ_DIR) $(DEP_DIR)
	@echo ------ Done ------

fclean: clean
	@echo Cleaning $(TARGET)
	@rm -rf $(TARGET)
	@echo ------ Done ------

re: fclean all

.PHONY: all clean fclean re
