CC = gcc
LD = gcc

CFLAGS = -fPIC
DYNLINKFLAGS = -shared -nostdlib

RM = /bin/rm -f

# libraries to link with the program during compile time.
LIBS = -ldl

# shared library files
LIB_FILES = exploit.so

# shared libraries object files
LIB_OBJS = exploit.o

# top-level rule
all: $(LIB_FILES) shell

$(PROG): $(PROG_OBJS)
	$(LD) $(LDFLAGS) $(PROG_OBJS) $(LIBS) -o $(PROG)

shell:
	$(CC) -o shell shell.c

exploit.so: exploit.o
	$(LD) $(DYNLINKFLAGS) $< -o $@

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

clean:
	$(RM) $(PROG_OBJS) $(PROG) $(LIB_OBJS) $(LIB_FILES) shell *.o *.so

cleanlib:
	$(RM) $(LIB_OBJS) $(LIB_FILES)
        
cleanlibobjs:
	$(RM) $(LIB_OBJS)
