CXX = g++
LIBS_NAME =
INCLUDES = $(shell pkg-config --cflags $(LIBS_NAME) 2> /dev/null)
LDLIBS = $(shell pkg-config --libs $(LIBS_NAME) 2> /dev/null)
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) $(INCLUDES) $(if $(PROFILER),-DPROFILER,)

# Normal Build
# SOURCES = $(wildcard src/*.cpp)
# OBJECTS = $(patsubst src/%.cpp,obj/%.o,$(SOURCES))

# Single-Compilation Unit (Unity build), required for the profiler
SOURCES = src/scu.cpp
OBJECTS = obj/scu.o

DEPENDS = $(patsubst %.o,%.d,$(OBJECTS))
EXEC = veCoop

all: $(EXEC)

-include $(DEPENDS)

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

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

clean:
	rm -rf $(EXEC) obj
