CC = g++

CFLAGS = -g -O2 -Wall -std=c++0x -I/usr/local/include -Wno-delete-non-virtual-dtor

BUILD = build

LDPATH = -L/usr/lib/ -L$(CURDIR)/$(BUILD)
LDLIBS = -lntl -lm -lgmp

SRC =  PlaintextSpace.cpp CModulus.cpp FHEContext.cpp PAlgebra.cpp SingleCRT.cpp \
       DoubleCRT.cpp NumbTh.cpp bluestein.cpp IndexSet.cpp \
       Plaintext.cpp Util.cpp \
       FHE-SI.cpp Ciphertext.cpp \
       Serialization.cpp Matrix.cpp

OBJPATHS = $(patsubst %.cpp,$(BUILD)/%.o, $(SRC))

SUFFIXES += .d
NODEPS = clean $(BUILD) $(DISTR) obj
DEPFILES = $(patsubst %.cpp,$(BUILD)/%.d,$(SRC))

all: $(OBJPATHS) $(TESTPATHS)

ifeq (0, $(words $(findstring $(MAKECMDGOALS), $(NODEPS))))
    -include $(DEPFILES)
endif

obj: $(OBJPATHS)

$(BUILD):
	mkdir -p $(BUILD)

deps: $(DEPFILES)

$(BUILD)/%.d: %.cpp | $(BUILD)
	$(CC) $(CFLAGS) -MM -MT '$(BUILD)/$*.o' $< $(LDPATH) $(LDLIBS) -MF $@

$(BUILD)/%.o: %.cpp | $(BUILD)
	$(CC) $(CFLAGS) -o $@ -c $<
  
clean:
	rm -rf $(BUILD) *~
