KRELU_PREFIX = /usr/local

# C compilation flags
CFLAGS =  -Wcast-qual -Wswitch -Wall -Wextra -Wundef -Wcast-align -Wno-unused -U__STRICT_ANSI__ -fPIC -O3 -DNDEBUG -Werror-implicit-function-declaration -Wbad-function-cast -Wstrict-prototypes -Wno-strict-overflow -std=c99

# Architecture specific flags
AFLAGS = -D_GNU_SOURCE -pthread -fno-tree-vectorize -m64 -march=native 
DFLAGS = -g  $(AFLAGS) 

CC_KRELU_DYLIB += -Wl,-rpath=$(KRELU_PREFIX)/lib

OBJS = krelu_transformer.o double_matrix.o double_vector.o

INSTALL = install
INSTALLd = install -d

SOINST = libkrelu.so

KRELUH = krelu_transformer.h double_matrix.h double_vector.h

LIBS = -lgurobi81
INCLUDES =

LIBDIR = /usr/local/lib
INCLDIR = /usr/local/include


all : libkrelu.so

libkrelu.so : $(OBJS) $(KRELUH)
	$(CC) -shared $(CC_KRELU_DYLIB) $(CFLAGS) $(DFLAGS) $(INCLUDES) -o $(SOINST) $(OBJS) $(LIBS)


krelu_transformer.o : krelu_transformer.h krelu_transformer.c
	$(CC) -c $(CFLAGS) $(DFLAGS) $(INCLUDES) -o krelu_transformer.o krelu_transformer.c $(LIBS)

double_matrix.o : double_matrix.h double_matrix.c
	$(CC) -c $(CFLAGS) $(DFLAGS) $(INCLUDES) -o double_matrix.o double_matrix.c $(LIBS)

double_vector.o : double_vector.h double_vector.c
	$(CC) -c $(CFLAGS) $(DFLAGS) $(INCLUDES) -o double_vector.o double_vector.c $(LIBS)

install:
	$(INSTALLd) $(LIBDIR); \
	for i in $(SOINST); do \
		$(INSTALL) $$i $(LIBDIR); \
	done;

	$(INSTALLd) $(INCLDIR); \
	for i in $(KRELUH); do \
		$(INSTALL) $$i $(INCLDIR); \
	done; 


clean:
	-rm *.o
	-rm *.so
