# Adapted from Makefile for Independent JPEG Group's software

# This makefile is suitable for Unix-like systems with non-ANSI compilers.
# If you have an ANSI compiler, makefile.ansi is a better starting point.

ifndef TEKKOTSU_ENVIRONMENT_CONFIGURATION
$(error An error has occured, TEKKOTSU_ENVIRONMENT_CONFIGURATION was not defined)
endif
include $(TEKKOTSU_ENVIRONMENT_CONFIGURATION)
FILTERSYSWARN:=$(patsubst $(TEKKOTSU_ROOT)/%,../../%,$(FILTERSYSWARN))
COLORFILT:=$(patsubst $(TEKKOTSU_ROOT)/%,../../%,$(COLORFILT))
BUILDDIR=$(patsubst $(TEKKOTSU_ROOT)/%,../../%,$(TK_BD)/Motion/roboop)
SRCSUFFIX=.cpp

# You may need to adjust these cc options:
CXXFLAGS= -I ../../Shared/newmat -fno-inline \
          -Wall -W -Wlarger-than-8192 -Wpointer-arith -Wcast-qual \
          -Woverloaded-virtual -Wdeprecated -Wnon-virtual-dtor \
          -O3 -frename-registers -fomit-frame-pointer -fno-common \

#          -Wshadow -Weffc++

# Link-time cc options:
LDFLAGS=

# To link any special libraries, add the necessary -l commands here.
LDLIBS= 

# miscellaneous OS-dependent stuff
# linker
LN= $(CC)
# file deletion command
RM= rm -f
# file rename command
MV= mv

# End of configurable options.

# source files:
LIBSOURCES:= $(wildcard *$(SRCSUFFIX))
ifeq ($(TEKKOTSU_TARGET_PLATFORM), PLATFORM_APERIOS)
LIBSOURCES:=$(filter-out gnugraph$(SRCSUFFIX),$(LIBSOURCES))
endif

SOURCES= $(LIBSOURCES)

LIBOBJECTS= $(addprefix $(BUILDDIR)/,$(LIBSOURCES:.cpp=.o))

all: $(BUILDDIR)/libroboop.a

.PHONY: all clean

$(BUILDDIR)/libroboop.a: $(LIBOBJECTS)
	$(RM) $@
	@echo "Linking $@..."
	@$(AR) $@  $(LIBOBJECTS)
	@$(AR2) $@

clean:
	$(RM) *.o *.a *.log core

%.o:
	@mkdir -p $(dir $@)
	@src=$(patsubst %.o,%$(SRCSUFFIX),$(patsubst $(BUILDDIR)/%,%,$@)); \
	echo "Compiling ROBOOP::$$src... (Reduced warnings)"; \
	$(CXX) $(CXXFLAGS) -o $@ -c $$src > $*.log 2>&1; \
	retval=$$?; \
	cat $*.log | $(FILTERSYSWARN) | $(COLORFILT) | $(TEKKOTSU_LOGVIEW); \
	test $$retval -eq 0;

$(BUILDDIR)/controller.o: controller.cpp controller.h

$(BUILDDIR)/control_select.o: control_select.cpp control_select.h

$(BUILDDIR)/dynamics_sim.o: dynamics_sim.cpp dynamics_sim.h

$(BUILDDIR)/trajectory.o: trajectory.cpp trajectory.h

$(BUILDDIR)/clik.o :  clik.cpp clik.h utils.h robot.h

$(BUILDDIR)/robot.o :  robot.cpp utils.h robot.h

$(BUILDDIR)/config.o : config.cpp config.h

$(BUILDDIR)/quaternion.o : quaternion.cpp quaternion.h

$(BUILDDIR)/gnugraph.o :  gnugraph.cpp gnugraph.h utils.h robot.h

$(BUILDDIR)/comp_dq.o :  comp_dq.cpp utils.h robot.h

$(BUILDDIR)/comp_dqp.o :  comp_dqp.cpp utils.h robot.h

$(BUILDDIR)/delta_t.o :  delta_t.cpp utils.h robot.h

$(BUILDDIR)/dynamics.o :  dynamics.cpp utils.h robot.h

$(BUILDDIR)/homogen.o :  homogen.cpp utils.h robot.h

$(BUILDDIR)/invkine.o :  invkine.cpp utils.h robot.h

$(BUILDDIR)/kinemat.o :  kinemat.cpp utils.h robot.h

$(BUILDDIR)/sensitiv.o :  sensitiv.cpp utils.h robot.h

$(BUILDDIR)/utils.o :  utils.cpp utils.h robot.h
