CC = gcc
CFLAGS = -Og -g
CFLAGS = -Og -g -std=gnu11 -Wall -Wextra -Wpedantic \
	 -Wstrict-prototypes -Wno-unused-parameter
LDLIBS = -Wl,--as-needed -lpthread

PROGS =	delay execs forks internal loop myfork.so procmask1 procmask2 \
	restart setjmp shellex sigint sigintsafe signaldeadlock \
	sigsuspend waitforsignal

all: $(PROGS)

myfork.so: myfork.o ms_delay.o
	$(CC) $(CFLAGS) -shared -o myfork.so myfork.o ms_delay.o -ldl

myfork.o: CFLAGS += -fPIC
ms_delay.o: CFLAGS += -fPIC
csapp.o: CFLAGS += -fPIC

signaldeadlock: signaldeadlock.o csapp.o
shellex:        shellex.o csapp.o
forks:          forks.o csapp.o
execs:          execs.o
internal:       internal.o csapp.o
sigint:         sigint.o csapp.o
sigintsafe:     sigintsafe.o csapp.o sio_printf.o
loop:           loop.o csapp.o
procmask1:      procmask1.o csapp.o
procmask2:      procmask2.o csapp.o
waitforsignal:  waitforsignal.o csapp.o
sigsuspend:     sigsuspend.o csapp.o
setjmp:         setjmp.o csapp.o
restart:        restart.o

csapp.o:          csapp.c csapp.h
delay.o:          delay.c
execs.o:          execs.c csapp.h
forks.o:          forks.c csapp.h
internal.o:       internal.c csapp.h
loop.o:           loop.c csapp.h
ms_delay.o:       ms_delay.c ms_delay.h
myfork.o:         myfork.c ms_delay.h
procmask1.o:      procmask1.c csapp.h
procmask2.o:      procmask2.c csapp.h
restart.o:        restart.c
setjmp.o:         setjmp.c csapp.h
shellex.o:        shellex.c csapp.h
sigint.o:         sigint.c csapp.h
sigintsafe.o:     sigintsafe.c csapp.h sio_printf.h
signaldeadlock.o: signaldeadlock.c csapp.h
sigsuspend.o:     sigsuspend.c csapp.h
sio_printf.o:     sio_printf.c csapp.h sio_printf.h
waitforsignal.o:  waitforsignal.c csapp.h

clean:
	rm -rf *~ $(PROGS) *.o *~

.PHONY: all clean

