export LC_ALL=C
CXXFLAGS= -Wall -pedantic -g -ggdb -std=c++11
LDFLAGS= -lpthread

QUANTUM=10
CONTEXT_SWITCH=2
CORE_SWITCH=5

OBJS=main.o simu.o basesched.o basetask.o tasks.o sched_rr.o sched_fcfs.o sched_sjf.o sched_rsjf.o sched_mfq.o
MAIN=simusched

.PHONY: all clean new informe
all: $(MAIN)

$(MAIN): $(OBJS)
	$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)

%.o: %.cpp %.h basesched.h
basesched.o: basesched.cpp basesched.h
basetask.o: basetask.cpp basetask.h
main.o: main.cpp simu.h basetask.h basesched.h tasks.h sched_fcfs.h \
	sched_mfq.h sched_rr.h sched_rsjf.h sched_sjf.h
simu.o: simu.cpp simu.h basetask.h basesched.h
simusched.o: simusched.cpp basetask.h basesched.h tasks.h
tasks.o: tasks.cpp tasks.h basetask.h

clean:
	rm -f $(OBJS) $(MAIN)
	rm -rf informe/imagenes
	rm -rf informe/*.pdf

preinforme: ejercicio1 ejercicio2 ejercicio3 ejercicio4 ejercicio5 ejercicio7 ejercicio9 casos

informe: informe/informe.pdf
informe/informe.pdf: informe/1-informe.md informe/2-informe.md informe/3-informe.md informe/4-informe.md informe/5-informe.md informe/6-informe.md informe/7-informe.md informe/8-informe.md informe/9-informe.md preinforme
	pandoc informe/*informe.md -o informe/informe.pdf


new: clean all

makedir:
	mkdir -p informe/imagenes

ejercicio1: all makedir
	./simusched consola.tsk 1 $(CONTEXT_SWITCH) $(CORE_SWITCH) SchedFCFS | ./graphsched.py > informe/imagenes/ejercicio1.png

ejercicio2: all makedir
	./simusched ejer2.tsk 1 2 $(CORE_SWITCH) SchedFCFS | ./graphsched.py > informe/imagenes/ejercicio2_1core.png
	./simusched ejer2.tsk 2 2 $(CORE_SWITCH) SchedFCFS | ./graphsched.py > informe/imagenes/ejercicio2_2core.png
	./simusched ejer2.tsk 4 2 $(CORE_SWITCH) SchedFCFS | ./graphsched.py > informe/imagenes/ejercicio2_4core.png

ejercicio3: all makedir
	./simusched ejer3.tsk 1 $(CONTEXT_SWITCH) $(CORE_SWITCH) SchedFCFS | ./graphsched.py > informe/imagenes/ejercicio3_1core.png

ejercicio4: all makedir
	./simusched ejer3.tsk 1 $(CONTEXT_SWITCH) $(CORE_SWITCH) SchedRR 1 $(QUANTUM) | ./graphsched.py > informe/imagenes/ejercicio4_1core.png
	./simusched ejer3.tsk 2 $(CONTEXT_SWITCH) $(CORE_SWITCH) SchedRR 2 $(QUANTUM) $(QUANTUM) | ./graphsched.py > informe/imagenes/ejercicio4_2core.png
	./simusched ejer3.tsk 4 $(CONTEXT_SWITCH) $(CORE_SWITCH) SchedRR 4 $(QUANTUM) $(QUANTUM) $(QUANTUM) $(QUANTUM) | ./graphsched.py > informe/imagenes/ejercicio4_4core.png

ejercicio5: all makedir
	./simusched ejer2.tsk 1 $(CONTEXT_SWITCH) $(CORE_SWITCH) SchedRR 1 02 | ./graphsched.py > informe/imagenes/ejercicio5_1core_02q.png
	./simusched ejer2.tsk 1 $(CONTEXT_SWITCH) $(CORE_SWITCH) SchedRR 1 05 | ./graphsched.py > informe/imagenes/ejercicio5_1core_05q.png
	./simusched ejer2.tsk 1 $(CONTEXT_SWITCH) $(CORE_SWITCH) SchedRR 1 10 | ./graphsched.py > informe/imagenes/ejercicio5_1core_10q.png

ejercicio7: all makedir
	./simusched ejer7-sjf.tsk 1 2 4 SchedSJF 1 15 10 5 | ./graphsched.py > informe/imagenes/ejercicio7_SJF_1core.png
	./simusched ejer7-sjf.tsk 2 2 4 SchedSJF 2 15 10 5 | ./graphsched.py > informe/imagenes/ejercicio7_SJF_2core.png
	./simusched ejer7-rsjf.tsk 1 2 4 SchedRSJF 1 4 20 4 5 | ./graphsched.py > informe/imagenes/ejercicio7_RSJF_1core.png
	./simusched ejer7-rsjf.tsk 2 2 4 SchedRSJF 2 4 4 20 4 5 | ./graphsched.py > informe/imagenes/ejercicio7_RSJF_2core.png

ejercicio9: all makedir
	./simusched ejer2.tsk 1 $(CONTEXT_SWITCH) $(CORE_SWITCH) SchedMFQ 05 10 | ./graphsched.py > informe/imagenes/ejercicio9_1core.png
	./simusched ejer2.tsk 2 $(CONTEXT_SWITCH) $(CORE_SWITCH) SchedMFQ 02 05 10 | ./graphsched.py > informe/imagenes/ejercicio9_2core.png
	./simusched ejer2.tsk 4 $(CONTEXT_SWITCH) $(CORE_SWITCH) SchedMFQ 02 05 07 10 | ./graphsched.py > informe/imagenes/ejercicio9_4core.png
	./simusched casos/cpu.tsk 4 2 9 SchedMFQ 4 12 | ./graphsched.py > informe/imagenes/ejercicio9_gantt_casos_1.png
	./simusched casos/cpuh_io.tsk 4 2 9 SchedMFQ 4 12 | ./graphsched.py > informe/imagenes/ejercicio9_gantt_casos_2.png
	./simusched casos/cpu_ioh.tsk 4 2 9 SchedMFQ 4 12 | ./graphsched.py > informe/imagenes/ejercicio9_gantt_casos_3.png
	./simusched casos/consola.tsk 4 2 9 SchedMFQ 4 12 | ./graphsched.py > informe/imagenes/ejercicio9_gantt_casos_4.png


casos: all makedir
	for f in casos/*json; do \
		echo $$f; \
		./scripts/batchplotter.py $$f & \
	done; \
	wait
