# Semana 14: data centers y redes modernas. Se usa dentro del contenedor del curso.
#
#   make              compila los programas en bin/ (estáticos, para correr en los nodos)
#   make test         compila, levanta la topología, corre las pruebas (test_*.py) y siempre
#                     la destruye. Las pruebas del laboratorio se saltan hasta que completen
#                     lab/l3-bgp.conf y lab/vxlan.sh
#   make up           levanta la red leaf-spine (fabric/fabric.clab.yml)
#   make down         destruye la topología y su red de Docker
#   make clean        lo anterior, y borra los binarios y las capturas

CC = gcc
CFLAGS = -Wall -Wextra -std=c17 -D_DEFAULT_SOURCE -O2 -g -static
PROGRAMS = bin/flow_probe bin/ring_reduce bin/ecmp_sim bin/dcf_sim bin/df_ping

.PHONY: all test up down clean

all: $(PROGRAMS) | captures

captures:
	mkdir -p captures

bin:
	mkdir -p bin

bin/%: %.c | bin
	$(CC) $(CFLAGS) -o $@ $<

test: all
	@status=0; PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -p 'test_*.py' -v || status=$$?; \
	  $(MAKE) --no-print-directory down; exit $$status

up: all
	cd fabric && containerlab deploy -t fabric.clab.yml --reconfigure

down:
	@cd fabric && containerlab destroy -t fabric.clab.yml --cleanup >/dev/null 2>&1 || true
	@docker network rm redes-w14-fabric >/dev/null 2>&1 || true

clean: down
	rm -rf bin captures __pycache__ fabric/clab-w14-fabric fabric/.fabric.clab.yml.bak
