blob: 70e1880c8004fc262a8a03cd7f4e9f3eb7b6e52e [file] [log] [blame]
# Explicitly add kernel sources specific to the Xtensa optimized
# implementations.
MICROLITE_CC_KERNEL_SRCS += \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/add_vision.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/conv_common_xtensa.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/conv_hifi.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/conv_int16_reference.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/conv_int8_int16.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/conv_int8_reference.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/conv_vision.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/depthwise_conv_hifi.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/depthwise_conv_vision.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/fully_connected_common_xtensa.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/fully_connected_int8.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/fully_connected_vision.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/pad_vision.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/pooling_int8.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/pooling_vision.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/reduce_vision.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/reshape_vision.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/softmax_int8_int16.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/softmax_vision.cc
ifeq ($(TARGET_ARCH), hifimini)
# hifimini optimizations are implemented in the TFLM repository itself.
THIRD_PARTY_KERNEL_CC_SRCS += \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/hifimini/svdf.cc \
$(TENSORFLOW_ROOT)tensorflow/lite/micro/kernels/xtensa/hifimini/fully_connected.cc
FFT_PATH := $(MAKEFILE_DIR)/downloads/hifi_fft
INCLUDES += -I$(FFT_PATH)/
THIRD_PARTY_KERNEL_CC_SRCS += \
$(shell find $(FFT_PATH)/hifi2_fft -name "*.c")
THIRD_PARTY_CC_HDRS += \
$(shell find $(FFT_PATH)/hifi2_fft -name "*.h")
else ifeq ($(TARGET_ARCH), hifi5)
DOWNLOAD_RESULT := $(shell $(MAKEFILE_DIR)/ext_libs/xtensa_download.sh ${DOWNLOADS_DIR} hifi5 $(TENSORFLOW_ROOT))
ifneq ($(DOWNLOAD_RESULT), SUCCESS)
$(error Something went wrong with the xtensa download: $(DOWNLOAD_RESULT))
endif
DOWNLOAD_RESULT := $(shell $(MAKEFILE_DIR)/ext_libs/xtensa_ndsp_download.sh ${DOWNLOADS_DIR} hifi5 $(TENSORFLOW_ROOT))
ifneq ($(DOWNLOAD_RESULT), SUCCESS)
$(error Something went wrong with the xtensa ndsp download: $(DOWNLOAD_RESULT))
endif
# TODO(b/161489252): -Wno-shadow is only needed for xannlib. But since we do
# not have separate cflags (or the concept of modular build targets) with the
# Makefile, -Wno-shadow will be used for everything.
PLATFORM_FLAGS = \
-DNNLIB_HIFI5 \
-Wno-shadow
CCFLAGS += $(PLATFORM_FLAGS)
CXXFLAGS += $(PLATFORM_FLAGS)
NNLIB_PATH := $(MAKEFILE_DIR)/downloads/xa_nnlib_hifi5
NDSPLIB_PATH := $(MAKEFILE_DIR)/downloads/ndsplib-hifi5
THIRD_PARTY_KERNEL_CC_SRCS += \
$(shell find $(NNLIB_PATH) -name "*.c")
# The NDSP library has a lot of file. Add as needed.
THIRD_PARTY_KERNEL_CC_SRCS += \
$(shell find $(NDSPLIB_PATH)/library/fft/fft -name "*.c") \
$(shell find $(NDSPLIB_PATH)/library/fft/fft_ie -name "*.c") \
$(shell find $(NDSPLIB_PATH)/library/fft/fft_ief -name "*.c") \
$(shell find $(NDSPLIB_PATH)/library/twiddles -name "*.c") \
$(shell find $(NDSPLIB_PATH)/library -name "version.c")
EXCLUDED_NNLIB_SRCS = \
$(NNLIB_PATH)/algo/layers/cnn/src/xa_nn_cnn_api.c \
$(NNLIB_PATH)/algo/layers/gru/src/xa_nn_gru_api.c \
$(NNLIB_PATH)/algo/layers/lstm/src/xa_nn_lstm_api.c
THIRD_PARTY_KERNEL_CC_SRCS := $(filter-out $(EXCLUDED_NNLIB_SRCS), $(THIRD_PARTY_KERNEL_CC_SRCS))
THIRD_PARTY_CC_HDRS += \
$(shell find $(NNLIB_PATH) -name "*.h") \
$(shell find $(NDSPLIB_PATH) -name "*.h")
INCLUDES += \
-I$(NNLIB_PATH)/ \
-I$(NNLIB_PATH)/algo/kernels/ \
-I$(NNLIB_PATH)/include/nnlib/ \
-I$(NNLIB_PATH)/include/ \
-I$(NNLIB_PATH)/algo/common/include/ \
-I$(NDSPLIB_PATH)/library/include/ \
-I$(NDSPLIB_PATH)/library/include_private/
else ifeq ($(TARGET_ARCH), $(filter $(TARGET_ARCH), hifi3 hifi4))
# NNLib hifi4 also supports hifi3
DOWNLOAD_RESULT := $(shell $(MAKEFILE_DIR)/ext_libs/xtensa_download.sh ${DOWNLOADS_DIR} hifi4 $(TENSORFLOW_ROOT))
ifneq ($(DOWNLOAD_RESULT), SUCCESS)
$(error Something went wrong with the xtensa download: $(DOWNLOAD_RESULT))
endif
DOWNLOAD_RESULT := $(shell $(MAKEFILE_DIR)/ext_libs/xtensa_ndsp_download.sh ${DOWNLOADS_DIR} $(TARGET_ARCH) $(TENSORFLOW_ROOT))
ifneq ($(DOWNLOAD_RESULT), SUCCESS)
$(error Something went wrong with the xtensa ndsp download: $(DOWNLOAD_RESULT))
endif
# TODO(b/161489252): -Wno-shadow is only needed for xannlib. But since we do
# not have separate cflags (or the concept of modular build targets) with the
# Makefile, -Wno-shadow will be used for everything.
PLATFORM_FLAGS = \
-DNNLIB_V2 \
-Wno-shadow
CCFLAGS += $(PLATFORM_FLAGS)
CXXFLAGS += $(PLATFORM_FLAGS)
# NNLib for hifi4 also supports hifi3
NNLIB_PATH := $(MAKEFILE_DIR)/downloads/xa_nnlib_hifi4
NDSPLIB_PATH := $(MAKEFILE_DIR)/downloads/ndsplib-$(TARGET_ARCH)
THIRD_PARTY_KERNEL_CC_SRCS += \
$(shell find $(NNLIB_PATH) -name "*.c")
# The NDSP library has a lot of file. Add as needed.
THIRD_PARTY_KERNEL_CC_SRCS += \
$(shell find $(NDSPLIB_PATH)/library/fft/fft -name "*.c") \
$(shell find $(NDSPLIB_PATH)/library/fft/fft_ie -name "*.c") \
$(shell find $(NDSPLIB_PATH)/library/fft/fft_ief -name "*.c") \
$(shell find $(NDSPLIB_PATH)/library/twiddles -name "*.c") \
$(shell find $(NDSPLIB_PATH)/library -name "version.c")
EXCLUDED_NNLIB_SRCS = \
$(NNLIB_PATH)/algo/layers/cnn/src/xa_nn_cnn_api.c \
$(NNLIB_PATH)/algo/layers/gru/src/xa_nn_gru_api.c \
$(NNLIB_PATH)/algo/layers/lstm/src/xa_nn_lstm_api.c
ifeq ($(TARGET_ARCH), hifi3)
EXCLUDED_NNLIB_SRCS += \
$(NNLIB_PATH)/algo/ndsp/hifi4/src/pow2f_tbl.c \
$(NNLIB_PATH)/algo/ndsp/hifi4/src/scl_tanhf_hifi4.c \
$(NNLIB_PATH)/algo/ndsp/hifi4/src/vec_tanhf_hifi4.c \
$(NNLIB_PATH)/algo/ndsp/hifi4/src/tanhf_tbl.c
endif
ifeq ($(TARGET_ARCH), hifi4)
EXCLUDED_NNLIB_SRCS += \
$(NNLIB_PATH)/algo/kernels/activations/hifi4/xa_nn_activations_asym8_asym8.c
endif
THIRD_PARTY_KERNEL_CC_SRCS := $(filter-out $(EXCLUDED_NNLIB_SRCS), $(THIRD_PARTY_KERNEL_CC_SRCS))
THIRD_PARTY_CC_HDRS += \
$(shell find $(NNLIB_PATH) -name "*.h") \
$(shell find $(NDSPLIB_PATH) -name "*.h")
INCLUDES += \
-I$(NNLIB_PATH)/ \
-I$(NNLIB_PATH)/algo/kernels/ \
-I$(NNLIB_PATH)/include/nnlib/ \
-I$(NNLIB_PATH)/include/ \
-I$(NNLIB_PATH)/algo/common/include/ \
-I$(NDSPLIB_PATH)/library/include/ \
-I$(NDSPLIB_PATH)/library/include_private/
else ifeq ($(TARGET_ARCH), vision_p6)
DOWNLOAD_RESULT := $(shell $(MAKEFILE_DIR)/ext_libs/xtensa_download.sh ${DOWNLOADS_DIR} vision_p6 $(TENSORFLOW_ROOT))
ifneq ($(DOWNLOAD_RESULT), SUCCESS)
$(error Something went wrong with the xtensa download: $(DOWNLOAD_RESULT))
endif
# TODO(b/161489252): -Wno-shadow is only needed for xannlib. But since we do
# not have separate cflags (or the concept of modular build targets) with the
# Makefile, -Wno-shadow will be used for everything.
PLATFORM_FLAGS = \
-DXI_ERROR_LEVEL=XI_ERROR_LEVEL_NO_ERROR \
-DCNNRT_PERF_LEVEL=CNNRT_PERF_LEVEL_NONE \
-DINCLUDE_XI_CNN \
-Wno-shadow
CCFLAGS += $(PLATFORM_FLAGS)
CXXFLAGS += $(PLATFORM_FLAGS)
NNLIB_PATH := $(MAKEFILE_DIR)/downloads/xi_tflmlib_vision_p6
THIRD_PARTY_CC_SRCS += \
$(shell find $(NNLIB_PATH) -name "*.cc")
INCLUDES += \
-I$(NNLIB_PATH)/flk/include \
-I$(NNLIB_PATH)/kernels/include/ \
-I$(NNLIB_PATH)/runtime/include/
LDFLAGS += -lidma
else
$(error Unsupported TARGET_ARCH=$(TARGET_ARCH))
endif