CXX := g++
CXXFLAGS := -std=c++20 -Wall -Wextra -g -Iinclude -I/c/msys64/mingw64/include 

LDFLAGS := -lws2_32

SRC_DIRS := src
BUILD_DIR := build

# Find all source files
SRC := $(foreach dir, $(SRC_DIRS), $(wildcard $(dir)/*.cpp))

OBJ := $(patsubst %.cpp, $(BUILD_DIR)/%.o, $(SRC))

TARGET := main.exe

all: $(TARGET)

$(TARGET): $(OBJ)
	$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)

$(BUILD_DIR)/%.o: %.cpp
	@mkdir "$(dir $@)" || exit 0
	$(CXX) $(CXXFLAGS) -c $< -o $@

clean:
	del /Q /S $(subst /,\,$(BUILD_DIR)\*.o) $(TARGET) 2>nul || exit 0
	rmdir /S /Q $(BUILD_DIR) 2>nul || exit 0

.PHONY: all clean