#Sources
COMMON_CSRC=io_png.c 
COMMON_CXXSRC=commonUtil.cpp Detector.cpp 
TRAIN_CXXSRC=train.cpp boostUtil.cpp detectUtil.cpp TrainExamples.cpp
DETECT_CXXSRC=detectUtil.cpp detect.cpp 

#Objects
COMMON_COBJ=$(COMMON_CSRC:.c=.o)
COMMON_CXXOBJ=$(COMMON_CXXSRC:.cpp=.o)
COMMON_OBJ=$(COMMON_COBJ) $(COMMON_CXXOBJ)
TRAIN_CXXOBJ=$(TRAIN_CXXSRC:.cpp=.o)
DETECT_CXXOBJ=$(DETECT_CXXSRC:.cpp=.o)

#Executables
all: train detect 

#Flags and Libraries -ansi = -std=c89
COMMON_FLAGS=-O2 -ftree-vectorize -funroll-loops -Wall -Wextra -pedantic -g 
CXXFLAGS=$(COMMON_FLAGS) -I./eigen -DNDEBUG 
CFLAGS=$(COMMON_FLAGS) -Wno-write-strings -ansi
LDLIB=-lpng -g

#OPENMP
ifdef OMP
COMMON_FLAGS+=-fopenmp
LDLIB+=-lgomp
else
COMMON_FLAGS+=-Wno-unknown-pragmas
endif

#Link
train: $(TRAIN_CXXOBJ) $(COMMON_OBJ) 
	$(CXX) $(TRAIN_CXXOBJ) $(COMMON_OBJ) $(LDLIB) -o $@

detect: $(DETECT_CXXOBJ) $(COMMON_OBJ) 
	$(CXX) $(DETECT_CXXOBJ) $(COMMON_OBJ) $(LDLIB) -o $@

#Compile
%.o: %.cpp %.h
	$(CXX) -o $@ -c $< $(CXXFLAGS)
%.o: %.c %.h
	$(CC) -o $@ -c $< $(CFLAGS)

#Extra
clean:
	rm -f $(TRAIN_CXXOBJ) $(COMMON_OBJ) $(DETECT_CXXOBJ) detect train 

backup:
	make clean; mv trainImages ..; mv validImages ..; cd ..; tar cfz vjselBACKUP.tgz vjsel
