This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

RTOS: Missing Open CL library problem on RTOS

Tool/software: TI-RTOS

Hi,

I'm getting this error while OpenCV is enabled in VSDK 3.1 and my .mk file is attached below. How can I resolve this issue.

/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:36: undefined reference to `ti_opencl_OpenCL_computeUnitList(void) const'
/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:36: undefined reference to `ti_opencl_OpenCL_computeUnitList(void) const'
C:/PROCESSOR_SDK_VISION_03_01_00_00/vision_sdk/../ti_components/open_compute/opencl_rtos_am57xx_01_01_10_00/packages/ti/opencl/package/lib/lib/ti.opencl/configuration.oa15fg: In function `ti_opencl_get_OCL_GLOBAL_base':
/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:41: undefined reference to `ti_opencl_OpenCL_OCL_GLOBAL_base(void) const'
/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:41: undefined reference to `ti_opencl_OpenCL_OCL_GLOBAL_base(void) const'
C:/PROCESSOR_SDK_VISION_03_01_00_00/vision_sdk/../ti_components/open_compute/opencl_rtos_am57xx_01_01_10_00/packages/ti/opencl/package/lib/lib/ti.opencl/configuration.oa15fg: In function `ti_opencl_get_OCL_GLOBAL_len':
/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:46: undefined reference to `ti_opencl_OpenCL_OCL_GLOBAL_len(void) const'
/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:46: undefined reference to `ti_opencl_OpenCL_OCL_GLOBAL_len(void) const'
C:/PROCESSOR_SDK_VISION_03_01_00_00/vision_sdk/../ti_components/open_compute/opencl_rtos_am57xx_01_01_10_00/packages/ti/opencl/package/lib/lib/ti.opencl/configuration.oa15fg: In function `ti_opencl_get_OCL_HOSTMEM_base':
/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:51: undefined reference to `ti_opencl_OpenCL_OCL_HOSTPROG_base(void) const'
/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:51: undefined reference to `ti_opencl_OpenCL_OCL_HOSTPROG_base(void) const'
C:/PROCESSOR_SDK_VISION_03_01_00_00/vision_sdk/../ti_components/open_compute/opencl_rtos_am57xx_01_01_10_00/packages/ti/opencl/package/lib/lib/ti.opencl/configuration.oa15fg: In function `ti_opencl_get_OCL_HOSTMEM_len':
/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:56: undefined reference to `ti_opencl_OpenCL_OCL_HOSTPROG_len(void) const'
/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:56: undefined reference to `ti_opencl_OpenCL_OCL_HOSTPROG_len(void) const'
C:/PROCESSOR_SDK_VISION_03_01_00_00/vision_sdk/../ti_components/open_compute/opencl_rtos_am57xx_01_01_10_00/packages/ti/opencl/package/lib/lib/ti.opencl/configuration.oa15fg: In function `ti_opencl_get_OCL_LOCAL_base':
/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:61: undefined reference to `ti_opencl_OpenCL_OCL_LOCAL_base(void) const'
/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:61: undefined reference to `ti_opencl_OpenCL_OCL_LOCAL_base(void) const'
C:/PROCESSOR_SDK_VISION_03_01_00_00/vision_sdk/../ti_components/open_compute/opencl_rtos_am57xx_01_01_10_00/packages/ti/opencl/package/lib/lib/ti.opencl/configuration.oa15fg: In function `ti_opencl_get_OCL_LOCAL_len':
/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:66: undefined reference to `ti_opencl_OpenCL_OCL_LOCAL_len(void) const'
/home/a0756912/OCL_Release/ti-opencl/packages/ti/opencl/configuration.c:66: undefined reference to `ti_opencl_OpenCL_OCL_LOCAL_len(void) const'

# Filename: rules_a15.mk
#
# Make rules for A15 - This file has all the common rules and defines required
#                     for Cortex-A15 ISA
#
# This file needs to change when:
#     1. Code generation tool chain changes (currently it uses CodeSourcery)
#     2. Internal switches (which are normally not touched) has to change
#     3. XDC specific switches change
#     4. a rule common for A15 ISA has to be added or modified

# Set compiler/archiver/linker commands and include paths
CODEGEN_INCLUDE = $(CODEGEN_PATH_A15)/arm-none-eabi/include
CC = $(CODEGEN_PATH_A15)/bin/arm-none-eabi-gcc
AR = $(CODEGEN_PATH_A15)/bin/arm-none-eabi-ar
LNK = $(CODEGEN_PATH_A15)/bin/arm-none-eabi-ld

# Derive a part of RTS Library name based on ENDIAN: little/big
ifeq ($(ENDIAN),little)
  RTSLIB_ENDIAN = le
else
  RTSLIB_ENDIAN = be
endif

# Derive compiler switch and part of RTS Library name based on FORMAT: COFF/ELF
ifeq ($(FORMAT),COFF)
  CSWITCH_FORMAT = ti_arm9_abi
  RTSLIB_FORMAT = tiarm9
endif
ifeq ($(FORMAT),ELF)
  CSWITCH_FORMAT = eabi
  RTSLIB_FORMAT = eabi
endif

# Internal CFLAGS - normally doesn't change
CFLAGS_INTERNAL = -c -mcpu=cortex-a15 -g -mfpu=neon -mfloat-abi=hard -mabi=aapcs -mapcs-frame  -ffunction-sections -fdata-sections -DSYSBIOS -DCGT_GCC
CFLAGS_DIROPTS =
CPPFLAGS =

ifeq ($(ENABLE_OPENCV), yes)
CFLAGS_INTERNAL += -DGENERIC_ARM -DGENERIC
CPPFLAGS += -fpermissive
endif

ifeq ($(CPU_IDLE_ENABLED), yes)
CFLAGS_INTERNAL += -DCPU_IDLE_ENABLED
endif

# CFLAGS based on profile selected
ifeq ($(PROFILE_$(CORE)), debug)
  CFLAGS_INTERNAL += -D_DEBUG_=1
  LNKFLAGS_INTERNAL_PROFILE =
endif
ifeq ($(PROFILE_$(CORE)), release)
  CFLAGS_INTERNAL += -O2 -s -DNDEBUG
  LNKFLAGS_INTERNAL_PROFILE = -O2
endif

ifeq ($(TREAT_WARNINGS_AS_ERROR), yes)
ifneq ($(ENABLE_OPENCV), yes)
CFLAGS_INTERNAL += -Werror
endif
endif

ifeq ($(ENABLE_OPENCV), yes)
CFLAGS_INTERNAL += -DGENERIC -DGENERIC_ARM -DCV_TIOPENCL
endif

# XDC specific CFLAGS - updated as per default options observed in CCS based projects
CFLAGS_XDCINTERNAL = -Dxdc_target_types__=gnu/targets/arm/std.h -Dxdc_target_name__=A15F -Dxdc_bld__profile_$(PROFILE_$(CORE)) -Dxdc_bld__vers_1_0_4_9_3 -DBIOS_BUILD -Dfar= -D__DYNAMIC_REENT__
ifndef MODULE_NAME
  CFLAGS_XDCINTERNAL += -Dxdc_cfg__xheader__='$(CONFIGURO_DIR)/package/cfg/a15_app_pa15fg.h'
endif

# Following 'if...' block is for an application; to add a #define for each
#   component in the build. This is required to know - at compile time - which
#   components are on which core.
ifndef MODULE_NAME
  # Derive list of all packages from each of the components needed by the app
  PKG_LIST_A15_LOCAL = $(foreach COMP,$(COMP_LIST_$(CORE)),$($(COMP)_PKG_LIST))

  # Defines for the app and cfg source code to know which components/packages
  # are included in the build for the local CORE...
  CFLAGS_APP_DEFINES = $(foreach PKG,$(PKG_LIST_A15_LOCAL),-D_LOCAL_$(PKG)_)
  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_A15_LOCAL),-D_BUILD_$(PKG)_)

  ifeq ($(CORE),a15_0)
    PKG_LIST_A15_REMOTE = $(foreach COMP,$(COMP_LIST_$(CORE)),$($(COMP)_PKG_LIST))
    CFLAGS_APP_DEFINES += -D_LOCAL_CORE_$(CORE)_
  endif

  # Defines for the app and cfg source code to know which components/packages
  # are included in the build for the remote CORE...
  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_A15_REMOTE),-D_REMOTE_$(PKG)_)
  CFLAGS_APP_DEFINES += $(foreach PKG,$(PKG_LIST_A15_REMOTE),-D_BUILD_$(PKG)_)
endif

# This CFLAG is added to include header files for re-entrancy support when migrating to BIOS version 6.37.01.24. XDC tools version 3.25.05.94
CFLAGS_FOR_REENTRANCY_SUPPORT = -I$(BIOSROOT)/packages/gnu/targets/arm/libs/install-native/arm-none-eabi/include

# Assemble CFLAGS from all other CFLAGS definitions
_CFLAGS = $(CFLAGS_GLOBAL_$(CORE)) $(CFLAGS_INTERNAL) $(CFLAGS_XDCINTERNAL) $(CFLAGS_LOCAL_COMMON) $(CFLAGS_LOCAL_$(CORE)) $(CFLAGS_LOCAL_$(PLATFORM)) $(CFLAGS_LOCAL_$(SOCFAMILY)) $(CFLAGS_LOCAL_$(SOC)) $(CFLAGS_APP_DEFINES) $(CFLAGS_COMP_COMMON) $(CFLAGS_GLOBAL_$(PLATFORM)) $(CFLAGS_FOR_REENTRANCY_SUPPORT)

INCLUDE_TEMP = $(ndk_INCLUDE) $(nsp_INCLUDE)
INCLUDE_UIA = $(uia_INCLUDE)
INCLUDE_OPENCL = $(OpenCL_PATH)/packages
INCLUDE_EXTERNAL = $(foreach INCL,$(INCLUDE_EXTERNAL_INTERFACES),$($(INCL)_INCLUDE))
INCLUDE_INTERNAL = $(foreach INCL,$(INCLUDE_INTERNAL_INTERFACES),$($(INCL)_INCLUDE))
INCLUDE_ALL = $(CODEGEN_INCLUDE) $(INCDIR) $(INCLUDE_EXTERNAL) $(INCLUDE_INTERNAL) $(INCLUDE_TEMP) $(INCLUDE_OPENCL) $(INCLUDE_UIA)

# Add prefix "-I" to each of the include paths in INCLUDE_ALL
INCLUDES = $(addprefix -I,$(INCLUDE_ALL))
INCLUDES += -I$(vision_sdk_PATH)/links_fw/include/config/$(MAKEAPPNAME)/$(MAKECONFIG)
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/calib3d
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/core
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/flann
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/core/cuda
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/core/hal
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/features2d
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/genericio
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/highgui
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/imgcodecs
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/imgproc
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/ml
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/objdetect
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/photo
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/shape
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/stitching
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/superres
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/video
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/videoio
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2/videostab
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/include/opencv2
INCLUDES += -I$(vision_sdk_PATH)/../ti_components/open_compute/opencl_rtos_am57xx_01_01_10_00/packages/ti/opencl


# Object file creation
# The first $(CC) generates the dependency make files for each of the objects
# The second $(CC) compiles the source to generate object
$(OBJ_PATHS): $(OBJDIR)/%.$(OBJEXT): %.c
	$(ECHO) \# Compiling $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$(APP_NAME)$(MODULE_NAME): $<
	$(CC) -MD -MF $(DEPDIR)/$(basename $(notdir $<)).P $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS) -o $(OBJDIR)/$(basename $(notdir $<)).$(OBJEXT) $<

$(OBJ_PATHS_CPP): $(OBJDIR)/%.$(OBJEXT): %.cpp
	$(ECHO) \# Compiling $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$(APP_NAME)$(MODULE_NAME): $<
	$(CC) -MD -MF $(DEPDIR)/$(basename $(notdir $<)).P $(_CFLAGS) $(CPPFLAGS) -Wno-write-strings $(INCLUDES) $(CFLAGS_DIROPTS) -o $(OBJDIR)/$(basename $(notdir $<)).$(OBJEXT) $<

ASMFLAGS = $(ASMFLAGS_INTERNAL) $(ASMFLAGS_GLOBAL_$(CORE)) $(ASMFLAGS_LOCAL_COMMON) $(ASMFLAGS_LOCAL_$(CORE)) $(ASMFLAGS_LOCAL_$(PLATFORM)) $(ASMFLAGS_LOCAL_$(SOCFAMILY)) $(ASMFLAGS_LOCAL_$(SOC)) $(ASMFLAGS_APP_DEFINES) $(ASMFLAGS_COMP_COMMON) $(ASMFLAGS_GLOBAL_$(PLATFORM))
# Object file creation
$(OBJ_PATHS_ASM): $(OBJDIR)/%.$(OBJEXT): %.asm
	$(ECHO) \# Compiling $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$(APP_NAME)$(MODULE_NAME): $<
	$(CC) -c -x assembler-with-cpp $(_CFLAGS) $(ASMFLAGS) $(INCLUDES) -o $(OBJDIR)/$(basename $(notdir $<)).$(OBJEXT) $<

$(PACKAGE_PATHS): $(PACKAGEDIR)/%: %
	$(ECHO) \# Copying $(PACKAGE_NAME)/$($(MODULE_NAME)_RELPATH)/$<
	$(MKDIR) -p $(DEST_ROOT)/package/$(PACKAGE_SELECT)/$(PACKAGE_NAME)/$($(MODULE_NAME)_RELPATH)
	$(CP) --parents -rf $< $(DEST_ROOT)/package/$(PACKAGE_SELECT)/$(PACKAGE_NAME)/$($(MODULE_NAME)_RELPATH)

# Archive flags - normally doesn't change
ARFLAGS = cr

# Archive/library file creation
$(LIBDIR)/$(MODULE_NAME).$(LIBEXT) : $(OBJ_PATHS_ASM) $(OBJ_PATHS) $(OBJ_PATHS_CPP)
ifneq "$(or $(OBJ_PATHS),$(OBJ_PATHS_ASM),$(OBJ_PATHS_CPP))"""
	$(ECHO) \#
	$(ECHO) \# Archiving $(PLATFORM):$(CORE):$(PROFILE_$(CORE)):$(MODULE_NAME)
	$(ECHO) \#
	$(AR) $(ARFLAGS) $@ $(OBJ_PATHS_ASM) $(OBJ_PATHS) $(OBJ_PATHS_CPP)
endif

# Linker options and rules
LNKFLAGS_INTERNAL_COMMON = --gc-sections

# Assemble Linker flags from all other LNKFLAGS definitions
_LNKFLAGS = $(LNKFLAGS_INTERNAL_COMMON) $(LNKFLAGS_INTERNAL_PROFILE) $(LNKFLAGS_GLOBAL_$(CORE)) $(LNKFLAGS_LOCAL_COMMON) $(LNKFLAGS_LOCAL_$(CORE))

# Path of the RTS library - normally doesn't change for a given tool-chain
RTSLIB_PATH =

ifdef APP_NAME
	# The application libs created are read from the file
	APP_LIB_PATHS = $(shell $(CAT) $(DEST_ROOT)/linksfwLibList_$(CORE)_$(PROFILE_$(CORE)).txt)
endif

ifeq ($(DUAL_A15_SMP_BIOS),yes)
LIB_PATHS += $(pdk_PATH)/packages/ti/drv/vps/lib/$(SOC)/$(ISA)/$(PROFILE_$(CORE))/vps_osal_tirtos_smp.$(LIBEXT)
else
LIB_PATHS += $(pdk_PATH)/packages/ti/drv/vps/lib/$(SOC)/$(ISA)/$(PROFILE_$(CORE))/vps_osal_tirtos.$(LIBEXT)
endif

ifdef APP_NAME
	# The application libs created are read from the file
	LIB_PATHS += $(shell $(CAT) $(DEST_ROOT)/linksfwLibList_$(CORE)_$(PROFILE_$(CORE)).txt)
endif

# Application libs
LIB_PATHS += $(APP_LIBS_$(CORE))

LIB_PATHS += $(ndk_PATH)/packages/ti/ndk/tools/servers/lib/servers_ipv4.$(LIBEXT)
LIB_PATHS += $(ndk_PATH)/packages/ti/ndk/os/lib/os.$(LIBEXT)
LIB_PATHS += $(DEST_ROOT)/lib/$(PLATFORM)/$(ISA)/$(PROFILE_$(CORE))/edma3lld_rm.$(LIBEXT)
LIB_PATHS += $(DEST_ROOT)/lib/$(PLATFORM)/$(ISA)/$(PROFILE_$(CORE))/edma3lld_drv.$(LIBEXT)
LIB_PATHS += $(pdk_PATH)/packages/ti/drv/pm/lib/$(SOC)/$(ISA)/$(PROFILE_$(CORE))/pm_hal.$(LIBEXT)
LIB_PATHS += $(pdk_PATH)/packages/ti/drv/pm/lib/$(SOC)/$(ISA)/$(PROFILE_$(CORE))/pm_lib.$(LIBEXT)
LIB_PATHS += $(pdk_PATH)/packages/ti/csl/lib/$(SOC)/$(ISA)/$(PROFILE_$(CORE))/ti.csl.$(LIBEXT)
LIB_PATHS += $(pdk_PATH)/packages/ti/boot/sbl_auto/qspiflash/lib/$(SOC)/$(ISA)/$(PROFILE_$(CORE))/qspiflash_lib.$(LIBEXT)

LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_calib3d.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_core.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_features2d.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_flann.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_genericio.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_highgui.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_imgcodecs.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_imgproc.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_ml.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_objdetect.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_perf_calib3d.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_perf_core.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_perf_features2d.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_perf_imgcodecs.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_perf_imgproc.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_perf_objdetect.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_perf_photo.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_perf_stitching.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_perf_superres.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_perf_video.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_perf_videoio.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_photo.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_shape.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_stitching.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_superres.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_calib3d.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_core.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_features2d.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_flann.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_highgui.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_imgcodecs.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_imgproc.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_objdetect.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_photo.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_shape.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_stitching.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_superres.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_video.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_test_videoio.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_ts.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_video.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_videoio.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libopencv_videostab.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libpng.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencv/opencv-3.1.0/libs_bios/libzlib.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencl_rtos_am57xx_01_01_10_00/packages/ti/opencl/usr/lib/libOpenCL.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencl_rtos_am57xx_01_01_10_00/packages/ti/opencl/usr/lib/libocl_util.a
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencl_rtos_am57xx_01_01_10_00/packages/ti/opencl/package/lib/lib/ti.opencl/configuration.oa15fg
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencl_rtos_am57xx_01_01_10_00/packages/ti/opencl/lib/ti.opencl.aa15fg
LIB_PATHS += $(vision_sdk_PATH)/../ti_components/open_compute/opencl_rtos_am57xx_01_01_10_00/packages/ti/opencl/package/lib/lib/ti.opencl/package/package_ti.opencl.oa15fg
ifeq ($(IPC_LIB_INCLUDE),yes)
LIB_PATHS += $(pdk_PATH)/packages/ti/drv/ipc_lite/lib/$(SOC)/$(CORE)/$(PROFILE_$(CORE))/ipc_lib.$(LIBEXT)
endif
LIB_PATHS += $(pdk_PATH)/packages/ti/drv/stw_lld/platform/lib/$(SOC)/$(ISA)/$(PROFILE_$(CORE))/stw_platform.$(LIBEXT)
LIB_PATHS += $(pdk_PATH)/packages/ti/drv/stw_lld/fatlib/lib/$(SOC)/$(ISA)/$(PROFILE_$(CORE))/stw_fatlib.$(LIBEXT)
LIB_PATHS += $(RTSLIB_PATH)

OPENCLAPP_LIBS_a15_0 =

LIB_PATHS_DIR = $(BIOSROOT)/packages/gnu/targets/arm/libs/install-native/arm-none-eabi/lib/fpu
LIB_PATHS_DIR += $(CODEGEN_PATH_A15)/lib/gcc/arm-none-eabi/4.9.3/fpu
LIB_PATHS_DIR += $(CODEGEN_PATH_A15)/arm-none-eabi/lib/fpu

LNK_LIBS = $(addprefix -L,$(LIB_PATHS_DIR))
#LNK_LIBS += $(LIB_PATHS)
LNK_LIBS += --start-group $(LIB_PATHS) --end-group
# Added -lgcc twice to support both "before" and "after" order with -lm and -lc
# This is required to satisfy some linking order to support
# some Math/Algo kernals on A15
#LNK_LIBS += -lstdc++ -lgcc -lm -lc -lgcc -lnosys
LNK_LIBS += --start-group -lstdc++ -lgcc -lc -lm -lnosys --end-group

OPENCVAPP_LIBS_a15_0 = --start-group $(_OPENCVAPP_LIBS_a15_0) --end-group

# Linker - to create executable file
ifeq ($(LOCAL_APP_NAME),)
 EXE_NAME = $(BINDIR)/$(APP_NAME)_$(CORE)_$(PROFILE_$(CORE)).$(EXEEXT)
else
 ifeq ($(PROFILE_$(CORE)),prod_release)
  EXE_NAME = $(BINDIR)/$(LOCAL_APP_NAME).$(EXEEXT)
 else
  EXE_NAME = $(BINDIR)/$(LOCAL_APP_NAME)_$(PROFILE_$(CORE)).$(EXEEXT)
 endif
endif

$(EXE_NAME) : $(OBJ_PATHS_ASM) $(OBJ_PATHS) $(OBJ_PATHS_CPP) $(LIB_PATHS) $(LNKCMD_FILE) $(OBJDIR)/$(CFG_COBJ_XDC)
	$(ECHO) \# Linking into $(EXE_NAME)...
	$(ECHO) \#
	$(CP) $(OBJDIR)/$(CFG_COBJ_XDC) $(CONFIGURO_DIR)/package/cfg
	$(LNK) $(_LNKFLAGS) --start-group $(OBJ_PATHS_ASM) $(OBJ_PATHS) $(OBJ_PATHS_CPP) $(APP_LIB_PATHS) $(OPENCVAPP_LIBS_a15_0) $(OPENCLAPP_LIBS_a15_0) -T $(LNKCMD_FILE) $(LNK_LIBS) --end-group -Map=$@.map -o $@
	$(ECHO) \#
	$(ECHO) \# $@ created.
	$(ECHO) \#

# XDC specific - assemble XDC-Configuro command
ifeq ($(PROFILE_$(CORE)),prod_release)
  CONFIGURO_PROFILE = release
else
  CONFIGURO_PROFILE = $(PROFILE_$(CORE))
endif
CONFIGURO_CMD = $(xdc_PATH)/xs xdc.tools.configuro --generationOnly -o $(CONFIGURO_DIR) -t $(TARGET_XDC) -p $(PLATFORM_XDC) \
               -r $(CONFIGURO_PROFILE) -b $(CONFIG_BLD_XDC_$(ISA)) --cfgArgs $(CFGARGS_XDC) $(XDC_CFG_FILE_NAME)
_XDC_GREP_STRING = \"$(XDC_GREP_STRING)\"
EGREP_CMD = $(EGREP) -ivw $(XDC_GREP_STRING) $(XDCLNKCMD_FILE)

ifeq ($(OS),Windows_NT)
EVERYONE = $(word 1,$(shell whoami -groups | findstr "S-1-1-0"))
endif

# Invoke configuro for the rest of the components
#  NOTE: 1. String handling is having issues with various make versions when the
#           cammand is directly tried to be given below. Hence, as a work-around,
#           the command is re-directed to a file (shell or batch file) and then
#           executed
#        2. The linker.cmd file generated, includes the libraries generated by
#           XDC. An egrep to search for these and omit in the .cmd file is added
#           after configuro is done
xdc_configuro : $(XDC_CFG_FILE)
	$(ECHO) \# Invoking configuro...
	$(MKDIR) -p $(DEST_ROOT)
	$(ECHO) -e $(CONFIGURO_CMD) > $(DEST_ROOT)/maketemp_configuro_cmd_$(CORE).bat
ifeq ($(OS),Windows_NT)
	CACLS $(DEST_ROOT)/maketemp_configuro_cmd_$(CORE).bat /E /P $(EVERYONE):F
else
	$(CHMOD) a+x $(DEST_ROOT)/maketemp_configuro_cmd_$(CORE).bat
endif
	$(DEST_ROOT)/maketemp_configuro_cmd_$(CORE).bat
	$(CP) $(XDCLNKCMD_FILE) $(LNKCMD_FILE)
	$(ECHO) \# Configuro done!

$(LNKCMD_FILE) :

ifndef MODULE_NAME
$(OBJDIR)/$(CFG_COBJ_XDC) : $(CFG_C_XDC)
	$(ECHO) \# Compiling generated $< to $@ ...
	$(CC) $(_CFLAGS) $(INCLUDES) $(CFLAGS_DIROPTS)-o $@ $(CFG_C_XDC)
endif

# Include dependency make files that were generated by $(CC)
-include $(SRCS:%.c=$(DEPDIR)/%.P)
-include $(SRCS_CPP:%.cpp=$(DEPDIR)/%.P)

# Nothing beyond this point