# Makefile for NEURObjects 2.0

SOURCE = tset.cc  utils.cc layer.cc net.cc appl.cc ecocnet.cc\
				 act_fun.cc learn.cc build_net.cc  patgen.cc dico.cc decomp.cc polidico.cc \
				 dodata.cc  dofold.cc nn.cc pnd.cc  mutualinfo.cc mutualinfo7.cc chi2.cc outerr.cc \
				 mm.cc doerrfile.cc mi72.cc mi73.cc mi74.cc  mi75.cc mi76.cc subsample.cc NO2light.cc \
				 convert_data_format.cc roc.cc vect.cc matrix.cc basesvml.cc basemlp.cc

OBJECTS_DODATA =  dodata.o	
OBJECTS_DOFOLD =  dofold.o	
OBJECTS_SUBSAMPLE = appl.o	subsample.o
OBJECTS_NO2light = appl.o	NO2light.o
OBJECTS_CONVERT = convert_data_format.o
OBJECTS_NN = appl.o nn.o
OBJECTS_PND = appl.o pnd.o				  
OBJECTS_NN_CV = appl.o nn_cv.o
OBJECTS_PND_CV =   appl.o pnd_cv.o
OBJECTS_MM = utils.o mutualinfo.o mm.o
OBJECTS_MI72 =  mi72.o
OBJECTS_MI73 =  mi73.o
OBJECTS_MI74 =  mi74.o
OBJECTS_MI75 =  mi75.o
OBJECTS_MI76 =  mi76.o
OBJECTS_DOERRFILE = doerrfile.o 

LIBOBJECTS = tset.o utils.o layer.o net.o act_fun.o learn.o build_net.o \
				  dico.o  patgen.o decomp.o polidico.o ecocnet.o appl.o mutualinfo.o \
					mutualinfo7.o chi2.o outerr.o roc.o vect.o matrix.o basesvml.o basemlp.o


APPL = dodata nn  pnd nn_cv  pnd_cv dofold mm	 mi72 mi73 mi74 mi75 mi76 doerrfile subsample NO2light \
       convert_data_format
APPLSTATIC = dodata_s nn_s  pnd_s nn_cv_s  pnd_cv_s dofold_s mm_s	 doerrfile_s subsample_s NO2light_s \
             convert_data_format_s
LIBNO = libNO.a libNO.so 
		  
LIB = -lNO -lm 
LINKERFLAGS = -L$(NEUROBJ)
INCLUDEDIR = 	-I$(NEUROBJ)
OPTIMFLAGS = -O2  			  
MYCFLAGS = $(CFLAGS) $(INCLUDEDIR) $(OPTIMFLAGS)
APPLDIR = appl
CC = g++

all : $(LIBNO) $(APPL) 
applstatic: $(LIBNO) $(APPLSTATIC)

# building applications using shared libraries
nn : $(OBJECTS_NN) Makefile
	$(CC) $(LINKERFLAGS)  $(OBJECTS_NN) -o $(APPLDIR)/$@ $(LIB) 
	
dodata : $(OBJECTS_DODATA) Makefile
	$(CC)  $(LINKERFLAGS) $(OBJECTS_DODATA) -o $(APPLDIR)/$@  $(LIB) 
	
pnd : $(OBJECTS_PND) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_PND) -o $(APPLDIR)/$@  $(LIB) 
	
nn_cv : $(OBJECTS_NN_CV) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_NN_CV) -o $(APPLDIR)/$@  $(LIB) 
	
pnd_cv : $(OBJECTS_PND_CV) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_PND_CV) -o $(APPLDIR)/$@  $(LIB) 
	
dofold : $(OBJECTS_DOFOLD) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_DOFOLD) -o $(APPLDIR)/$@  $(LIB) 	
	
mm : $(OBJECTS_MM) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_MM) -o $(APPLDIR)/$@  $(LIB)
	
mi72 : $(OBJECTS_MI72) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_MI72) -o $(APPLDIR)/$@ $(LIB) 
	
mi73 : $(OBJECTS_MI73) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_MI73) -o $(APPLDIR)/$@ $(LIB) 
	
mi74 : $(OBJECTS_MI74) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_MI74) -o $(APPLDIR)/$@ $(LIB) 

mi75 : $(OBJECTS_MI75) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_MI75) -o $(APPLDIR)/$@  $(LIB) 
	
mi76 : $(OBJECTS_MI76) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_MI76) -o $(APPLDIR)/$@ $(LIB) 
	
doerrfile : $(OBJECTS_DOERRFILE) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_DOERRFILE) -o $(APPLDIR)/$@  $(LIB) 
	
subsample : $(OBJECTS_SUBSAMPLE) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_SUBSAMPLE) -o $(APPLDIR)/$@  $(LIB)
	
NO2light : $(OBJECTS_NO2light) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_NO2light) -o $(APPLDIR)/$@  $(LIB)
	
convert_data_format : $(OBJECTS_CONVERT) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_CONVERT) -o $(APPLDIR)/$@  $(LIB)  
	

# build application using static linking
nn_s : $(OBJECTS_NN) Makefile
	$(CC) $(LINKERFLAGS)  $(OBJECTS_NN) -o $(APPLDIR)/nn -static $(LIB)
	
dodata_s : $(OBJECTS_DODATA) Makefile	
	$(CC)  $(LINKERFLAGS) $(OBJECTS_DODATA) -o $(APPLDIR)/dodata  -static $(LIB)
	
pnd_s : $(OBJECTS_PND) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_PND) -o $(APPLDIR)/pnd  -static $(LIB)
	
nn_cv_s : $(OBJECTS_NN_CV) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_NN_CV) -o $(APPLDIR)/nn_cv  -static $(LIB)
	
pnd_cv_s : $(OBJECTS_PND_CV) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_PND_CV) -o $(APPLDIR)/pnd_cv  -static $(LIB)
	
dofold_s : $(OBJECTS_DOFOLD) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_DOFOLD) -o $(APPLDIR)/dofold -static  $(LIB)
	
mm_s : $(OBJECTS_MM) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_MM) -o $(APPLDIR)/mm  -static $(LIB)
	
doerrfile_s : $(OBJECTS_DOERRFILE) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_DOERRFILE) -o $(APPLDIR)/doerrfile -static $(LIB) 

subsample_s : $(OBJECTS_SUBSAMPLE) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_SUBSAMPLE) -o $(APPLDIR)/subsample -static $(LIB)
	
NO2light_s : $(OBJECTS_NO2light) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_NO2light) -o $(APPLDIR)/NO2light -static $(LIB)
	
convert_data_format_s : $(OBJECTS_CONVERT) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_CONVERT) -o $(APPLDIR)/convert_data_format -static $(LIB)
	
	
# main file applications compiling
	
dodata.o : dodata.cc utils.h patgen.h 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@

nn.o : nn.cc utils.h tset.h net.h appl.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
pnd.o : pnd.cc appl.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@

nn_cv.o : nn_cv.cc appl.h 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
pnd_cv.o : pnd_cv.cc appl.h 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
dofold.o : dofold.cc utils.h patgen.h tset.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@	
	
mm.o : mm.cc utils.h mutualinfo.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
mi72.o : mi72.cc utils.h mutualinfo7.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
mi73.o : mi73.cc utils.h mutualinfo7.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
mi74.o : mi74.cc utils.h mutualinfo7.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
mi75.o : mi75.cc utils.h mutualinfo7.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
mi76.o : mi76.cc utils.h mutualinfo7.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
doerrfile.o : doerrfile.cc outerr.h 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@

subsample.o : subsample.cc appl.h 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
NO2light.o : NO2light.cc appl.h 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@	
	
convert_data_format.o : convert_data_format.cc 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@	
	


# library file  compiling	
tset.o : tset.cc  tset.h utils.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
utils.o : utils.cc  utils.h 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
layer.o : layer.cc  utils.h act_fun.h layer.h 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@

net.o : net.cc  utils.h act_fun.h net.h layer.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
dico.o : dico.cc  utils.h act_fun.h net.h layer.h dico.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
act_fun.o : act_fun.cc  act_fun.h 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
learn.o : learn.cc   learn.h tset.h utils.h net.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
build_net.o : build_net.cc   tset.h utils.h net.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
patgen.o : patgen.cc   patgen.h utils.h 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
decomp.o : decomp.cc decomp.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
polidico.o : polidico.cc polidico.h
	$(CC) $(MYCFLAGS) -fexternal-templates $(CPPFLAGS) -c  $< -o $@
	
appl.o : appl.cc appl.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
ecocnet.o : ecocnet.cc ecocnet.h net.h net.cc
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
mutualinfo.o : mutualinfo.cc mutualinfo.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
mutualinfo7.o : mutualinfo7.cc mutualinfo7.h
	$(CC) $(MYCFLAGS) -fexternal-templates $(CPPFLAGS) -c  $< -o $@
	
chi2.o : chi2.cc chi2.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
outerr.o : outerr.cc outerr.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
roc.o : roc.cc roc.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
vect.o : vect.cc vect.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
matrix.o : matrix.cc matrix.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
basesvml.o : basesvml.cc baselearner.h basesvml.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@

basemlp.o : basemlp.cc baselearner.h basemlp.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	

# static library
libNO.a  :  $(LIBOBJECTS)
	ar r libNO.a $(LIBOBJECTS)

# shared library
libNO.so  :  $(LIBOBJECTS)
	g++ -shared -o libNO.so $(LIBOBJECTS)



.PHONY : clean	
clean :
	-rm *.o 
	
cleanall :
	-rm *.o  ${LIBNO}; cd $(APPLDIR); rm $(APPL)
