# 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 binomial.cc \
				 bagging.cc bagging-ext.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 
OBJECTS_DODECOMP = dodecomp.o
OBJECTS_PEXIMIZEHD = peximizeHD.o
OBJECTS_CONVERT2 = convert_data_format2.o
OBJECTS_OPTIMIZEHD = optimizeHD.o
OBJECTS_EXTRACT = extract_data.o
OBJECTS_BAGSVM = bagsvm.o
OBJECTS_EXTRLAB = extract_labels_light.o

LIBOBJECTS = decomp.o tset.o utils.o layer.o net.o act_fun.o learn.o build_net.o \
				   dico.o  patgen.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 binomial.o bagging.o \
					bagging-ext.o


APPL = dodata nn  pnd nn_cv  pnd_cv dofold mm	 mi72 mi73 mi74 mi75 mi76 doerrfile subsample NO2light \
       convert_data_format dodecomp peximizeHD convert_data_format2 optimizeHD extract_data bagsvm \
			 extract_labels_light

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 dodecomp_s peximizeHD_s optimizeHD_s bagsvm_s extract_labels_light_s
LIBNO = libNO.a libNO.so 
LIBDIR=lib
LIB = -lNO -lm 
LINKERFLAGS = -L$(LIBDIR)
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) 
        
dodecomp : $(OBJECTS_DODECOMP) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_DODECOMP) -o $(APPLDIR)/$@  $(LIB)  

peximizeHD : $(OBJECTS_PEXIMIZEHD) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_PEXIMIZEHD) -o $(APPLDIR)/$@  $(LIB)

convert_data_format2 : $(OBJECTS_CONVERT2) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_CONVERT2) -o $(APPLDIR)/$@  $(LIB)        
	
optimizeHD : $(OBJECTS_OPTIMIZEHD) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_OPTIMIZEHD) -o $(APPLDIR)/$@  $(LIB)
	
extract_data : $(OBJECTS_EXTRACT) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_EXTRACT) -o $(APPLDIR)/$@  $(LIB)
	
bagsvm : $(OBJECTS_BAGSVM) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_BAGSVM) -o $(APPLDIR)/$@  $(LIB)

extract_labels_light : $(OBJECTS_EXTRLAB) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_EXTRLAB) -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)
        
dodecomp_s : $(OBJECTS_DODECOMP) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_DODECOMP) -o $(APPLDIR)/dodecomp -static $(LIB)
	
peximizeHD_s : $(OBJECTS_PEXIMIZEHD) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_PEXIMIZEHD) -o $(APPLDIR)/peximizeHD -static $(LIB)

convert_data_format2_s : $(OBJECTS_CONVERT2) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_CONVERT2) -o $(APPLDIR)/peximizeHD -static $(LIB)
	
bagsvm_s : $(OBJECTS_BAGSVM) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_BAGSVM) -o $(APPLDIR)/bagsvm -static $(LIB)
	
extract_labels_light_s : $(OBJECTS_EXTRLAB) Makefile  
	$(CC)  $(LINKERFLAGS) $(OBJECTS_EXTRLAB) -o $(APPLDIR)/extract_labels_light -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 $@	
        
dodecomp.o : dodecomp.cc decomp.cc decomp.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
peximizeHD.o : peximizeHD.cc decomp.cc decomp.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
        
convert_data_format2.o : convert_data_format2.cc 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@

optimizeHD.o : optimizeHD.cc decomp.cc decomp.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
extract_data.o : extract_data.cc 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
bagsvm.o : bagsvm.cc 
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
extract_labels_light.o : extract_labels_light.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 $@
	
binomial.o : binomial.cc binomial.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@

bagging.o : bagging.cc bagging.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@
	
bagging-ext.o : bagging-ext.cc bagging-ext.h
	$(CC) $(MYCFLAGS) $(CPPFLAGS) -c  $< -o $@

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

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



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