# Semana 10: TCP. 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. La prueba de slow_reader se salta hasta que completen
#                     lab/slow_reader.c
#   make up           levanta la topología (tcp/tcp.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/blast bin/sink bin/connect_probe bin/half_open bin/slow_reader
# La solución no se publica. Sin ella, se compila lo que ustedes escriben en lab/.
SLOW_READER = $(firstword $(wildcard solution/slow_reader.c) lab/slow_reader.c)

.PHONY: all test up down clean

all: $(PROGRAMS) | captures

captures:
	mkdir -p captures

bin:
	mkdir -p bin

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

bin/slow_reader: $(SLOW_READER) | 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 tcp && containerlab deploy -t tcp.clab.yml --reconfigure

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

clean: down
	rm -rf bin captures __pycache__ tcp/clab-w10-tcp
