NO_COLOR=\033[0m
GREEN_COLOR=\033[32;01m
BLUE_COLOR=\033[34;01m
PB_COLOR=\033[33m

SDK_PATH:=$(shell pwd)/../../../../ARDroneLib
LIBS=-L /usr/lib/x86_64-linux-gnu -lsndfile -lm
PC_TARGET=yes
USE_LINUX=yes

ifdef MYKONOS
   include $(ARDRONE_CUSTOM_CONFIG)
   include $(ARDRONE_BUILD_CONFIG)
else
   include $(SDK_PATH)/Soft/Build/custom.makefile
   include $(SDK_PATH)/Soft/Build/config.makefile
endif

ifeq "$(RELEASE_BUILD)" "yes"
   ARDRONE_TARGET_DIR=$(shell pwd)/../../Build/Release
else
   ARDRONE_TARGET_DIR=$(shell pwd)/../../Build/Debug
endif

TARGET=ardrone_navigation

SRC_DIR:=$(shell pwd)/../Sources


COMMON_MOB_SRC_PATH = common
UTILS_SRC_PATH 		= utils
VIDEO_SRC_PATH 		= video
UI_SRC_PATH 		= UI
BT_SRC_PATH 		= BT
REF_SEND_SRC_PATH 	= ref_send
IHM_SRC_PATH 		= ihm
NDC_SRC_PATH 		= navdata_client
VC_SRC_PATH			= vicon_client

# Define application source files

GENERIC_BINARIES_SOURCE_DIR:=$(SRC_DIR)

GENERIC_BINARIES_COMMON_SOURCE_FILES+=			\
	$(COMMON_MOB_SRC_PATH)/mobile_config.c		\
	$(COMMON_MOB_SRC_PATH)/mobile_wifi.c		\
	$(UI_SRC_PATH)/wiimote.c			\
	$(UI_SRC_PATH)/ardrone_ini.c     \
	$(UTILS_SRC_PATH)/utils.c			\
	$(UTILS_SRC_PATH)/remote_console.c		\
	$(NDC_SRC_PATH)/navdata_client.c		\
	$(NDC_SRC_PATH)/navdata_tablepilotage.c		\
	$(NDC_SRC_PATH)/navdata_ihm.c			\
	$(IHM_SRC_PATH)/view_drone_attitude.c		\
	$(IHM_SRC_PATH)/ihm_vision.c    		\
	$(IHM_SRC_PATH)/ihm_stages_o_gtk.c    		\
	$(IHM_SRC_PATH)/ihm.c \
	$(IHM_SRC_PATH)/ihm_config.c \
	$(IHM_SRC_PATH)/ihm_raw_navdata.c

ifeq ($(PC_USE_POLARIS),yes)
  	GENERIC_CFLAGS+=-DPC_USE_POLARIS
 	GENERIC_BINARIES_COMMON_SOURCE_FILES+=			\
		$(NDC_SRC_PATH)/navdata_polaris.c		
endif

ifeq ($(USE_ARDRONE_VICON),yes)
GENERIC_BINARIES_COMMON_SOURCE_FILES+=			\
	$(VC_SRC_PATH)/vicon_client.c				\
	$(VC_SRC_PATH)/vicon_ihm.c
endif

#ifeq ($(USE_RAW_CAPTURE),yes)	
#GENERIC_BINARIES_COMMON_SOURCE_FILES+=			\
#    $(NDC_SRC_PATH)/raw_capture.c
#endif

ifeq ($(USE_ARDRONE_VICON),yes)
   GENERIC_CFLAGS+=-DUSE_ARDRONE_VICON
endif

GENERIC_INCLUDES+=					\
	$(SRC_DIR) \
	$(LIB_DIR) \
	$(SDK_PATH)/Soft/Common \
	$(SDK_PATH)/Soft/Lib \
	/usr/include/libxml2

ifeq ($(PC_USE_POLARIS),yes)
   GENERIC_INCLUDES+=					\
	$(SRC_PATH)/Soft/Lib  \
	$(SRC_PATH)/Soft/Lib/libPolaris
endif

ifeq ($(USE_ARDRONE_VICON),yes)
GENERIC_INCLUDES+=						\
	$(SRC_PATH)/Soft/Lib  \
	$(SRC_PATH)/Soft/Lib/libViconDataStreamSDK
endif

ifeq ($(USE_ARDRONE_CALIBRATION),yes)
   GENERIC_INCLUDES+=					\
	$(SRC_PATH)/Soft/Lib	\
	$(SRC_PATH)/Soft/Lib/libCalibration
endif

ifeq ($(USE_ARDRONE_VISION),yes)
   GENERIC_INCLUDES+=					\
	$(SRC_PATH)/Soft/Lib	\
	$(SRC_PATH)/Soft/Lib/Vision
endif

GENERIC_TARGET_BINARIES_PREFIX=

GENERIC_TARGET_BINARIES_DIR=$(ARDRONE_TARGET_DIR)

GENERIC_BINARIES_SOURCE_ENTRYPOINTS+=			\
	$(COMMON_MOB_SRC_PATH)/mobile_main.c

GENERIC_INCLUDES:=$(addprefix -I,$(GENERIC_INCLUDES))

ifeq ($(USE_ARDRONE_CALIBRATION),yes)
   GENERIC_CFLAGS+=-DPC_USE_CALIBRATION
endif

ifeq ($(USE_ARDRONE_VISION),yes)
   GENERIC_CFLAGS+=-DPC_USE_VISION
endif

GENERIC_LIB_PATHS=-L$(GENERIC_TARGET_BINARIES_DIR)
GENERIC_CFLAGS+=-DLIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE
GENERIC_LIBS+=-liw -lpc_ardrone -lgthread-2.0 -lgtk-x11-2.0 -lrt -lxml2 -ludev -lswscale -lSDL -lm

#ifeq ($(USE_ARDRONE_VISION),yes)
#   GENERIC_LIBS+=-lpc_vision
#endif

ifeq ($(USE_ARDRONE_CALIBRATION),yes)
   GENERIC_LIBS+=-lcalibration
endif

ifeq ($(PC_USE_POLARIS),yes)
   GENERIC_LIBS+=-lpc_polaris
endif

ifeq ($(USE_ARDRONE_VICON),yes)
GENERIC_LIB_PATHS=-L$(SRC_PATH)/Soft/Lib/libViconDataStreamSDK
    GENERIC_LIBS+=-lViconDataStreamSDK -lpc_vicon
endif

ifeq ($(WIIMOTE_SUPPORT),yes)
#  GENERIC_LIBS+=-lpc_cwiid
# Stephane : lib cwiid is now a Ubuntu package
  GENERIC_LIBS+=-lcwiid
endif

ifeq ($(EXTERNAL_CONTROL),yes)
  GENERIC_LIBS+=-lpc_ardrone_control
endif

SDK_FLAGS+="USE_APP=yes"
SDK_FLAGS+="APP_ID=ardrone_navigation"

export GENERIC_CFLAGS
export GENERIC_LIBS
export GENERIC_LIB_PATHS
export GENERIC_INCLUDES
export GENERIC_BINARIES_SOURCE_DIR
export GENERIC_BINARIES_COMMON_SOURCE_FILES
export GENERIC_TARGET_BINARIES_PREFIX
export GENERIC_TARGET_BINARIES_DIR
export GENERIC_BINARIES_SOURCE_ENTRYPOINTS

	

# Bug fix ...
export GENERIC_LIBRARY_SOURCE_DIR=$(GENERIC_BINARIES_SOURCE_DIR)

.PHONY: $(TARGET) build_libs

all: print_title build_libs $(TARGET)

print_title:
	@if [ '$(MAKECMDGOALS)' != 'clean' ]; then echo "$(BLUE_COLOR)-- Building $(TARGET) -- $(NO_COLOR)"; fi

$(TARGET): 
	@if [ '$(MAKECMDGOALS)' != 'clean' ]; then echo "$(GREEN_COLOR)-- Linking $(TARGET) --$(NO_COLOR)"; fi
	@$(MAKE) -C $(SDK_PATH)/VP_SDK/Build $(TMP_SDK_FLAGS) $(SDK_FLAGS) $(MAKECMDGOALS)
	mv $(GENERIC_TARGET_BINARIES_DIR)/$(COMMON_MOB_SRC_PATH)/mobile_main $(TARGET)
	mv $(TARGET) $(ARDRONE_TARGET_DIR)/
	@if [ ! -e $(ARDRONE_TARGET_DIR)/ardrone.xml ]; then cp $(SRC_DIR)/xml_files/ardrone_default.xml $(ARDRONE_TARGET_DIR)/ardrone.xml; fi
ifeq ($(USE_ARDRONE_VICON),yes)
	cp $(SRC_PATH)/Soft/Lib/libViconDataStreamSDK/libViconDataStreamSDK.so $(ARDRONE_TARGET_DIR)/
	cp $(SRC_PATH)/Soft/Lib/libViconDataStreamSDK/configure_vicon.sh $(ARDRONE_TARGET_DIR)/
endif

$(MAKECMDGOALS): build_libs
	@if [ '$(MAKECMDGOALS)' != 'clean' ]; then echo "$(GREEN_COLOR)Compiling navigation sources$(NO_COLOR)"; fi
	@$(MAKE) -C $(SDK_PATH)/VP_SDK/Build $(TMP_SDK_FLAGS) $(SDK_FLAGS) $(MAKECMDGOALS)

build_libs: 
ifeq ($(WIIMOTE_SUPPORT),yes)
	$(info Compiling Navigation with Wiimote)
endif
	@$(MAKE) -C $(SDK_PATH)/Soft/Build $(TMP_SDK_FLAGS) $(SDK_FLAGS) $(MAKECMDGOALS)

makefileverbose:
	@echo "Dump compilation flags:"
	@echo "GENERIC_CFLAGS : $(GENERIC_CFLAGS)"
	@echo "GENERIC_LIBS : $(GENERIC_LIBS)"
	@echo "GENERIC_LIB_PATHS : $(GENERIC_LIB_PATHS)"
	@echo "GENERIC_INCLUDES : $(GENERIC_INCLUDES)"
	@echo "GENERIC_BINARIES_SOURCE_DIR : $(GENERIC_BINARIES_SOURCE_DIR)"
	@echo "GENERIC_BINARIES_COMMON_SOURCE_FILES : $(GENERIC_BINARIES_COMMON_SOURCE_FILES)"
	@echo "GENERIC_TARGET_BINARIES_PREFIX : $(GENERIC_TARGET_BINARIES_PREFIX)"
	@echo "GENERIC_TARGET_BINARIES_DIR : $(GENERIC_TARGET_BINARIES_DIR)"
	@echo "GENERIC_BINARIES_SOURCE_ENTRYPOINTS : $(GENERIC_BINARIES_SOURCE_ENTRYPOINTS)"
	@echo "TMP_SDK_FLAGS: $(TMP_SDK_FLAGS)"
	@echo "SDK_FLAGS: $(SDK_FLAGS	)"
	@echo "Make cmd goals: $(MAKECMDGOALS)"

