NAME = gentest
NAMELIB = libfispro.so
ARCHIVER= g++ -shared -o
COMPILER= g++
BASE = ../base
BIN= ../../bin
ifeq ($(OS),WIN32)
BIN=../../bin-x86
endif
ifeq ($(OS),WIN64)
BIN=../../bin-amd64
endif
LIB_DIR = -L$(BIN)
INCLUDE_DIR = -I$(BASE)
ifeq ($(OS),$(filter $(OS),WIN32 WIN64))
LIB_DIR+=-static
endif
  

CCFLAGS= -g -O0 -Wall -pedantic -ansi  $(INCLUDE_DIR) $(LIB_DIR) $(OPT) 
OBJECTS= $(BIN)/gentest.o $(BIN)/genfis.o $(BIN)/fis.o $(BIN)/out.o $(BIN)/in.o $(BIN)/mf.o $(BIN)/rule.o $(BIN)/defuz.o $(BIN)/common.o $(BIN)/aggreg.o 

$(BIN)/$(NAME) : $(OBJECTS)  
	$(COMPILER) -o $(BIN)/$(NAME)  $(CCFLAGS)  $(OBJECTS) -lm 

$(BIN)/gentest.o : gentest.cpp genfis.h 
	$(COMPILER) -c $(CCFLAGS) -o $(BIN)/gentest.o gentest.cpp

$(BIN)/genfis.o : genfis.cpp genfis.h 
	$(COMPILER) -c $(CCFLAGS) -o $(BIN)/genfis.o genfis.cpp

$(BIN)/fis.o : $(BASE)/fis.cpp $(BASE)/fis.h $(BASE)/mf.h $(BASE)/rule.h $(BASE)/defuz.h $(BASE)/common.h 
	$(COMPILER) -c $(CCFLAGS) -o $(BIN)/fis.o $(BASE)/fis.cpp
	$(ARCHIVER) $(BIN)/$(NAMELIB) $(OBJECTSLIB) -lm	

$(BIN)/in.o : $(BASE)/in.cpp $(BASE)/fis.h $(BASE)/mf.h $(BASE)/common.h 
	$(COMPILER) -c $(CCFLAGS) -o $(BIN)/in.o $(BASE)/in.cpp
	$(ARCHIVER) $(BIN)/$(NAMELIB) $(OBJECTSLIB) -lm

$(BIN)/out.o : $(BASE)/out.cpp $(BASE)/fis.h $(BASE)/mf.h $(BASE)/common.h 
	$(COMPILER) -c $(CCFLAGS) -o $(BIN)/out.o $(BASE)/out.cpp
	$(ARCHIVER) $(BIN)/$(NAMELIB) $(OBJECTSLIB) -lm

$(BIN)/mf.o : $(BASE)/mf.cpp $(BASE)/fis.h $(BASE)/mf.h $(BASE)/common.h 
	$(COMPILER) -c $(CCFLAGS) -o $(BIN)/mf.o $(BASE)/mf.cpp
	$(ARCHIVER) $(BIN)/$(NAMELIB) $(OBJECTSLIB) -lm

$(BIN)/rule.o : $(BASE)/rule.cpp $(BASE)/fis.h $(BASE)/mf.h $(BASE)/rule.h $(BASE)/common.h 
	$(COMPILER) -c $(CCFLAGS) -o $(BIN)/rule.o $(BASE)/rule.cpp
	$(ARCHIVER) $(BIN)/$(NAMELIB) $(OBJECTSLIB) -lm

$(BIN)/defuz.o : $(BASE)/defuz.cpp $(BASE)/fis.h $(BASE)/mf.h $(BASE)/rule.h $(BASE)/defuz.h $(BASE)/common.h 
	$(COMPILER) -c $(CCFLAGS) -o $(BIN)/defuz.o $(BASE)/defuz.cpp
	$(ARCHIVER) $(BIN)/$(NAMELIB) $(OBJECTSLIB) -lm

$(BIN)/common.o : $(BASE)/common.cpp $(BASE)/common.h
	$(COMPILER) -c $(CCFLAGS) -o $(BIN)/common.o $(BASE)/common.cpp
	$(ARCHIVER) $(BIN)/$(NAMELIB) $(OBJECTSLIB) -lm

$(BIN)/aggreg.o : $(BASE)/aggreg.cpp $(BASE)/fis.h $(BASE)/mf.h $(BASE)/rule.h $(BASE)/defuz.h $(BASE)/common.h 
	$(COMPILER) -c $(CCFLAGS) -o $(BIN)/aggreg.o $(BASE)/aggreg.cpp
	$(ARCHIVER) $(BIN)/$(NAMELIB) $(OBJECTSLIB) -lm

clean : 
	rm  *~ $(OBJECTS)

cleanall : 
	rm  *~ $(OBJECTS) $(BIN)/$(NAME)
