VER=1.0

EXECUTABLE_NAME = point-detector-demo

CC = g++
LINK = g++

TYPE = debug
OBJ = ./obj
BIN = ./bin
OBJDIR = $(OBJ)/$(TYPE)
OUTPUTDIR = $(BIN)/$(TYPE)

SOURCES := $(wildcard *.cc)
SOURCES_OBJ := $(addprefix $(OBJDIR)/, $(SOURCES:.cc=.o))

OPENMP = -fopenmp
WARNINGS = -Wall -Wextra

OPENCV_INC = `pkg-config opencv --cflags`
ALL_LIBS_INCLUDE = $(OPENCV_INC)

OPENCV_LIB = `pkg-config opencv --libs`

ALL_LIBS_LIB = $(OPENCV_LIB) -lz

ifeq ($(TYPE),debug)
DEBUG_OPTIM = -g
CC_OPTIONS =  $(WARNINGS) $(DEBUG_OPTIM) $(ALL_LIBS_INCLUDE)
LINK_OPTIONS = $(ALL_LIBS_LIB)
endif

ifeq ($(TYPE),release)
DEBUG_OPTIM = -O2 -O3 -s
CC_OPTIONS =  $(WARNINGS) $(DEBUG_OPTIM) $(ALL_LIBS_INCLUDE)
LINK_OPTIONS = $(ALL_LIBS_LIB)
endif

ifeq ($(TYPE),debug-openmp)
DEBUG_OPTIM = -g
CC_OPTIONS =  $(WARNINGS) $(DEBUG_OPTIM) $(ALL_LIBS_INCLUDE) $(OPENMP)
LINK_OPTIONS = $(ALL_LIBS_LIB) $(OPENMP)
endif

ifeq ($(TYPE),release-openmp)
DEBUG_OPTIM = -O2 -O3 -s
CC_OPTIONS =  $(WARNINGS) $(DEBUG_OPTIM) $(ALL_LIBS_INCLUDE) $(OPENMP)
LINK_OPTIONS = $(ALL_LIBS_LIB) $(OPENMP)
endif

all: dirs $(EXECUTABLE_NAME)

dirs:
	@mkdir -p $(OBJDIR)
	@mkdir -p $(OUTPUTDIR)

$(EXECUTABLE_NAME): $(SOURCES_OBJ)
	$(LINK) $(SOURCES_OBJ) $(LINK_OPTIONS) -o $(OUTPUTDIR)/$(EXECUTABLE_NAME)

$(OBJDIR)/%.o:
	$(CC) $(CC_OPTIONS) -c $*.cc -o $@

clean:
	@rm -rf *~ *.o point-detector-demo $(OBJ) $(BIN) $(OBJDIR) $(OUTPUTDIR)
