BINUTILS  = ../binutils-2.20.1
LIBIBERTY = $(BINUTILS)/libiberty
BINUTIL   = $(BINUTILS)/binutils
BIN       = ~/bin

#CFLAGS  = -g -I. -Wall -DDWARF64
#CFLAGS  = -g -I. -Wall -DCORRELATE 
#CFLAGS  = -g -I. -Wall
CFLAGS   = -O2 -I. -Wall -DNDEBUG
BIN     =~/bin

DEMANGLE_SRC = \
 $(LIBIBERTY)/xexit.c \
 $(LIBIBERTY)/xmalloc.c \
 $(LIBIBERTY)/xstrdup.c \
 $(LIBIBERTY)/safe-ctype.c \
 $(LIBIBERTY)/dyn-string.c \
 $(LIBIBERTY)/cp-demangle.c \
 $(LIBIBERTY)/cplus-dem.c 

DEMANGLE_OBJECTS = \
 $(LIBIBERTY)/xexit.o \
 $(LIBIBERTY)/xmalloc.o \
 $(LIBIBERTY)/xstrdup.o \
 $(LIBIBERTY)/safe-ctype.o \
 $(LIBIBERTY)/dyn-string.o \
 $(LIBIBERTY)/cp-demangle.o \
 $(LIBIBERTY)/cplus-dem.o 

LIBRARIES = \
 $(LIBIBERTY)/libiberty.a

SOURCES = data.cpp object.cpp util.cpp xmalloc.cpp ta.cpp clics_output.cpp \
		  dwarf.cpp match.cpp detect.cpp file.cpp function.cpp \
		  fileref.cpp clone.cpp directory.cpp source.cpp \
		  label.cpp read_linux.cpp read_windows.cpp acd.cpp

OBJECTS = data.o object.o util.o xmalloc.o ta.o clics_output.o \
		  dwarf.o match.o detect.o file.o function.o \
		  fileref.o clone.o directory.o source.o \
		  label.o read_linux.o read_windows.o acd.o

acd : $(DEMANGLE_OBJECTS) $(OBJECTS) 
	g++ -o acd $(CFLAGS) $(DEMANGLE_OBJECTS) $(OBJECTS)

acd.o : acd.cpp
	g++ -c $(CFLAGS) acd.cpp

read_linux.o : read_linux.cpp
	g++ -c $(CFLAGS) read_linux.cpp

read_windows.o : read_windows.cpp
	g++ -c $(CFLAGS) read_windows.cpp

label.o : label.cpp
	g++ -c $(CFLAGS) label.cpp

clone.o : clone.cpp
	g++ -c $(CFLAGS)  clone.cpp

function.o : function.cpp
	g++ -c $(CFLAGS)  -I$(BINUTILS)/include function.cpp

file.o : file.cpp
	g++ -c $(CFLAGS) file.cpp

fileref.o : fileref.cpp
	g++ -c $(CFLAGS) fileref.cpp

source.o : source.cpp
	g++ -c $(CFLAGS) source.cpp

directory.o : directory.cpp
	g++ -c $(CFLAGS) directory.cpp

match.o : match.cpp
	g++ -c $(CFLAGS) match.cpp

detect.o : detect.cpp
	g++ -c $(CFLAGS) detect.cpp

dwarf.o : dwarf.cpp
	g++ -c $(CFLAGS) dwarf.cpp

util.o : util.cpp
	g++ -c $(CFLAGS) util.cpp

object.o : object.cpp
	g++ -c $(CFLAGS) object.cpp

xmalloc.o : xmalloc.cpp
	g++ -c $(CFLAGS) xmalloc.cpp

ta.o : ta.cpp
	g++ -c $(CFLAGS) ta.cpp

clics_output.o : clics_output.cpp
	g++ -c $(CFLAGS) clics_output.cpp

data.o : data.cpp
	g++ -c $(CFLAGS) data.cpp

$(LIBIBERTY)/cplus-dem.o : $(LIBIBERTY)/cplus-dem.c
	cd $(LIBIBERTY); make cplus-dem.o

$(LIBIBERTY)/cp-demangle.o : $(LIBIBERTY)/cp-demangle.c
	cd $(LIBIBERTY); make cp-demangle.o

$(LIBIBERTY)/dyn-string.o : $(LIBIBERTY)/dyn-string.c
	cd $(LIBIBERTY); make dyn-string.o

$(LIBIBERTY)/safe-ctype.o : $(LIBIBERTY)/safe-ctype.c
	cd $(LIBIBERTY); make safe-ctype.o

$(LIBIBERTY)/xmalloc.o : $(LIBIBERTY)/xmalloc.c
	cd $(LIBIBERTY); make xmalloc.o

$(LIBIBERTY)/xexit.o : $(LIBIBERTY)/xexit.c
	cd $(LIBIBERTY); make xexit.o

$(LIBIBERTY)/xstrdup.o : $(LIBIBERTY)/xstrdup.c
	cd $(LIBIBERTY); make xstrdup.o

$(BINUTIL)/budemang.o : $(BINUTIL)/budemang.c
	cd $(BINUTIL); make budemang.o

$(BINUTIL)/prdbg.o : $(BINUTIL)/prdbg.c
	cd $(BINUTIL); make prdbg.o

$(BINUTIL)/rddbg.o : $(BINUTIL)/rddbg.c
	cd $(BINUTIL); make rddbg.o

$(BINUTIL)/debug.o : $(BINUTIL)/debug.c
	cd $(BINUTIL); make debug.o

$(BINUTIL)/stabs.o : $(BINUTIL)/stabs.c
	cd $(BINUTIL); make stabs.o

$(BINUTIL)/ieee.o : $(BINUTIL)/ieee.c
	cd $(BINUTIL); make ieee.o

$(BINUTIL)/rdcoff.o : $(BINUTIL)/rdcoff.c
	cd $(BINUTIL); make rdcoff.o

$(BINUTIL)/bucomm.o : $(BINUTIL)/bucomm.c
	cd $(BINUTIL); make bucomm.o

$(BINUTIL)/version.o : $(BINUTIL)/version.c
	cd $(BINUTIL); make version.o

$(BINUTIL)/filemode.o : $(BINUTIL)/filemode.c
	cd $(BINUTIL); make filemode.o

$(LIBIBERTY)/libiberty.a :
	cd $(LIBIBERTY); make libiberty.a

install: acd
	cp acd $(BIN)/acd
	chmod 755 $(BIN)/acd

clean:
	/bin/rm -f *.o *.s acd

