COPTS = \
		-Wall $(MOREDEF) -mtune=native -O3 \
		-std=c++11
		
LDOPTS = \
		-lm \
		-pthread \
		-lthrift -lglpk

OBJECTS = \
		src/MyMonitor.o \
		src/JobTool.o

OBJECTSIDL = \
		src/thrift/gen-cpp/Monitoring.o \
		src/thrift/gen-cpp/Remote.o \
		src/thrift/gen-cpp/Remote_constants.o \
		src/thrift/gen-cpp/Remote_types.o

PROGRAM = \
		server \
		client

# 4. create programms
all: $(PROGRAM)

gen-idl:
	thrift --gen cpp src/thrift/Remote.thrift
	thrift --gen js src/thrift/Remote.thrift
	mv gen-cpp/* src/thrift/gen-cpp/
	mv gen-js/* src/thrift/gen-js/
	rm -rf gen-cpp
	rm -rf gen-js

# 3. create thrift code and objects
idl: gen-idl $(OBJECTSIDL)

client: \
	$(OBJECTS) \
	$(OBJECTSIDL) \
	src/Buffer.hpp \
	src/Distributor.hpp \
	farmer.cpp
		g++ $(COPTS) $(OBJECTS) $(OBJECTSIDL) \
		  farmer.cpp -o farmer $(LDOPTS)

server: \
	$(OBJECTS) \
	$(OBJECTSIDL) \
	src/Worker_impl.o \
	worker.cpp
		g++ $(COPTS) $(OBJECTS) $(OBJECTSIDL) src/Worker_impl.o \
		  worker.cpp -o worker $(LDOPTS)

%.o: %.cpp
	g++ $(COPTS) -o $@ -c $*.cpp

# 1. clean thrift objects and generated code
clean-idl:
	rm -f src/thrift/gen-cpp/*.o

# 2. clean programm objects and programms
clean:
	rm -f src/*.o
	rm -f *.o
	rm -f farmer
	rm -f worker
