CXX = g++
WARNS = -Wall -Wextra -Weffc++ -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Wlogical-op -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wconversion -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel
CXXFLAGS = -std=c++17 $(WARNS) $(if $(DEBUG),-O0 -ggdb,-march=native -O3 -DNDEBUG)

SOURCES = $(wildcard *.cpp)
OBJECTS = $(SOURCES:%.cpp=%.o)
DEPENDS = $(patsubst %.o,%.d,$(OBJECTS))

EXEC = generate_chained

all: $(EXEC)

-include $(DEPENDS)

$(EXEC): $(OBJECTS)
	$(CXX) $^ -o $@

$(OBJECTS): %.o : %.cpp
	$(CXX) $(CXXFLAGS) -MMD -MP -c $< -o $@

clean:
	rm -rf $(EXEC) $(OBJECTS) $(DEPENDS)
