CXX = g++
LIBS_NAME = gflags libglog
INCLUDES = $(shell pkg-config --cflags $(LIBS_NAME) 2> /dev/null)
LDLIBS = -flto=auto $(shell pkg-config --libs $(LIBS_NAME) 2> /dev/null) -fopenmp
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++20 -ggdb $(WARNS) $(if $(DEBUG),-Og ,-march=native -O3 -flto=auto -DNDEBUG) $(INCLUDES) -fopenmp
MAKEFLAGS += -j4

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

EXEC = solver

all: $(EXEC)

-include $(DEPENDS)

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

$(OBJECTS): obj/%.o : src/%.cpp
	@mkdir -p obj
	$(CXX) $(CXXFLAGS) -MMD -MP -c $< -o $@

test:
	tests/benchmark

clean:
	rm -rf $(EXEC) obj
