MANAGERS_SOURCES_PATH = ../src
MANAGERS_INCLUDE_PATH = ../include
ROBOTISOP2_ROOT ?= /robotis
ROBOTISOP2_FRAMEWORK_PATH = $(ROBOTISOP2_ROOT)/Framework
ROBOTISOP2_LINUX_PATH = $(ROBOTISOP2_ROOT)/Linux
WEBOTS_INCLUDE_PATH = ../transfer/include/
TARGET = managers.a

CXX_SOURCES = \
  $(ROBOTISOP2_FRAMEWORK_PATH)/src/math/Matrix.cpp \
  $(ROBOTISOP2_FRAMEWORK_PATH)/src/math/Vector.cpp \
  $(ROBOTISOP2_FRAMEWORK_PATH)/src/math/Point.cpp \
  $(ROBOTISOP2_FRAMEWORK_PATH)/src/MX28.cpp \
  $(ROBOTISOP2_FRAMEWORK_PATH)/src/motion/JointData.cpp \
  $(ROBOTISOP2_FRAMEWORK_PATH)/src/motion/MotionStatus.cpp \
  $(ROBOTISOP2_FRAMEWORK_PATH)/src/motion/Kinematics.cpp \
  $(ROBOTISOP2_FRAMEWORK_PATH)/src/motion/modules/Action.cpp \
  $(ROBOTISOP2_FRAMEWORK_PATH)/src/motion/modules/Walking.cpp \
  $(ROBOTISOP2_FRAMEWORK_PATH)/src/vision/ImgProcess.cpp \
  $(ROBOTISOP2_FRAMEWORK_PATH)/src/vision/ColorFinder.cpp \
  $(ROBOTISOP2_FRAMEWORK_PATH)/src/vision/Image.cpp \
  $(ROBOTISOP2_LINUX_PATH)/build/LinuxMotionTimer.cpp \
  $(MANAGERS_SOURCES_PATH)/RobotisOp2DirectoryManager.cpp \
  $(MANAGERS_SOURCES_PATH)/RobotisOp2MotionManager.cpp \
  $(MANAGERS_SOURCES_PATH)/RobotisOp2GaitManager.cpp \
  $(MANAGERS_SOURCES_PATH)/RobotisOp2MotionTimerManager.cpp \
  $(MANAGERS_SOURCES_PATH)/RobotisOp2VisionManager.cpp
C_SOURCES = \
  $(ROBOTISOP2_FRAMEWORK_PATH)/src/minIni/minIni.c
SOURCES = $(C_SOURCES) $(CXX_SOURCES)

EXTRA_FLAGS =
AR          = ar cr

CC        = gcc
CXX       = g++
OBJECTS   = $(notdir $(CXX_SOURCES:.cpp=.o) $(C_SOURCES:.c=.o))
CFLAGS   += -c -O2 -Wall -DWEBOTS -DCROSSCOMPILATION -I$(ROBOTISOP2_FRAMEWORK_PATH)/include -I$(ROBOTISOP2_LINUX_PATH)/include -I$(MANAGERS_INCLUDE_PATH) -I$(WEBOTS_INCLUDE_PATH)
CXXFLAGS += -c -O2 -Wall -DWEBOTS -DCROSSCOMPILATION -I$(ROBOTISOP2_FRAMEWORK_PATH)/include -I$(ROBOTISOP2_LINUX_PATH)/include -I$(MANAGERS_INCLUDE_PATH) -I$(WEBOTS_INCLUDE_PATH)
DEPENDENCIES = $(OBJECTS:.o=.d)

.PHONY: clean compil

compil: $(TARGET)

vpath %.c   $(dir $(SOURCES))
vpath %.cpp $(dir $(SOURCES))

ifneq ($(MAKECMDGOALS),clean)
-include $(DEPENDENCIES)
endif

clean:
	rm -f $(TARGET) $(OBJECTS) $(DEPENDENCIES)

$(TARGET): $(OBJECTS)
	$(AR) $(TARGET) $(OBJECTS)

%.d:%.cpp
	$(CXX) $(CXXFLAGS) -MM $< > $@

%.d:%.c
	$(CC) $(CFLAGS) -MM $< > $@

%.o:%.cpp
	$(CXX) $(CXXFLAGS) $(EXTRA_FLAGS) $< -o $@

%.o:%.c
	$(CC) $(CFLAGS) $(EXTRA_FLAGS) $< -o $@
