SHELL = /bin/bash

SRC_DIR = ./src
INC_DIR = ./include
OBJ_DIR = ./obj

HEADERS   = $(wildcard $(INC_DIR)/*.hpp)
SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp)
DEP_FILES = $(OBJ_FILES:.o=.d)
OBJ_FILES = $(addprefix $(OBJ_DIR)/,$(notdir $(SRC_FILES:.cpp=.o)))

CXXFLAGS += -Wall -std=c++20 -O2 -I $(INC_DIR)

all: bin/swarm

bin/swarm: $(OBJ_FILES)
	@mkdir -p bin
	$(CXX) $(CXXFLAGS) -o $@ $^

.PHONY: debug
debug: CXXFLAGS += -O0 -g
debug: clean bin/swarm

.PHONY: clean
clean:
	$(RM) obj/*.o
	$(RM) bin/swarm

-include $(DEP_FILES)

$(OBJ_DIR)/%.o : src/%.cpp
	mkdir -p $(@D)
	$(CXX) $(CXXFLAGS) -MMD -c $< -o $@
