# Semana 1: demostrar un algoritmo y Gale-Shapley. Se usa dentro del entorno del curso.
#
#   make           compila los programas de la clase en build/
#   make test      corre las pruebas de los ejemplos y comprueba las salidas de los apuntes
#   make bench     mide la tabla de rangos contra recorrer la lista, con -O2 y sin sanitizers
#   make clean     borra lo generado
#
# El laboratorio está en lab/. Cada problema tiene su propio Makefile: entren a su carpeta.

CXX = g++
CXXFLAGS = -Wall -Wextra -std=c++20 -g -fsanitize=address,undefined
BENCHFLAGS = -Wall -Wextra -std=c++20 -O2
BUILD = build
PROGRAMS = tests_vs_proof trace_search bad_searches trace_power trace_gale_shapley \
           first_offer repair_loop who_proposes test_examples
BENCHES = rank_bench rank_counts
HEADERS = search.h power.h matching.h instances.h

.PHONY: all test bench clean

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

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

# Las mediciones y los conteos grandes van con -O2 y sin sanitizers.
$(BENCHES:%=$(BUILD)/%): $(BUILD)/%: %.cpp $(HEADERS) | $(BUILD)
	$(CXX) $(BENCHFLAGS) $< -o $@

$(BUILD):
	mkdir -p $@

test: all
	$(BUILD)/test_examples
	python3 -m unittest discover -p 'test_*.py'

bench: $(BUILD)/rank_bench
	$(BUILD)/rank_bench

clean:
	rm -rf $(BUILD) __pycache__
