# Semana 6: árboles de expansión mínima, DFS con tiempos y componentes fuertemente conexas.
# Se usa dentro del entorno del curso.
#
#   make             compila los ejemplos en build/
#   make test        corre las pruebas de los ejemplos, con sanitizers
#   make bench       mide Kruskal y Prim (no entra en make test)
#   make clean       borra lo generado
#
# Los problemas de lab/ tienen su propio Makefile y no entran aquí.

CXX = g++
CXXFLAGS = -Wall -Wextra -std=c++20 -g -fsanitize=address,undefined
BENCHFLAGS = -Wall -Wextra -std=c++20 -O2
BUILD = build
HEADERS = mst.h digraph.h
PROGRAMS = mst_traces mst_vs_paths ties_demo clustering_demo dfs_traces scc_traces test_examples
OPTIMIZED = mst_bench deep_recursion

.PHONY: all test bench clean

all: $(PROGRAMS:%=$(BUILD)/%) $(OPTIMIZED:%=$(BUILD)/%)

$(PROGRAMS:%=$(BUILD)/%): $(BUILD)/%: %.cpp $(HEADERS) | $(BUILD)
	$(CXX) $(CXXFLAGS) $< -o $@

# Lo que mide o agota la pila va con -O2 y sin sanitizers, como en el juez.
$(OPTIMIZED:%=$(BUILD)/%): $(BUILD)/%: %.cpp $(HEADERS) | $(BUILD)
	$(CXX) $(BENCHFLAGS) $< -o $@

$(BUILD):
	mkdir -p $@

test: all
	$(BUILD)/test_examples

bench: $(BUILD)/mst_bench
	$(BUILD)/mst_bench

clean:
	rm -rf $(BUILD)
