
GCC=g++
DEFS=-D_REENTRANT -DCASSERT=1
OPT=-O2# -DMEM_CHECK=1 -DDEBUG_ASSERT=1 
LIBS=-lpthread -fno-exceptions
OPENCV_LIBS=-lcv -lhighgui $(LIBS)

all: segmentation

segmentation: p.main.o p.mem_check.o p.structures.o p.string.o p.bitmap.o p.image.o p.segmentation.o p.lm_seg.o p.spec_seg.o p.cooc_seg.o p.fft_seg.o p.lbp_seg.o
	$(GCC) $(DEFS) $(OPT) $^  -o segmentation $(LIBS) -Wall

opencv: p.main.o p.mem_check.o p.structures.o p.string.o p.bitmap.o p.image.o p.segmentation.o p.lm_seg.o p.spec_seg.o p.cooc_seg.o p.fft_seg.o p.lbp_seg.o
	$(GCC) $(DEFS) $(OPT) $^ -o main $(OPENCV_LIBS) -Wall

# - COMPILE -
p.main.o: p.main.cc
	$(GCC) -c $(DEFS) $(OPT) p.main.cc -o p.main.o -Wall

p.mem_check.o: p.mem_check.cc
	$(GCC) -c $(DEFS) $(OPT) p.mem_check.cc -o p.mem_check.o -Wall

p.structures.o: p.structures.cc
	$(GCC) -c $(DEFS) $(OPT) p.structures.cc -o p.structures.o -Wall

p.string.o: p.string.cc
	$(GCC) -c $(DEFS) $(OPT) p.string.cc -o p.string.o -Wall

p.bitmap.o: p.bitmap.cc
	$(GCC) -c $(DEFS) $(OPT) p.bitmap.cc -o p.bitmap.o -Wall

p.image.o: p.image.cc
	$(GCC) -c $(DEFS) $(OPT) p.image.cc -o p.image.o -Wall

p.segmentation.o: p.segmentation.cc
	$(GCC) -c $(DEFS) $(OPT) p.segmentation.cc -o p.segmentation.o -Wall

p.lm_seg.o: p.lm_seg.cc
	$(GCC) -c $(DEFS) $(OPT) p.lm_seg.cc -o p.lm_seg.o -Wall

p.spec_seg.o: p.spec_seg.cc
	$(GCC) -c $(DEFS) $(OPT) p.spec_seg.cc -o p.spec_seg.o -Wall

p.cooc_seg.o: p.cooc_seg.cc
	$(GCC) -c $(DEFS) $(OPT) p.cooc_seg.cc -o p.cooc_seg.o -Wall

p.fft_seg.o: p.fft_seg.cc
	$(GCC) -c $(DEFS) $(OPT) p.fft_seg.cc -o p.fft_seg.o -Wall

p.lbp_seg.o: p.lbp_seg.cc
	$(GCC) -c $(DEFS) $(OPT) p.lbp_seg.cc -o p.lbp_seg.o -Wall

# - PROCESS -
p.main.cc: basic.h thread.h mutex.h structures.h mem_check.h string.h bitmap.h image.h lm_seg.h spec_seg.h cooc_seg.h fft_seg.h lbp_seg.h segmentation.h main.h main.cc
	./process main.cc > p.main.cc

p.mem_check.cc: basic.h mutex.h mem_check.h mem_check.cc
	./process mem_check.cc > p.mem_check.cc

p.structures.cc: basic.h mem_check.h structures.h structures.cc
	./process structures.cc > p.structures.cc

p.string.cc: basic.h mem_check.h string.h string.cc
	./process string.cc > p.string.cc

p.bitmap.cc: basic.h mem_check.h bitmap.h bitmap.cc
	./process bitmap.cc > p.bitmap.cc

p.image.cc: basic.h atomic.h mem_check.h structures.h string.h bitmap.h image.h image.cc
	./process image.cc > p.image.cc

p.segmentation.cc: basic.h atomic.h mem_check.h structures.h string.h bitmap.h image.h segmentation.h segmentation.cc
	./process segmentation.cc > p.segmentation.cc

p.lm_seg.cc: basic.h atomic.h mem_check.h structures.h bitmap.h image.h segmentation.h lm_seg.h lm_seg.cc
	./process lm_seg.cc > p.lm_seg.cc

p.spec_seg.cc: basic.h atomic.h mem_check.h structures.h bitmap.h image.h segmentation.h spec_seg.h spec_seg.cc
	./process spec_seg.cc > p.spec_seg.cc

p.cooc_seg.cc: basic.h atomic.h mem_check.h structures.h bitmap.h image.h segmentation.h cooc_seg.h cooc_seg.cc
	./process cooc_seg.cc > p.cooc_seg.cc

p.fft_seg.cc: basic.h atomic.h mem_check.h structures.h bitmap.h image.h segmentation.h fft_seg.h fft_seg.cc
	./process fft_seg.cc > p.fft_seg.cc

p.lbp_seg.cc: basic.h atomic.h mem_check.h structures.h bitmap.h image.h segmentation.h lbp_seg.h lbp_seg.cc
	./process lbp_seg.cc > p.lbp_seg.cc

# - CLEAN -
clean:
	rm -f p.* *.o segmentation
