# Semana 2: recurrencias y mergesort. 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 de los apuntes
#   make bench     corre las mediciones, con -O2 y sin sanitizers
#   make clean     borra lo generado
#
# El laboratorio está en lab/compare_rankings/ y tiene su propio Makefile: make test
# no lo toca.

CXX = g++
CXXFLAGS = -Wall -Wextra -std=c++20 -g -fsanitize=address,undefined
BENCHFLAGS = -Wall -Wextra -std=c++20 -O2
BUILD = build
PROGRAMS = merge_sort_demo merge_trace recursion_tree recurrences copy_count comparisons inversions test_examples
BENCHES = merge_bench copy_bench brute_bench
HEADERS = merge_sort.h comparison_count.h recurrences.h copy_cost.h inversions_brute.h from_code.h

.PHONY: all test bench clean

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

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

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

$(BUILD):
	mkdir -p $@

test: all
	$(BUILD)/test_examples

bench: $(BENCHES:%=$(BUILD)/%)
	$(BUILD)/merge_bench
	$(BUILD)/copy_bench
	$(BUILD)/brute_bench

clean:
	rm -rf $(BUILD)
