CC	    = gcc -pipe
CC_D	    = -D_GNU_SOURCE
CC_I	    = -I../include
CC_O	    = -O2 -fomit-frame-pointer
CC_G	    = -g
CC_W	    = -Wall -Wno-unused
CFLAGS	    = $(CC_D) $(CC_I) $(CC_O) $(CC_G) $(CC_W)
PIC_CFLAGS  = -fPIC $(CFLAGS)
SO_LDFLAGS  = -shared
#############################################################################
prefix	=  /usr/local
BIN_EXE =  $(prefix)/bin
BIN_SCR =  $(prefix)/bin
LIB_A	=  $(prefix)/lib
LIB_SO	=  $(prefix)/lib
DOC_MAN =  $(prefix)/share/man
DOC_MISC=  $(prefix)/doc
GEN_MAPS=  -DGEN_MAPS=\"$(BIN_SCR)/gen-maps\"
#############################################################################

.PHONY: all clean install uninstall

all: libprofil.a libprofil.so libitimer.a libitimer.so libpause.a libpause.so \
	librdtsc.a librdtsc.so pct-kern-snap

common.c     : ../include/_argv.c init.h ../include/pct.h

profil.o     : profil.c common.c profil.h
libprofil.a  : profil.o
libprofil.so : profil.c common.c profil.h

itimer.o     : itimer.c common.c itimer.h
libitimer.a  : itimer.o
libitimer.so : itimer.c common.c itimer.h

pause.o     : pause.c init.h
libpause.a  : pause.o
libpause.so : pause.c init.h

rdtsc.o     : rdtsc.c init.h
librdtsc.a  : rdtsc.o
librdtsc.so : rdtsc.c init.h

#############################################################################

libprofil.so:
	$(CC) $(PIC_CFLAGS) $(SO_LDFLAGS) profil.c -o libprofil.so

profil.o:
	$(CC) -c $(CFLAGS) profil.c

libprofil.a:
	rm -f libprofil.a
	$(AR) cr libprofil.a profil.o
	$(RANLIB) libprofil.a 2>/dev/null || true


libitimer.so:
	$(CC) $(PIC_CFLAGS) $(SO_LDFLAGS) $(GEN_MAPS) itimer.c -o libitimer.so -ldl

itimer.o:
	$(CC) -c $(CFLAGS) $(GEN_MAPS) itimer.c

libitimer.a:
	rm -f libitimer.a
	$(AR) cr libitimer.a itimer.o
	$(RANLIB) libitimer.a 2>/dev/null || true


libpause.so:
	$(CC) $(PIC_CFLAGS) $(SO_LDFLAGS) pause.c -o libpause.so

pause.o:
	$(CC) -c $(CFLAGS) pause.c

libpause.a:
	rm -f libpause.a
	$(AR) cr libpause.a pause.o
	$(RANLIB) libpause.a 2>/dev/null || true

librdtsc.so:
	$(CC) $(PIC_CFLAGS) $(SO_LDFLAGS) rdtsc.c -o librdtsc.so

rdtsc.o:
	$(CC) -c $(CFLAGS) rdtsc.c

librdtsc.a:
	rm -f librdtsc.a
	$(AR) cr librdtsc.a rdtsc.o
	$(RANLIB) librdtsc.a 2>/dev/null || true


pct-kern-snap: pct-kern-snap.c
	$(CC) $(CFLAGS) pct-kern-snap.c -o pct-kern-snap

#############################################################################

install:
	install -c -m 644 libprofil.a	 $(LIB_A)
	install -c -m 644 libitimer.a	 $(LIB_A)
	install -c -m 644 itimer.o	 $(LIB_A)
	install -c -m 644 libpause.a	 $(LIB_A)
	install -c -m 644 librdtsc.a	 $(LIB_A)
	install -c -m 755 libprofil.so	 $(LIB_SO)
	install -c -m 755 libitimer.so	 $(LIB_SO)
	install -c -m 755 libpause.so	 $(LIB_SO)
	install -c -m 755 librdtsc.so	 $(LIB_SO)
	install -c -m 755 gen-maps	 $(BIN_SCR)
	install -c -m 755 pct-kern-snap  $(BIN_EXE)

uninstall:
	rm -f $(LIB_A)/libprofil.a
	rm -f $(LIB_A)/libitimer.a
	rm -f $(LIB_A)/itimer.o
	rm -f $(LIB_A)/libpause.a
	rm -f $(LIB_A)/librdtsc.a
	rm -f $(LIB_SO)/libprofil.so
	rm -f $(LIB_SO)/libitimer.so
	rm -f $(LIB_SO)/libpause.so
	rm -f $(LIB_SO)/librdtsc.so
	rm -f $(BIN_SCR)/gen-maps
	rm -f $(BIN_EXE)/pct-kern-snap

clean:
	rm -rf *.o *.a *.so core *.pct *.la *.lo .libs pct-kern-snap
