CC = g++
CFLAGS = -g -Wall -O2 -I/usr/local/include -L/usr/lib/ -std=c++0x -Wno-delete-non-virtual-dtor
LDLIBS = -lntl -lm -lgmp
LIBFHE = libfhe.a

BUILD = build
TESTS = tests

SRC = FHEProxy.cpp
TESTPROGS = TestProxy

OBJPATHS = $(patsubst %.cpp,$(BUILD)/%.o, $(SRC))
TESTPATHS = $(addprefix $(TESTS)/, $(TESTPROGS))

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

all: $(OBJPATHS) $(TESTPATHS)

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

obj: $(OBJPATHS)

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

deps: $(DEPFILES)

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

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

$(BUILD)/%.o: %.cpp | $(BUILD)
	$(CC) $(CFLAGS) -o $@ -c $<

$(TESTS)/%: %.cpp $(OBJPATHS) $(TESTS)/%.d | $(TESTS)
	$(CC) $(CFLAGS) -o $@ $< $(LDPATH) $(OBJPATHS) $(LIBFHE) $(LDLIBS)
  
clean:
	rm -rf $(BUILD) $(TESTS) *~