LIBS=-lCommon 
LDFLAGS=-LCommon/
TARGETS=disulfinder disultrainer
ifndef CXX
CXX=g++
endif
SVMDIR=SVM
BRNNDIR=BRNN
NNDIR=NN
COMMONDIR=Common
RNNDIR=$(BRNNDIR)/RNNs
CXXFLAGS += -O3 -Wall -Wno-deprecated -I$(RNNDIR)
BRNNOBJECTS=\
        $(RNNDIR)/Node.o \
        $(RNNDIR)/StructureSearch.o \
        $(RNNDIR)/DataSet.o \
        $(RNNDIR)/DPAG.o \
        $(RNNDIR)/Options.o \
        $(BRNNDIR)/protein_util.o \
        $(BRNNDIR)/blast_util.o \
        $(BRNNDIR)/rnn_util.o

OBJECTS= \
	Input/GlobalDescriptor.o \
	Input/createBRNNDataset.o \
	Input/createKernelDataset.o \
	Input/makeWindow.o \
	Input/makeSparseVector.o \
	Input/Protein.o \
	Input/buildXfolds.o \
	SVM/SVMClassifier.o \
	Output/makeHTMLOutput.o \
	Output/utils.o \
	Output/makeASCIIOutput.o \
	FSA-Alignment/fsa.o \
	FSA-Alignment/viterbi_aligner.o \
	NN/multi-array.o \
	NN/array.o \
	NN/brnn-model.o \
	NN/brnn-test.o \
	$(BRNNOBJECTS)

SOURCES=$(OBJECTS:.o=.cpp)

all: SVM NN brnn disulfinder disultrainer

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

$(COMMONDIR)/libCommon.a: COMMON

disulfinder: $(OBJECTS) $(COMMONDIR)/libCommon.a disulfinder.o
	$(CXX) -o disulfinder disulfinder.o $(OBJECTS) $(LDFLAGS) $(LIBS)

disultrainer: disultrainer.o $(OBJECTS) $(COMMONDIR)/libCommon.a
	$(CXX) -o $@ disultrainer.o $(OBJECTS) $(LDFLAGS) $(LIBS)

brnn: 
	$(MAKE) -C $(BRNNDIR) deps.mk 
	$(MAKE) -C $(BRNNDIR)

NN :	COMMON
	$(MAKE) -C $(NNDIR)

NN-clean :
	$(MAKE) -C $(NNDIR) clean

.PHONY: COMMON
COMMON :
	$(MAKE) -C $(COMMONDIR) lib

COMMON-clean :
	$(MAKE) -C $(COMMONDIR) clean

SVM : 	COMMON
	$(MAKE) -C $(SVMDIR)

SVM-clean :
	$(MAKE) -C $(SVMDIR) clean

clean : NN-clean COMMON-clean SVM-clean
	cd SVM && $(MAKE) clean
	cd Input && $(MAKE) clean
	cd Output && $(MAKE) clean
	cd FSA-Alignment && $(MAKE) clean
	cd $(BRNNDIR) && $(MAKE) clean
	rm $(TARGETS) *.o *~ -f 

install:
	mkdir -p $(DESTDIR)$(prefix)/bin
	cp disulfinder $(DESTDIR)$(prefix)/bin/
	mkdir -p $(DESTDIR)$(prefix)/share/disulfinder
	mkdir -p $(DESTDIR)$(prefix)/share/disulfinder/Models
	cp -r ../Models $(DESTDIR)$(prefix)/share/disulfinder/ && find $(DESTDIR)$(prefix)/share/disulfinder/ -depth -ignore_readdir_race -name .svn -execdir rm -rf {} \;
	rm -rf $(DESTDIR)$(prefix)/share/disulfinder/Models/conn/data/sequences_w5
	rm -rf $(DESTDIR)$(prefix)/share/disulfinder/Predictions
	rm -rf $(DESTDIR)$(prefix)/share/disulfinder/tmp

.PHONY : help COMMON NN SVM

deps.mk: $(SOURCES) disulfinder.cpp
	$(CXX) -MM $(CXXFLAGS) $^ > deps.mk

include deps.mk




