CC = gcc
CFLAGS = -Wall -Wextra -pedantic -std=gnu11 -O2

PROGS = incr_deadlock life_par incr_atomic incr_atomic2 incr_atomic3

%.o : %.c
	$(CC) $(CFLAGS) -c $<

%.o : %.S
	$(CC) $(CFLAGS) -c $<

all : $(PROGS)

incr_deadlock : incr_deadlock.o
	$(CC) -o $@ incr_deadlock.o -lpthread

life_par : life_par.o life.o bqueue.o
	$(CC) -o $@ life_par.o life.o bqueue.o -lpthread

incr_atomic : incr_atomic.o atomic.o
	$(CC) -o $@ incr_atomic.o atomic.o -lpthread

incr_atomic2 : incr_atomic2.o
	$(CC) -o $@ incr_atomic2.o -lpthread

incr_atomic3 : incr_atomic3.o
	$(CC) -o $@ incr_atomic3.o -lpthread

incr_deadlock.o : incr_deadlock.c

life_par.o : life_par.c life.h bqueue.h

life.o : life.c life.h

incr_atomic.o : incr_atomic.c

atomic.o : atomic.S

incr_atomic2.o : incr_atomic2.c

incr_atomic3.o : incr_atomic3.c

clean :
	rm -f *.o $(PROGS)
