include ../Makefile.generic

TBINDIR = ./build/bin
TOBJDIR = ./build/obj
TLIBDIR = ./build/lib
.SUFFIXES: .so .cpp .o $(LSFX)

TARGET   = MotionClassifier
CXXFLAGS += -I../idl/
LIBIDL = ../idl/libExtended3DdataTypes.a
SRC = $(TARGET).cpp MotionClassifierCore.cpp VOUtil.cpp EKFCoords.cpp FastSLAM.cpp DualQuaternionEst.cpp ProbMotionEst.cpp VOSimulation.cpp
OBJFILES = $(SRC:.cpp=.o)
OBJS     = $(addprefix $(TOBJDIR)/, $(OBJFILES))
TARGETLIB = $(TLIBDIR)/$(TARGET).$(LSFX)
TARGETCOMP = $(TBINDIR)/$(TARGET)Comp
CXXFLAGS += -I$(MODULES_DIR) -I$(FUNCS_DIR)
LDFLAGS += -lboost_thread
LDFLAGS += -L/usr/lib/octave-`octave-config -v` -loctave -Wl,-rpath /usr/lib/octave-`octave-config -v`
LIBS = $(LIBDIR)/liboctave_rtmex.a

all: mkdir labeling $(TARGETLIB) $(TBINDIR)/$(TARGET)Comp $(TBINDIR)/MotionClassifierTest.conf $(TBINDIR)/rtc.conf

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

mkdir:
	@if [ ! -d $(TBINDIR) ]; then \
	echo "Make build directory";\
	mkdir -p $(TBINDIR);\
	mkdir -p $(TOBJDIR);\
	mkdir -p $(TLIBDIR);\
	fi

$(TARGETLIB): $(OBJS)
	rm -f $@
	$(CXX) $(SHFLAGS) -o $@ $(OBJS) $(LIBS) $(LIBIDL) $(LDFLAGS)

$(TARGETCOMP): $(TOBJDIR)/$(TARGET)Comp.o $(OBJS)
	$(CXX) -o $@ $(TOBJDIR)/$(TARGET)Comp.o $(OBJS) $(LIBS) $(LIBIDL) $(LDFLAGS) 

$(TBINDIR)/MotionClassifierTest.conf: MotionClassifierTest.conf
	cp -f MotionClassifierTest.conf $(TBINDIR)/

dist-clean: clean
	rm -rf Labeling. ./build/ 

clean: clean_objs
	rm -f *~ \#* *.log

clean_objs:
	rm -f $(OBJS) $(TOBJDIR)/$(TARGET)Comp.o $(TARGETLIB) $(TARGETCOMP)


$(TOBJDIR)/$(TARGET).o: $(TARGET).cpp $(TARGET).h
	rm -f $@
	$(CXX) $(CXXFLAGS) -c -o $@ $<

$(TOBJDIR)/$(TARGET)Comp.o: $(TARGET)Comp.cpp 
	rm -f $@
	$(CXX) $(CXXFLAGS) -c -o $@ $<

$(TOBJDIR)/MotionClassifierCore.o: MotionClassifierCore.cpp MotionClassifierCore.h
	rm -f $@
	$(CXX) $(CXXFLAGS) -c -o $@ $<

$(TOBJDIR)/VOUtil.o: VOUtil.cpp VOUtil.h
	rm -f $@
	$(CXX) $(CXXFLAGS) -c -o $@ $<

$(TOBJDIR)/EKFCoords.o: EKFCoords.cpp EKFCoords.h
	rm -f $@
	$(CXX) $(CXXFLAGS) -c -o $@ $<

$(TOBJDIR)/FastSLAM.o: FastSLAM.cpp FastSLAM.h
	rm -f $@
	$(CXX) $(CXXFLAGS) -c -o $@ $<

$(TOBJDIR)/DualQuaternionEst.o: DualQuaternionEst.cpp DualQuaternionEst.h
	rm -f $@
	$(CXX) $(CXXFLAGS) -c -o $@ $<

$(TOBJDIR)/ProbMotionEst.o: ProbMotionEst.cpp ProbMotionEst.h
	rm -f $@
	$(CXX) $(CXXFLAGS) -c -o $@ $<

$(TOBJDIR)/VOSimulation.o: VOSimulation.cpp VOSimulation.h
	rm -f $@
	$(CXX) $(CXXFLAGS) -c -o $@ $<

test: test-vosimulation.cpp
	$(CXX) $(CXXFLAGS) -o test test-vosimulation.cpp $(OBJS) $(LDFLAGS) -L/usr/lib/octave-`octave-config -v` -loctave -Wl,-rpath /usr/lib/octave-`octave-config -v`

test2: check_SADTime.cpp
	$(CXX) $(CXXFLAGS) -o check_time check_SADTime.cpp $(LDFLAGS)

labeling:
	if [ ! -e Labeling.h ];\
	then wget http://oshiro.bpe.es.osaka-u.ac.jp/people/staff/imura/products/labeling/source/Labeling.h;\
	fi

$(TBINDIR)/rtc.conf: ../rtc.conf
	cp -f ../rtc.conf $(TBINDIR)/

# end of Makefile
