# (C) Copyright 2014-2016, Jaime Ferreira, David Martins de Matos, Ricardo Ribeiro
# Spoken Language Systems Lab, INESC ID, IST/Universidade de Lisboa
#
# This file is part of XOKDE++.
#
# XOKDE++ is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# XOKDE++ is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA

#CXXFILES = $(wildcard src/old/*.cpp)
#OFILES   = $(CXXFILES:%.cpp=%.o)

CXXFILES_CORE = $(wildcard src/include/**/*.cpp)
OFILES_CORE = $(CXXFILES_CORE:%.cpp=%.o)
PROGRAMS_CORE = #src/tests/test_kde_using_dataset

CXXFILES_TESTS = $(wildcard src/tests/*.cpp)
OFILES_TESTS = $(CXXFILES_TESTS:%.cpp=%.o)
PROGRAMS_TESTS = src/tests/test_kde_using_dataset

CXXFILES_GTESTS = $(wildcard src/gtests/*.cpp)
OFILES_GTESTS = $(CXXFILES_GTESTS:%.cpp=%.o)
PROGRAMS_GTESTS = src/gtests/gtest_main

#MKLDIR   = /opt/intel/mkl/10.0.5.025/
MKLDIR   = /usr/include/mkl/

#INCLUDES = -I/tmp/lixo-install/usr/local/include
INCLUDES= -I. -Isrc/include
#INCLUDES+= -I$(MKLDIR)/include -I$(MKLDIR)
INCLUDES+= -I/usr/include/eigen3
INCLUDES+= -I/usr/include/gtest/

# normal (optimized)
CXXFLAGS = -std=c++1y -m64 -ggdb -O3 -ffast-math $(INCLUDES) -fPIC -fpic -Wall -Wextra 
#CXXFLAGS+= -DEIGEN_USE_MKL_ALL -DNDEBUG -DEIGEN_NO_DEBUG -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2 -fopenmp
CXXFLAGS+= -DNDEBUG -DEIGEN_NO_DEBUG -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2
CXXFLAGS+= -fopenmp
CXXFLAGS+= -finline -fbuiltin -fexpensive-optimizations
#CXXFLAGS+= -DOKDE_PARALLELIZATION -pg

# debug
#CXXFLAGS = -std=c++1y -m64 -ggdb -ffast-math $(INCLUDES) -fPIC -fpic -Wall -Wextra
#CXXFLAGS+= -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2
#CXXFLAGS+= -fopenmp
#CXXFLAGS+= -fkeep-inline-functions -fbuiltin

#MGL_LIBS = -lmgl-fltk -lmgl -lmgl-qt

GTEST_LIBS = -lgtest

#MKL_LIBS = -L$(MKLDIR)/lib/em64t -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lmkl_lapack -liomp5 
LDFLAGS  = $(MKL_LIBS) -fopenmp $(MGL_LIBS) $(GTEST_LIBS) 
#LDFLAGS += -pg
#LDFLAGS += -finstrument-functions

.PHONY: all
all: $(PROGRAMS_TESTS) $(PROGRAMS_GTESTS)

%.o:: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

$(PROGRAMS_TESTS): $(OFILES_CORE) $(OFILES_TESTS)
	$(CXX) -o $@ $^ $(LDFLAGS)

$(PROGRAMS_GTESTS): $(OFILES_CORE) $(OFILES_GTESTS)
	$(CXX) -o $@ $^ $(LDFLAGS)

depend:
	$(CXX) -MM $(CXXFLAGS) $(CXXFILES_TESTS)  >  .deps 
	$(CXX) -MM $(CXXFLAGS) $(CXXFILES_GTESTS) >> .deps 

clean:
	rm -f $(OFILES_CORE) $(OFILES_TESTS) $(OFILES_GTESTS) $(PROGRAMS_TESTS) $(PROGRAMS_GTESTS)

-include .deps
