# Semana 9: transporte, UDP y entrega confiable. Se usa dentro del contenedor del curso.
#
#   make              compila los programas de demultiplexación (estáticos, para correr
#                     dentro de los nodos)
#   make test         compila, corre los simuladores, levanta las dos topologías una tras
#                     otra y corre las pruebas (test_*.py); siempre destruye lo que levantó.
#                     Las pruebas de los arreglos usan lab/ y se saltan hasta que los completen
#   make up           levanta la red de cuatro nodos (par/par.clab.yml)
#   make up-ensayo    levanta el ensayo del hackathon, con sus fallas (ensayo/ensayo.clab.yml)
#   make down         destruye las dos topologías y sus redes de Docker
#   make clean        lo anterior, y borra los binarios

CC = gcc
CFLAGS = -Wall -Wextra -std=c17 -D_DEFAULT_SOURCE -O2 -g
LDFLAGS = -static
PROGRAMS = bin/udp_demux bin/tcp_demux bin/demux_client

.PHONY: all test up up-ensayo down clean

all: $(PROGRAMS)

bin/%: %.c
	@mkdir -p bin
	$(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)

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 par && containerlab deploy -t par.clab.yml --reconfigure

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

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

clean: down
	rm -rf bin __pycache__ par/clab-w09-par ensayo/clab-w09-ensayo
