USE_MKL = 1
CXX = g++
CC = gcc
CFLAGS = -Wall -Wconversion -O3 -fPIC -fopenmp
LIBS = blas/blas.a


MKL_ARCH = "INTEL64"

ifeq ($(MKL_ARCH), "INTEL64")
	MKL_ARCH_NAME = intel64
else ifeq ($(MKL_ARCH), "IA32")
	MKL_ARCH_NAME = ia32
else ifeq ($(MKL_ARCH), "MIC")
	MKL_ARCH_NAME = mic
else
	$(error Unknown Intel architecture $(MKL_ARCH))
endif

ifeq ($(USE_MKL), 1)
	CXX = icpc
	CC = icc
	CFLAGS = -Wall -Wconversion -O3 -fPIC -fopenmp -qmkl:parallel -axavx -m64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread
	CFLAGS += -DMKL
	LIBS =
endif

all: train

train: solver.o linear.o train.c $(LIBS)
	$(CXX) $(CFLAGS) -o train train.c solver.o linear.o $(LIBS)

solver.o: solver.cpp solver.h
	$(CXX) $(CFLAGS) -c -o solver.o solver.cpp

linear.o: linear.cpp linear.h
	$(CXX) $(CFLAGS) -c -o linear.o linear.cpp

blas/blas.a: blas/*.c blas/*.h
	make -C blas OPTFLAGS='$(CFLAGS)' CC='$(CC)';

clean:
	make -C blas clean
	rm -f *~ solver*.o linear*.o train predict
