
PROB=mutex
HEADER=$(PROB)
TEST=test

SYS=p
OPT=-g
VAR=-g

LDLIBS=-pthread
LIBNSYS= lib/lib$(SYS)Sys$(VAR).a
SYSDIR= psystem

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

SHELL=bash -o pipefail

readme:
	less README.txt

pbin:
	@$(MAK) VAR= OPT=-O lib $(TEST)-$(PROB).pbin

pbin-g:
	@$(MAK) lib $(TEST)-$(PROB).pbin-g

pbin-mg:
	@$(MAK) VAR=-mg "OPT=-fsanitize=address -g -DVALGRIND" lib $(TEST)-$(PROB).pbin-mg

pbin-tg:
	@$(MAK) VAR=-tg "OPT=-fsanitize=thread -g -DVALGRIND" lib $(TEST)-$(PROB).pbin-tg

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

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

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

ddd-tg: pbin-tg
	@gdbserver --version >& /dev/null || ( echo "Instale gdbserver con: sudo apt-get install gdbserver"; false)
	ddd --command launch.gdb $(TEST)-$(PROB).pbin-tg &
	gdbserver :2345 $(TEST)-$(PROB).pbin-tg

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

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