
TEST=test
PROB=nMutex

SYS=p
OPT=-g
VAR=-g

LDLIBS=
LIBNSYS= lib/lib$(SYS)Sys$(VAR).a
SYSDIR= nsystem

CFLAGS= -Wall -Werror -pedantic -std=c18 -I$(SYSDIR)/include
MAK= make --no-print-directory

SHELL=bash -o pipefail

readme:
	less README.txt

nbin:
	@$(MAK) VAR= "OPT=-O -DNSYSTEM -DOPTIMIZED" SYS=n LDLIBS= lib test.nbin

nbin-g:
	@$(MAK) SYS=n "OPT=-g -DNSYSTEM" LDLIBS= lib test.nbin-g

nbin-mg:
	@$(MAK) VAR=-mg "OPT=-fsanitize=address -g -DVALGRIND -DNSYSTEM" SYS=n LDLIBS= lib test.nbin-mg

lib:
	@echo "<<< Construccion de $(SYSDIR)/$(LIBNSYS) >>>"
	@cd $(SYSDIR); $(MAK) "SYS=$(SYS)" "OPT=$(OPT)" "VAR=$(VAR)" $(LIBNSYS)
	@echo "<<< Construccion terminada >>>"

ddd: nbin-g
	@gdbserver --version >& /dev/null || ( echo "Instale gdbserver con: sudo apt-get install gdbserver"; false)
	ddd --command launch.gdb test.nbin-g &
	gdbserver :2345 test.nbin-g

ddd-mg: nbin-mg
	@gdbserver --version >& /dev/null || ( echo "Instale gdbserver con: sudo apt-get install gdbserver"; false)
	ddd --command launch.gdb test.nbin-mg &
	gdbserver :2345 test.nbin-mg

resultados:
	@$(MAK) clean
	rm -f resultados.txt
	@echo === make nbin === | tee -a resultados.txt
	@$(MAK) nbin |& tee -a resultados.txt	
	./test.nbin |& tee -a resultados.txt
	@echo === make nbin-g === | tee -a resultados.txt
	@$(MAK) nbin-g |& tee -a resultados.txt	
	./test.nbin-g |& tee -a resultados.txt
	@echo === make nbin-mg === | tee -a resultados.txt
	@$(MAK) nbin-mg |& tee -a resultados.txt	
	./test.nbin-mg |& tee -a resultados.txt
	@echo "Entregue por u-cursos los archivo $(PROB).c y resultados.txt"

$(TEST).$(SYS)bin$(VAR): $(TEST).c $(SYSDIR)/include/nSystem.h $(SYSDIR)/$(LIBNSYS)
	$(CC) $(OPT) $(CFLAGS) $(TEST).c $(SYSDIR)/$(LIBNSYS) $(LDLIBS) -o $@
	@echo "Invoke this command to run the executable:" ./$@

clean:
	rm -f *.o *.nbin*
	@cd $(SYSDIR) ; make clean
