$(NNSTREAMER_DECODER_IS_SRCS)
endif
+# common headers (nnstreamer, gstreamer, glib)
+NNSTREAMER_INC := \
+ $(NNSTREAMER_INCLUDES) \
+ $(NNSTREAMER_CAPI_INCLUDES) \
+ $(GST_HEADERS_COMMON)
+
include $(CLEAR_VARS)
LOCAL_MODULE := nnstreamer
-# Remove duplicates
LOCAL_SRC_FILES := $(sort $(NNSTREAMER_SRC_FILES))
-
-LOCAL_C_INCLUDES := \
- $(NNSTREAMER_INCLUDES) \
- $(NNSTREAMER_CAPI_INCLUDES)
-
-# common headers (gstreamer, glib)
-LOCAL_C_INCLUDES += $(GST_HEADERS_COMMON)
-
-LOCAL_CFLAGS += -O2 -fPIC $(NNS_API_FLAGS)
-LOCAL_CXXFLAGS += -std=c++11 -O2 -fPIC -frtti -fexceptions $(NNS_API_FLAGS)
-
-include $(BUILD_STATIC_LIBRARY)
+LOCAL_C_INCLUDES := $(NNSTREAMER_INC)
+LOCAL_CFLAGS := -O2 -fPIC $(NNS_API_FLAGS)
+LOCAL_CXXFLAGS := -std=c++11 -O2 -fPIC -frtti -fexceptions $(NNS_API_FLAGS)
+LOCAL_SHARED_LIBRARIES := gstreamer_android
+LOCAL_LDLIBS := -llog -landroid -lmediandk
+
+LOCAL_EXPORT_C_INCLUDES := $(NNSTREAMER_INC)
+LOCAL_EXPORT_CFLAGS := $(NNS_API_FLAGS)
+LOCAL_EXPORT_CXXFLAGS := $(NNS_API_FLAGS)
+LOCAL_EXPORT_LDLIBS := -llog -landroid
+
+include $(BUILD_SHARED_LIBRARY)
--- /dev/null
+#------------------------------------------------------
+# SNPE (The Snapdragon Neural Processing Engine)
+#
+# This mk file defines prebuilt libraries for snpe module.
+# (snpe-sdk, arm64-v8a only)
+#------------------------------------------------------
+LOCAL_PATH := $(call my-dir)
+
+ifndef SNPE_LIB_PATH
+$(error SNPE_LIB_PATH is not defined!)
+endif
+
+SNPE_PREBUILT_LIBS :=
+
+#------------------------------------------------------
+# snpe-sdk (prebuilt shared library)
+#------------------------------------------------------
+include $(CLEAR_VARS)
+LOCAL_MODULE := libSNPE
+LOCAL_SRC_FILES := $(SNPE_LIB_PATH)/libSNPE.so
+include $(PREBUILT_SHARED_LIBRARY)
+SNPE_PREBUILT_LIBS += libSNPE
#------------------------------------------------------
# snpe-sdk (prebuilt shared library)
#------------------------------------------------------
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libSNPE
-LOCAL_SRC_FILES := $(SNPE_LIB_PATH)/libSNPE.so
-
-include $(PREBUILT_SHARED_LIBRARY)
+include $(LOCAL_PATH)/Android-snap-prebuilt.mk
#------------------------------------------------------
# tensor-filter sub-plugin for snpe
#------------------------------------------------------
include $(CLEAR_VARS)
-LOCAL_MODULE := snpe
+LOCAL_MODULE := snpe-subplugin
LOCAL_SRC_FILES := $(NNSTREAMER_FILTER_SNPE_SRCS)
-LOCAL_CXXFLAGS += -std=c++11 -frtti -fexceptions -Wno-exceptions -O2 -DNDEBUG $(NNS_API_FLAGS)
-LOCAL_C_INCLUDES := $(NNSTREAMER_INCLUDES) $(SNPE_INCLUDES) $(GST_HEADERS_COMMON)
-LOCAL_SHARED_LIBRARIES := libSNPE
-LOCAL_STATIC_LIBRARIES := nnstreamer
+LOCAL_CXXFLAGS := -std=c++11 -O2 -fPIC -frtti -fexceptions -Wno-exceptions
+LOCAL_C_INCLUDES := $(SNPE_INCLUDES)
+LOCAL_SHARED_LIBRARIES := $(SNPE_PREBUILT_LIBS) $(NNS_API_LIBS)
-include $(BUILD_STATIC_LIBRARY)
+include $(BUILD_SHARED_LIBRARY)
#------------------------------------------------------
include $(CLEAR_VARS)
-LOCAL_MODULE := tensorflow-lite
+LOCAL_MODULE := tensorflow-lite-subplugin
LOCAL_SRC_FILES := $(NNSTREAMER_FILTER_TFLITE_SRCS)
-LOCAL_CFLAGS += -O2 -DNDEBUG $(NNS_API_FLAGS)
-LOCAL_CXXFLAGS += -std=c++11 -frtti -fexceptions -O2 -DNDEBUG $(NNS_API_FLAGS)
-LOCAL_C_INCLUDES := $(NNSTREAMER_INCLUDES) $(TF_LITE_INCLUDES) $(GST_HEADERS_COMMON)
-LOCAL_STATIC_LIBRARIES := tensorflow-lite-lib
+LOCAL_CXXFLAGS := -std=c++11 -O2 -fPIC -frtti -fexceptions
+LOCAL_C_INCLUDES := $(TF_LITE_INCLUDES)
+LOCAL_STATIC_LIBRARIES := tensorflow-lite-lib cpufeatures
+LOCAL_SHARED_LIBRARIES := $(NNS_API_LIBS)
-include $(BUILD_STATIC_LIBRARY)
+include $(BUILD_SHARED_LIBRARY)
# SNPE (Snapdragon Neural Processing Engine)
ENABLE_SNPE := false
+# Common libraries for sub-plugins
+NNS_API_LIBS := nnstreamer gstreamer_android
NNS_API_FLAGS :=
-NNS_API_STATIC_LIBS :=
+NNS_SUBPLUGINS :=
ifeq ($(NNSTREAMER_API_OPTION),single)
NNS_API_FLAGS += -DNNS_SINGLE_ONLY=1
NNS_API_FLAGS += -DVERSION=\"$(NNSTREAMER_VERSION)\"
#------------------------------------------------------
-# external libs
+# external libs and sub-plugins
#------------------------------------------------------
ifeq ($(ENABLE_TF_LITE),true)
NNS_API_FLAGS += -DENABLE_TENSORFLOW_LITE=1
# define types in tensorflow-lite sub-plugin. This assumes tensorflow-lite >= 1.13 (older versions don't have INT8/INT16)
NNS_API_FLAGS += -DTFLITE_INT8=1 -DTFLITE_INT16=1
-NNS_API_STATIC_LIBS += tensorflow-lite cpufeatures
+NNS_SUBPLUGINS += tensorflow-lite-subplugin
include $(LOCAL_PATH)/Android-tensorflow-lite.mk
endif
ifeq ($(ENABLE_SNAP),true)
NNS_API_FLAGS += -DENABLE_SNAP=1
-NNS_API_STATIC_LIBS += snap
+NNS_SUBPLUGINS += snap-subplugin
include $(LOCAL_PATH)/Android-snap.mk
endif
ifeq ($(ENABLE_NNFW),true)
NNS_API_FLAGS += -DENABLE_NNFW=1
-NNS_API_STATIC_LIBS += nnfw
+NNS_SUBPLUGINS += nnfw-subplugin
include $(LOCAL_PATH)/Android-nnfw.mk
endif
ifeq ($(ENABLE_SNPE),true)
NNS_API_FLAGS += -DENABLE_SNPE=1
-NNS_API_STATIC_LIBS += snpe
+NNS_SUBPLUGINS += snpe-subplugin
include $(LOCAL_PATH)/Android-snpe.mk
endif
include $(LOCAL_PATH)/Android-nnstreamer.mk
# Remove any duplicates.
-NNS_API_STATIC_LIBS := $(sort $(NNS_API_STATIC_LIBS))
+NNS_SUBPLUGINS := $(sort $(NNS_SUBPLUGINS))
#------------------------------------------------------
# native code for api
include $(CLEAR_VARS)
LOCAL_MODULE := nnstreamer-native
-LOCAL_SRC_FILES := nnstreamer-native-api.c \
+
+LOCAL_SRC_FILES := \
+ nnstreamer-native-api.c \
nnstreamer-native-singleshot.c
-LOCAL_CFLAGS += -O2 $(NNS_API_FLAGS)
-LOCAL_C_INCLUDES := $(NNSTREAMER_INCLUDES) $(NNSTREAMER_CAPI_INCLUDES)
-LOCAL_STATIC_LIBRARIES := nnstreamer $(NNS_API_STATIC_LIBS)
-LOCAL_SHARED_LIBRARIES := gstreamer_android
-LOCAL_LDLIBS := -llog -landroid
ifneq ($(NNSTREAMER_API_OPTION),single)
LOCAL_SRC_FILES += \
nnstreamer-native-customfilter.c \
nnstreamer-native-pipeline.c
-LOCAL_LDLIBS += -lmediandk
endif
+LOCAL_CFLAGS := -O2 -fPIC
+LOCAL_SHARED_LIBRARIES := $(NNS_API_LIBS) $(NNS_SUBPLUGINS)
+
include $(BUILD_SHARED_LIBRARY)
#------------------------------------------------------
include $(LOCAL_PATH)/Android-gst-plugins.mk
GSTREAMER_PLUGINS := $(GST_REQUIRED_PLUGINS)
-GSTREAMER_EXTRA_DEPS := $(GST_REQUIRED_DEPS) gio-2.0 gmodule-2.0
+GSTREAMER_EXTRA_DEPS := $(GST_REQUIRED_DEPS) gio-2.0 gmodule-2.0 json-glib-1.0
GSTREAMER_EXTRA_LIBS := $(GST_REQUIRED_LIBS) -liconv
GSTREAMER_INCLUDE_FONTS := no
GSTREAMER_INCLUDE_CA_CERTIFICATES := no
-ifeq ($(ENABLE_NNFW),true)
-GSTREAMER_EXTRA_DEPS += json-glib-1.0
-endif
-
include $(GSTREAMER_NDK_BUILD_PATH)/gstreamer-1.0.mk
#------------------------------------------------------
# NDK cpu-features
#------------------------------------------------------
-ifeq ($(filter cpufeatures,$(NNS_API_STATIC_LIBS)),cpufeatures)
$(call import-module, android/cpufeatures)
-endif
pushd $nnstreamer_dir
# Make directory to build NNStreamer library
-mkdir -p build_android_lib
+build_dir=build_android_$build_type
+mkdir -p $build_dir
# Copy the files (native and java to build Android library) to build directory
-cp -r ./api/android/* ./build_android_lib
+cp -r ./api/android/* ./$build_dir
# Get the prebuilt libraries and build-script
-mkdir -p build_android_lib/external
+mkdir -p $build_dir/external
-svn --force export https://github.com/nnstreamer/nnstreamer-android-resource/trunk/android_api ./build_android_lib
-svn --force export https://github.com/nnstreamer/nnstreamer-android-resource/trunk/external/tensorflow-lite-$nnstreamer_tf_lite_ver.tar.xz ./build_android_lib/external
-svn --force export https://github.com/nnstreamer/nnstreamer-android-resource/trunk/external/jni/Android-nnstreamer-prebuilt.mk ./build_android_lib/external
+svn --force export https://github.com/nnstreamer/nnstreamer-android-resource/trunk/android_api ./$build_dir
+svn --force export https://github.com/nnstreamer/nnstreamer-android-resource/trunk/external/tensorflow-lite-$nnstreamer_tf_lite_ver.tar.xz ./$build_dir/external
+svn --force export https://github.com/nnstreamer/nnstreamer-android-resource/trunk/external/jni/Android-nnstreamer-prebuilt.mk ./$build_dir/external
-pushd ./build_android_lib
+pushd ./$build_dir
# Update target ABI
sed -i "s|abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'|abiFilters '$target_abi'|" api/build.gradle
# Update tf-lite option
if [[ $enable_tflite == "yes" ]]; then
+ sed -i "s|ENABLE_TF_LITE := false|ENABLE_TF_LITE := true|" external/Android-nnstreamer-prebuilt.mk
sed -i "s|ENABLE_TF_LITE := false|ENABLE_TF_LITE := true|" api/src/main/jni/Android.mk
tar xJf ./external/tensorflow-lite-$nnstreamer_tf_lite_ver.tar.xz -C ./api/src/main/jni
fi
cp -r aar_extracted/assets/* main/assets
fi
+ # java, libraries and mk files
cp -r api/src/main/java/org/freedesktop/* main/java/org/freedesktop
cp -r aar_extracted/jni/* main/jni/nnstreamer/lib
+ cp api/src/main/jni/*-prebuilt.mk main/jni
cp external/Android-nnstreamer-prebuilt.mk main/jni
+
# header for C-API
cp $nnstreamer_dir/api/capi/include/nnstreamer.h main/jni/nnstreamer/include
cp $nnstreamer_dir/api/capi/include/nnstreamer-single.h main/jni/nnstreamer/include
popd
# Remove build directory
-rm -rf build_android_lib
+rm -rf $build_dir
popd
GST_HEADERS_COMMON := \
$(GSTREAMER_ROOT)/include/gstreamer-1.0 \
$(GSTREAMER_ROOT)/include/glib-2.0 \
+ $(GSTREAMER_ROOT)/include/json-glib-1.0 \
$(GSTREAMER_ROOT)/lib/glib-2.0/include \
$(GSTREAMER_ROOT)/include